Server mit Fail2Ban absichern

Kurzer Hintergrund

Nachdem ich mehr oder weniger zufällig mal einen Blick in meinen Access-Log geworfen habe fiel mir auf, dass wirklich sehr oft probiert wird meine SSH-Benutzer zu erraten und sich so Zutritt zu meinem Server zu verschaffen, sofern das Passwort einigermaßen sicher ist sollte soweit nichts passieren, da diese nicht erraten werden. Es ist dennoch sehr beängstigend zu sehen, wie oft man doch von Bot-Netzen attackiert wird. Hier einmal der selektive Auswurf, aller fehlgeschlagenen Versuche.

Es wird sicherlich weniger vorkommen bei Zuhause-gehosteten-Systemen, als bei VPS (Virtual Private Server) von größeren Anbietern, bei mir jedenfalls war es enorm.

cat /var/log/auth.log | grep 'sshd.*Failed'

Ergibt bei mir folgendes:

Mar 27 17:22:54 vmd25759 sshd[4658]: Failed password for invalid user ethos from 203.198.158.147 port 35036 ssh2
Mar 27 17:32:30 vmd25759 sshd[4708]: Failed password for invalid user ethos from 180.250.210.133 port 60302 ssh2
Mar 27 17:34:16 vmd25759 sshd[4719]: Failed password for invalid user ethos from 139.59.244.27 port 57520 ssh2
Mar 27 17:43:05 vmd25759 sshd[4876]: Failed password for invalid user ethos from 41.138.51.69 port 33283 ssh2
Mar 27 18:04:31 vmd25759 sshd[4985]: Failed password for invalid user admin from 180.109.81.60 port 52236 ssh2
Mar 27 18:04:39 vmd25759 sshd[4987]: Failed password for invalid user admin from 138.97.95.183 port 58319 ssh2
Mar 27 18:04:50 vmd25759 sshd[4989]: Failed password for invalid user admin from 14.187.50.77 port 34155 ssh2
Mar 27 18:12:30 vmd25759 sshd[5103]: Failed password for root from 83.234.11.186 port 46284 ssh2
Mar 27 18:29:24 vmd25759 sshd[5187]: Failed password for root from 161.139.115.25 port 49498 ssh2
Mar 27 18:34:05 vmd25759 sshd[5211]: Failed password for invalid user luis from 122.112.234.249 port 55480 ssh2
Mar 27 18:41:27 vmd25759 sshd[5325]: Failed password for invalid user owncloud from 43.241.8.49 port 42336 ssh2
Mar 27 18:52:23 vmd25759 sshd[5379]: Failed password for root from 69.181.209.51 port 33941 ssh2
Mar 27 19:08:26 vmd25759 sshd[5464]: Failed password for invalid user felix from 122.112.234.249 port 38656 ssh2
Mar 27 19:11:48 vmd25759 sshd[5557]: Failed password for invalid user alfresco from 122.112.234.249 port 62299 ssh2
Mar 27 19:23:35 vmd25759 sshd[5624]: Failed password for root from 180.250.247.43 port 51074 ssh2
Mar 27 20:48:05 vmd25759 sshd[6302]: Failed password for invalid user guest from 103.231.251.218 port 40333 ssh2
Mar 27 21:14:14 vmd25759 sshd[6509]: Failed password for invalid user sisecadmin from 103.231.251.218 port 36765 ssh2
Mar 27 21:20:27 vmd25759 sshd[6547]: Failed password for invalid user deployer from 103.231.251.218 port 56208 ssh2
Mar 27 21:52:54 vmd25759 sshd[6824]: Failed password for root from 138.197.201.169 port 35848 ssh2
Mar 27 22:18:16 vmd25759 sshd[7035]: Failed password for invalid user ethos from 1.234.56.175 port 36419 ssh2
Mar 27 23:00:29 vmd25759 sshd[7323]: Failed password for invalid user vbox from 119.27.163.34 port 42262 ssh2
Mar 27 23:45:22 vmd25759 sshd[7688]: Failed password for invalid user pi from 98.22.163.164 port 50158 ssh2
Mar 27 23:45:22 vmd25759 sshd[7689]: Failed password for invalid user pi from 98.22.163.164 port 50160 ssh2
Mar 28 02:16:17 vmd25759 sshd[8800]: Failed password for invalid user ethos from 110.10.174.179 port 60127 ssh2
Mar 28 03:31:48 vmd25759 sshd[9314]: Failed password for invalid user zxincsap from 122.114.78.89 port 33261 ssh2
Mar 28 03:35:21 vmd25759 sshd[9332]: Failed password for invalid user zxincsap from 122.114.78.89 port 39379 ssh2
Mar 28 05:13:30 vmd25759 sshd[10115]: Failed password for invalid user pi from 92.4.92.206 port 59494 ssh2
Mar 28 05:13:30 vmd25759 sshd[10117]: Failed password for invalid user pi from 92.4.92.206 port 59496 ssh2
Mar 28 06:20:19 vmd25759 sshd[10658]: Failed password for invalid user admin from 113.194.128.96 port 53670 ssh2
Mar 28 06:20:25 vmd25759 sshd[10660]: Failed password for invalid user admin from 37.212.121.192 port 48815 ssh2
Mar 28 06:20:34 vmd25759 sshd[10662]: Failed password for invalid user admin from 138.97.92.149 port 50062 ssh2
Mar 28 06:55:33 vmd25759 sshd[10947]: Failed password for invalid user activemq from 193.70.118.36 port 2800 ssh2
Mar 28 07:24:02 vmd25759 sshd[11143]: Failed password for invalid user deloitte from 193.70.118.36 port 58290 ssh2
Mar 28 07:52:28 vmd25759 sshd[11329]: Failed password for invalid user work from 193.70.118.36 port 64857 ssh2
Mar 28 07:57:56 vmd25759 sshd[11349]: Failed password for invalid user server from 185.173.224.134 port 34175 ssh2
Mar 28 08:20:57 vmd25759 sshd[11533]: Failed password for invalid user oracle from 193.70.118.36 port 11322 ssh2
Mar 28 08:27:51 vmd25759 sshd[11564]: Failed password for invalid user install from 185.173.224.134 port 55267 ssh2
Mar 28 08:49:29 vmd25759 sshd[11738]: Failed password for invalid user sftp from 193.70.118.36 port 10247 ssh2
Mar 28 08:52:16 vmd25759 sshd[11753]: Failed password for invalid user admin from 125.212.233.50 port 54542 ssh2
Mar 28 08:57:39 vmd25759 sshd[11777]: Failed password for invalid user apps from 185.173.224.134 port 47500 ssh2
Mar 28 09:03:20 vmd25759 sshd[11810]: Failed password for invalid user miner from 202.29.70.42 port 58276 ssh2
Mar 28 09:17:54 vmd25759 sshd[11956]: Failed password for invalid user postgres from 193.70.118.36 port 60643 ssh2
Mar 28 09:27:19 vmd25759 sshd[12000]: Failed password for invalid user postgres from 185.173.224.134 port 39671 ssh2
Mar 28 09:46:22 vmd25759 sshd[12162]: Failed password for invalid user nero from 193.70.118.36 port 43306 ssh2
Mar 28 09:57:03 vmd25759 sshd[12210]: Failed password for invalid user web from 185.173.224.134 port 60763 ssh2
Mar 28 10:14:47 vmd25759 sshd[12374]: Failed password for invalid user postgres from 193.70.118.36 port 47210 ssh2
Mar 28 10:26:46 vmd25759 sshd[12432]: Failed password for invalid user king from 185.173.224.134 port 53742 ssh2
Mar 28 10:43:15 vmd25759 sshd[12585]: Failed password for invalid user nextcloud from 193.70.118.36 port 60417 ssh2
Mar 28 10:56:46 vmd25759 sshd[12648]: Failed password for invalid user oracle from 185.173.224.134 port 46675 ssh2
Mar 28 11:11:49 vmd25759 sshd[12800]: Failed password for invalid user xguest from 193.70.118.36 port 27889 ssh2
Mar 28 11:26:52 vmd25759 sshd[12879]: Failed password for invalid user q3server from 185.173.224.134 port 39594 ssh2
Mar 28 11:56:34 vmd25759 sshd[13097]: Failed password for invalid user jack from 185.173.224.134 port 60866 ssh2
Mar 28 12:26:15 vmd25759 sshd[13322]: Failed password for invalid user system from 185.173.224.134 port 53906 ssh2
Mar 28 13:17:24 vmd25759 sshd[13725]: Failed password for invalid user team from 93.83.4.150 port 33719 ssh2
Mar 28 13:53:11 vmd25759 sshd[14582]: Failed password for invalid user pi from 210.100.234.162 port 42520 ssh2
Mar 28 13:53:11 vmd25759 sshd[14581]: Failed password for invalid user pi from 210.100.234.162 port 42519 ssh2
Mar 28 14:01:53 vmd25759 sshd[14689]: Failed password for invalid user ethos from 36.77.124.2 port 37627 ssh2
Mar 28 14:57:42 vmd25759 sshd[15382]: Failed password for invalid user pi from 84.62.13.251 port 37002 ssh2
Mar 28 14:57:42 vmd25759 sshd[15383]: Failed password for invalid user pi from 84.62.13.251 port 37004 ssh2
Mar 28 15:04:50 vmd25759 sshd[15433]: Failed password for invalid user training from 153.122.76.182 port 59586 ssh2
Mar 28 16:19:24 vmd25759 sshd[16034]: Failed password for invalid user nvidia from 153.122.76.182 port 49910 ssh2
Mar 28 16:22:49 vmd25759 sshd[16048]: Failed password for invalid user elasticsearch from 153.122.76.182 port 58478 ssh2
Mar 28 16:47:35 vmd25759 sshd[16245]: Failed password for invalid user pi from 190.44.85.49 port 35446 ssh2
Mar 28 16:47:35 vmd25759 sshd[16247]: Failed password for invalid user pi from 190.44.85.49 port 35450 ssh2
Mar 28 17:30:09 vmd25759 sshd[16556]: Failed password for invalid user init from 185.173.224.94 port 50856 ssh2
Mar 28 17:30:16 vmd25759 sshd[16559]: Failed password for invalid user init from 185.173.224.124 port 38283 ssh2
Mar 28 17:31:21 vmd25759 sshd[16561]: Failed password for invalid user ubuntu from 106.75.135.147 port 53021 ssh2
Mar 28 18:02:49 vmd25759 sshd[16792]: Failed password for invalid user sinu from 185.173.224.94 port 44073 ssh2
Mar 28 18:02:56 vmd25759 sshd[16794]: Failed password for invalid user sinu from 185.173.224.124 port 57702 ssh2
Mar 28 18:31:55 vmd25759 sshd[17012]: Failed password for invalid user a from 164.132.109.173 port 53070 ssh2
Mar 28 18:32:18 vmd25759 sshd[17017]: Failed password for root from 164.132.109.173 port 37100 ssh2
Mar 28 18:33:35 vmd25759 sshd[17029]: Failed password for invalid user admin from 171.242.207.248 port 38419 ssh2
Mar 28 18:33:44 vmd25759 sshd[17032]: Failed password for invalid user admin from 123.24.108.14 port 58103 ssh2
Mar 28 18:33:50 vmd25759 sshd[17034]: Failed password for invalid user admin from 190.214.233.233 port 54102 ssh2
Mar 28 18:34:46 vmd25759 sshd[17040]: Failed password for invalid user ftptest from 185.173.224.94 port 36703 ssh2
Mar 28 18:35:03 vmd25759 sshd[17042]: Failed password for invalid user ftptest from 185.173.224.124 port 45663 ssh2

Man sieht also, es wird nahezu sekündlich probiert und das mit allen möglichen Benutzernamen  z.B. ftptest, admin, sinu oder ubuntu.

Was macht also nun Fail2Ban?

Fail2Ban analysiert diesen Access-Log und filtert die IP-Adressen und bannt diese wahlweise temporär oder unendlich und sperrt somit den Zugriff auf den Server von dieser IP-Adresse. Es wird ab einer definierten maximalen Versuchsanzahl diese IP-Adresse in die Firewall eingetragen und blockiert.

Installation Fail2Ban

sudo apt-get install fail2ban

Nun ist Fail2Ban installiert.

Im Ordner /etc/fail2ban/ befindet sich die globale Konfigurationsdatei jail.conf. Diese jedoch nicht bearbeiten, da
sie bei jeder Paketaktualisierung überschrieben wird. Die eigene Konfiguration geschieht in der “jail.local“.

Hierzu die “jail.conf” nach „jail.local” kopieren und diese bearbeiten.

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local

Fail2Ban bearbeiten

Die Konfigurationsdatei besteht aus einzelnen Regeln, sogenannten Jails. Jede dieser Gruppen lässt sich mit diesen Parametern konfigurieren.

  • enabled – Aktive / Inaktive Regel (true/false)
  • filter – Filter-Name aus gleichnamiger Datei unter /etc/fail2ban/filter.d
  • port – Möglicher Port (ssh, http, https, etc.)
  • logpath – Logdateien für die Überwachung
  • maxretry – Anzahl der Treffer im findtime-Zeitraum
  • findtime – Zeitraum in Sekunden, der berücksichtigt wird
  • bantime – Zeitraum in Sekunden, für den geblockt wird (-1 = für immer)

Beispiel-Konfiguration

Wir wollen nun SSH absichern, welches standardmäßig unter Port 22 läuft. Dazu gehen wir in der “jail.local” zunächst in den DEFAULT – Bereich (recht weit oben) , dort dann folgendes setzen.

bantime = 2678400

Die Zeit 2678400 ist in Sekunde = 1 Monat. Das heißt sobald eine IP-Adresse das Maximum an Einlogg-Versuchen überschreitet, wandert sie für einen Monat ins Fail2Ban-Gefängnis.

Das wars soweit zu den globalen Einstellungen nun zu den Diensten. Dort am Besten einmal nach “sshd” suchen und dort folgendes eintragen.

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
backend = %(sshd_backend)s
maxretry = 4

Damit ist der Dienst SSH aktiviert, hört auf dem Standardport von SSH und bedient sich der Filtermethode sshd, welches schon vordefiniert von Fail2Ban speziell für SSH ist.

Wichtig ist, dass der Dateilogpfad auf den des “auth.log” gesetzt wird, da Fail2Ban in diesen Log reinschaut und daraus die IP-Adressen sperrt. Maxretry auf 4, damit der Angreifen 4 Versuche hat und danach wird er gesperrt.

Hinweis: Es sollte standardmäßig noch eine “banaction” auftauchen, dieser widmen wir uns später… Nachdem alles klappt mit Fail2Ban.

Danach den Fail2Ban-Dienst starten…

sudo systemctl restart fail2ban.service
##Alternativ##
sudo service fail2ban reload
##START UND STOPP##
sudo service fail2ban start
sudo service fail2ban stop

Dieser erzeugt nun ebenfalls eine Logdatei, die wir mit folgendem Befehlt auf die letzten 100 Zeilen auslesen

tail -100f /var/log/fail2ban.log

Dort sollte in etwa folgendes zu sehen sein:

2018-03-09 16:03:05,357 fail2ban.database [19766]: INFO Connected to fail2ban
persistent database '/var/lib/fail2ban/fail2ban.sqlite3'
2018-03-09 16:03:05,359 fail2ban.jail [19766]: INFO Creating new jail 'sshd'
2018-03-09 16:03:05,371 fail2ban.jail [19766]: INFO Jail 'sshd' uses pyinotify
{}
2018-03-09 16:03:05,387 fail2ban.jail [19766]: INFO Initiated 'pyinotify'
backend
2018-03-09 16:03:05,388 fail2ban.filter [19766]: INFO Set findtime = 600
2018-03-09 16:03:05,389 fail2ban.filter [19766]: INFO Set jail log file encoding
to UTF-8
2018-03-09 16:03:05,389 fail2ban.filter [19766]: INFO Set maxRetry = 4
2018-03-09 16:03:05,389 fail2ban.actions [19766]: INFO Set banTime = 2678400
2018-03-09 16:03:05,390 fail2ban.filter [19766]: INFO Added logfile =
/var/log/auth.log
2018-03-09 16:03:05,392 fail2ban.filter [19766]: INFO Set maxlines = 10
2018-03-09 16:03:05,463 fail2ban.server [19766]: INFO Jail sshd is not a
JournalFilter instance
2018-03-09 16:03:05,612 fail2ban.actions [19766]: NOTICE [sshd] Ban 125.212.252.224
2018-03-09 16:03:05,926 fail2ban.actions [19766]: NOTICE [sshd] Ban 198.98.60.52
2018-03-09 16:03:06,138 fail2ban.actions [19766]: NOTICE [sshd] Ban 58.218.198.173

Er beginnt nun also die Angreifer zu bannen. Natürlich kann man auf diese Weise auch eigene Logins loggen und bannen, es ist somit nicht nur auf SSH beschränkt.

Hinweis: Die Bans sind nun nur in der Jail-Datei vom Fail2Ban-System, jedoch nicht in der Firewall.

Um das anzupassen muss man eine Firewall-Aktion mit Fail2Ban verknüpfen. In meinem Fall verwende ich die Firewall ufw. Um herauszufinden, ob Fail2Ban die bevorzugte Firewall bereits von Haus aus unterstützt, lohnt sich ein Blick in folgenden Ordner:

/etc/fail2ban/action.d/

Fail2Ban bringt bereits eine Standard-Action für die ufw-Firewall mit (Stand: 25.06.2018), diese kann einfach aktiviert werden mit dem Hinzufügen von “banaction = ufw” in dem entsprechenden Eintrag.

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
backend = %(sshd_backend)s
maxretry = 4
banaction = ufw

Danach ein kurzer Reload des Dienstes und die IP’s der Jail-Datei werden in die Firewall Blacklist geschrieben. Danach kann man sich zur Kontrolle den aktuellen Status der Firewall anzeigen lassen.

#Neuladen des fail2ban Dienstes
sudo service fail2ban reload

#Anzeigen des ufw Status
ufw status

Sinnvolle Fail2Ban Log-Befehle

Alle gebannten IP-Adressen anzeigen lassen

fail2ban-client status | grep "Jail list:" | sed "s/ //g" | awk '{split($2,a,",");for(i in a) system("fail2ban-client status " a[i])}' | grep "Status\|IP list"

Letzten Einträge in der Fail2Ban-Log einsehen

tail -100f /var/log/fail2ban.log

 

 

, , , ,
Vorheriger Beitrag
Linux OpenVPN-Server erstellen

Ähnliche Beiträge

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Bitte füllen Sie dieses Feld aus
Bitte füllen Sie dieses Feld aus
Bitte gib eine gültige E-Mail-Adresse ein.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

Menü