AA_PO-17957-Project_Photos-Reinhard_Eisele-A3201776.eps

© Reinhard Eisele

Gute Abwehr

IP-Adressen von Angreifern bockieren

09.10.2013
Wenn Sie auf dem Linux-PC einen Port für den Zugriff von außen freigeben, müssen Sie mit automatisierten Einbruchsversuchen rechnen. Fail2ban sperrt die IP-Adressen der Angreifer. Wir zeigen die Einrichtung für SSH-Logins und Dateitransfers mit der SSH-basierten FTP-Alternative SFTP.

Wenn Sie sich via SSH auf einem anderen Linux-Rechner anmelden, benötigen Sie im Normalfall den Benutzernamen und das Passwort. Geben Sie das Passwort falsch ein, erscheint direkt der nächste Passwort-Prompt und ermöglicht einen weiteren Versuch. Erst nach drei Falscheingaben bricht die Gegenseite die Verbindung ab. Doch hindert Sie nichts daran, es direkt erneut zu versuchen. Diese Möglichkeit nutzen auch Angreifer, welche die Kontrolle über im Internet erreichbare Linux-PCs übernehmen wollen: Sie bauen automatisiert immer wieder eine Verbindung mit dem SSH-Server auf und probieren der Reihe nach alle Benutzernamen und Passwörter aus einem Wörterbuch aus. Diese Art des Angriffs nennt sich Wörterbuchattacke, und sie gehört zu den so genannten Brute-Force-Attacken, bei denen man keine spezielle Schwachstelle ausnutzt, sondern einfach alle möglichen User-/Passwort-Kombinationen testet, bis der Login gelingt. Solche Angriffe sind oft erfolgreich, weil viele Anwender schwache Passwörter verwenden: Es ist z. B. keine gute Idee, als Passwort für den Administrator root ebenfalls root zu verwenden, weil diese Kombination oft vorkommt und Angreifer diese darum auch ausprobieren.

Das Programm Fail2ban [1] (Abbildung 1) schiebt diesen Angriffsversuchen einen Riegel vor: Es beobachtet die Logdatei /var/log/auth.log (Ubuntu) bzw. /var/log/messages (OpenSuse), in der das System alle erfolgreichen und fehlgeschlagenen Login-Versuche protokolliert. Versucht z. B. ein Angreifer von der IP-Adresse 11.22.33.44 aus, sich via SSH als User master einzuloggen, dann erscheint in der Protokolldatei folgender Eintrag:

Sep 18 15:45:39 quadamd sshd[5623]: Failed keyboard-interactive/pam for invalid user master from 11.22.33.44 port 41105 ssh2

Dabei spielt es keine Rolle, ob (wie im Beispiel) ein nicht vorhandener Benutzername verwendet oder zu einem gültigen Namen das falsche Passwort angegeben wurde.

Abbildung 1: Fail2ban bietet auf der englischsprachigen Projekt-Webseite auch Tipps zur Konfiguration.

Installation

Unter Ubuntu/Kubuntu können Sie Fail2ban über die grafische Paketverwaltung einrichten oder in einem Terminalfenster den Befehl

sudo apt-get install fail2ban

eingeben. OpenSuse-Anwender verwenden die Softwareverwaltung, um das Paket zu installieren oder geben im Terminalfenster

sudo zypper install fail2ban

ein. Im Auslieferungszustand ist Fail2ban unter Ubuntu bereits so konfiguriert, dass es Anmeldeversuche via SSH überwacht – OpenSuse-Anwender müssen erst die Konfiguration anpassen und dann den Fail2ban-Dienst starten – die folgenden Schritte sind also nur für OpenSuse-Anwender relevant:

  1. Im ersten Schritt erzeugen Sie mit Root-Rechten eine lokale Konfigurationsdatei jail.local, z. B. indem Sie in einem Terminalfenster das Kommando kdesu kwrite /etc/fail2ban/jail.local eingeben. (Unter OpenSuse schreiben Sie am Anfang kdesudo statt kdesu.)
  2. Tragen Sie hier die Zeilen

    [ssh-iptables]
    enabled  = true
    port     = ssh
    filter   = sshd
    action   = iptables-multiport
    logpath  = /var/log/messages
    maxretry = 6
    bantime  = 600

    ein und speichern Sie die Datei.

  3. Um den Fail2ban-Dienst zu aktivieren, starten Sie die Systemverwaltung YaST und wählen darin den Punkt System / Systemdienste (Runlevel). Es öffnet sich ein neues Fenster, das eine lange Liste mit verfügbaren Diensten anzeigt. Scrollen Sie hier bis zum Eintrag fail2ban und markieren Sie die Zeile (Abbildung 2). Wenn in der Spalte Aktiviert der Wert Nein steht, klicken Sie links unten auf Aktivieren, dadurch wechselt der Eintrag zu Ja.

    Abbildung 2: OpenSuse-Anwender müssen in YaST den Fail2ban-Dienst aktivieren.

Ab sofort läuft der Dienst – und er wird auch bei jedem Rechnerneustart automatisch eingeschaltet.

Generell verwendet Fail2ban zwei Konfigurationsdateien im Ordner /etc/fail2ban/: jail.conf enthält (meist deaktivierte) Voreinstellungen für verschiedene zu überwachende Dienste, und in jail.local können Sie Einstellungen eintragen, welche die Vorgaben aus jail.conf überschreiben.

In jail.conf finden Sie auch die nötigen Einträge für einen eventuell auf dem Rechner laufenden Webserver im Abschnitt [apache] (Ubuntu) bzw. [apache-tcpwrapper] (OpenSuse) oder verschiedene FTP-Server in den Abschnitten [vsftpd], [proftpd] und [wuftpd] (Ubuntu) oder [proftpd-iptables] und [vsftpd-iptables] (OpenSuse). Auf den Einsatz eines FTP-Servers sollten Sie aber meist verzichten, siehe Kasten Eigenen FTP-Server betreiben am Ende des Artikels. Um die Überwachung für solche Dienste zu aktivieren, öffnen Sie die Datei mit Root-Rechten in einem Editor (z. B. mit kdesu kwrite /etc/fail2ban/jail.conf bzw. bei Ubuntu kdesudo statt kdesu), suchen den passenden Abschnitt und ändern darin die Zeile enabled = false in enabled = true.

Erfolgsmeldungen

Sie können Fail2ban auch bei der Arbeit zusehen: Jedesmal, wenn es einen Rechner als Angreifer identifiziert, schreibt das Programm in die Logdatei /var/log/fail2ban.log. Für den obigen Angreifer mit der IP-Adresse 11.22.33.44 erscheint z. B. die Meldung

2013-09-18 15:45:56,299 fail2ban.actions: WARNING [ssh] Ban 11.22.33.44

in der Protokolldatei, wenn Fail2ban ihn sperrt.

Wollen Sie sehen, welche Rechner Fail2ban aktuell blockiert, können Sie sich mit Root-Rechten die Filtertabelle anzeigen lassen – das geht über das Kommando sudo iptables -L. Abbildung 3 zeigt die Ausgabe des Befehls – die hervorgehobene Zeile, die mit DROP beginnt, enthält die Regel, die Zugriffe vom Rechner angreifer.net verbietet. (Die IP-Adresse erscheint hier nicht, weil iptables stattdessen den Rechnernamen anzeigt.)

Abbildung 3: Die "DROP"-Zeile in der Ausgabe von "iptables" zeigt, dass Fail2ban Login-Versuche vom Rechner "angreifer.net" verbietet.

Einen weiteren Trick, mit dem Sie den SSH-Zugang sicherer machen können, finden Sie im Kasten Alternativen SSH-Port nutzen.

Alternativen SSH-Port nutzen

Ein weiterer beliebter Trick, um sich vor Angriffen zu schützen, ist der Einsatz eines alternativen Ports. SSH lauscht im Normalfall auf Port 22, und die meisten Anwender konfigurieren ihren DSL- oder Kabel-Router so, dass er Anfragen auf Port 22 an denselben Port des Linux-PCs weiterleitet. (So haben wir es auch im Artikel über die Router-Einrichtung ab Seite 36 beschrieben.) Das hat den Vorteil, dass Sie sich von außen einfach mit einem Befehl wie

ssh user@rechnername

auf dem heimischen Linux-PC anmelden können, weil das ssh-Kommando automatisch Port 22 verwendet, wenn Sie nichts anderes verlangen. Der Nachteil ist, dass auch Angreifer diesen Port für ihre Attacken verwenden. Ändern Sie die Portnummer, indem Sie den Router so umkonfigurieren, dass er einen zufällig gewählten Port (etwa Nummer 2323) auf Port 22 des Linux-PCs weiterleitet, müssen Sie beim Login mit ssh die alternative Portnummer angeben, das Kommando verlängert sich dann zu

ssh -p 2323 user@rechnername

Aus Sicht des Linux-PCs bleibt aber alles beim Alten, die Anfragen kommen weiterhin auf Port 22 herein.

Für PCs, die ohne einen Router direkt ans Internet angeschlossen sind, z. B. über ein DSL-Modem, gibt es die Möglichkeit, in der SSH-Konfiguration die Portnummer zu ändern: Dazu passen Sie als Administrator root in der Datei /etc/ssh/sshd_config die Zeile

Port 22

an und tragen z. B. Port 2323 ein. (Falls die Zeile auskommentiert ist, also #Port 22 lautet, müssen Sie zudem die Raute am Zeilenanfang entfernen.) Das verursacht aber nun ein Problem für Fail2ban, denn das Programm rechnet nur mit SSH-Logins auf Port 22.

Um die Portnummer in der Fail2ban-Konfiguration zu ändern, müssen Sie (mit Root-Rechten) die Konfigurationsdatei jail.conf (Ubuntu) bzw. jail.local (OpenSuse) bearbeiten und hier im durch die Zeile [ssh] (Ubuntu) bzw. [ssh-iptables] (OpenSuse) eingeleiteten Abschnitt den Eintrag port = ssh in port = 2323 ändern (wobei Sie 2323 durch die tatsächlich verwendete Portnummer ersetzen).

Zugriff wieder zulassen

Der einfachste Weg, Zugriffssperren von Fail2ban aufzuheben, führt über das Hilfsprogramm fail2ban-client: Wenn Sie es mit Root-Rechten und dem Parameter reload aufrufen, werden alle bestehenden Sperren gelöscht:

[esser@quadamd:~]$ sudo fail2ban-client reload
[esser@quadamd:~]$ sudo iptables -L fail2ban-ssh
Chain fail2ban-ssh (1 references)
target   prot opt source    destination
RETURN   all  --  anywhere  anywhere

(Unter OpenSuse lautet das zweite Kommando, das die Liste der gesperrten Rechner ausgibt, sudo iptables -L fail2ban-default.) Unmittelbar danach können alle bisher gesperrten Rechner wieder neue Anmeldeversuche unternehmen.

Sie können auch mit sudo fail2ban-client status jederzeit prüfen, ob das Programm aktiv ist – es antwortet entweder ERROR Unable to contact server. Is it running? (dann ist es deaktiviert) oder gibt eine Liste der überwachten Dienste aus:

[esser@quadamd:~]$ sudo fail2ban-client status
Status
|- Number of jail:      1
`- Jail list:           ssh

Haben Sie sich selbst doch einmal ausgesperrt und keine Möglichkeit, sich von einem weiteren (nicht gesperrten) Rechner aus einzuloggen, bleibt Ihnen nur, die standardmäßig zehn Minuten der Sperrzeit abzuwarten und es danach erneut zu versuchen.

Gut genug?

Einen vollständigen Schutz vor Brute-Force-Attacken, bei denen ein Angreifer der Reihe nach verschiedene Passwörter ausprobiert, bietet Fail2ban nicht: Wer gezielt Ihren Rechner attackiert, kann einfach warten, bis die Sperre wieder aufgehoben wurde (in der Voreinstellung nach 600 Sekunden, also zehn Minuten), und dann erneut angreifen. Diese Zeit können Sie erhöhen, indem Sie im Abschnitt [ssh] bzw. [ssh-iptables] der Konfigurationsdatei (jail.conf oder jail.local) die Zeile bantime = 600 anpassen.

Aber gegen automatisierte Angriffe, wie sie "Script Kiddies" gerne durchführen, stellt Fail2ban einen guten Schutz dar: Solche Skripte geben, wenn sie nicht auf Anhieb durchkommen, einfach auf und probieren es mit dem nächsten Rechner.

Nicht vergessen sollten Sie auch, dass Sie sich mit Fail2ban selbst aussperren können, wenn Sie sich via Passworteingabe einloggen. Darum ist es sinnvoll, auf allen Clients mit ssh-keygen -t rsa einen SSH-Key zu erstellen und diesen mit

ssh-copy-id username@rechnername

auf den Server zu kopieren (siehe Kasten SSH-Login mit Schlüssel im vorangehenden Artikel): Dann müssen Sie beim Login kein Passwort eingeben, sondern werden anhand des Keys erkannt – also kann es nicht passieren, dass Sie sich durch mehrmalige falsche Passworteingabe aussperren. (hge)

Eigenen FTP-Server betreiben?

FTP, das File Transfer Protocol, erlaubt den Zugriff auf Dateien, die auf einem anderen Rechner liegen. Sie kennen vielleicht FTP-Server im Internet, die ISO-Images von Linux-Distributionen zum Download anbieten: Hier ist der Zugang ohne Passwort möglich. Neben diesem so genannten anonymen FTP-Zugang lässt sich ein FTP-Server auch so einrichten, dass er eine Anmeldung mit Benutzername und Passwort erwartet. Installieren Sie auf dem Linux-Rechner ein FTP-Server-Programm, erhalten Sie über Ihre normalen Anmeldedaten Zugriff auf Ihr Home-Verzeichnis.

Im lokalen Netz (daheim) ist der Einsatz eines FTP-Servers zunächst unkritisch: Zu Hause vertrauen Sie allen Benutzern. Machen Sie den FTP-Zugang aber durch eine Portweiterleitung im DSL-Router auch von außen zugängig, gibt es ein Problem: FTP arbeitet unverschlüsselt, d. h., die Datenübertragungen beim Up- oder Download von Dateien finden im Klartext statt. Angreifer haben damit leichtes Spiel, wenn sie die übertragenen Daten abschöpfen wollen. Schlimmer ist noch, dass bei der Anmeldung auch Benutzername und Passwort im Klartext durch die Leitung wandern: Wenn ein Angreifer diese Zugangsdaten erfolgreich abgehört hat, kann er sich einfach selbst auf Ihrem FTP-Server anmelden und nach Lust und Laune auf alle Dateien zugreifen. Aus diesem Grund sollten Sie einen FTP-Server nicht für den weltweiten Zugriff aus dem Internet freischalten.

Die einzige sinnvolle Ausnahme ist der Betrieb eines anonymen FTP-Servers: Wenn Sie z. B. keine eigene Webseite haben, aber selbst erstellte Dateien weltweit zugängig machen wollen, können Sie das via FTP tun. Dann müssen Sie nur darauf achten, dass der FTP-Server keine Uploads (also Dateiübertragungen aus dem Internet auf Ihren PC) erlaubt – ansonsten könnten Fremde Ihren Server für den Dateiaustausch untereinander verwenden.

Die Alternative zu FTP ist in der Secure Shell (SSH) schon enthalten: SFTP (Secure FTP) können Sie ähnlich wie FTP verwenden, nutzen dabei aber die SSH-Verschlüsselung – Anmeldedaten und Dateien werden sicher übertragen.

Um unter OpenSuse den SSH-Server zu aktivieren, gehen Sie wie bei der Aktivierung des Fail2ban-Dienstes vor: Starten Sie die Systemverwaltung YaST und wählen Sie darin den Punkt System / Systemdienste (Runlevel). Im sich öffnenden Fenster scrollen Sie in der Diensteliste bis zum Eintrag sshd und markieren die Zeile (Abbildung 4). Wenn in der Spalte Aktiviert der Wert Nein steht, klicken Sie links unten auf Aktivieren, dadurch wechselt der Eintrag zu Ja.

Abbildung 4: Wenn unter OpenSuse der SSH-Server nicht läuft, aktivieren Sie ihn über die Verwaltung der Systemdienste in YaST.

Probieren Sie zuerst den regulären SSH-Zugriff aus: Dazu geben Sie in einer Shell

ssh username@rechnername

bzw.

ssh -p port username@rechnername

ein, wobei Sie port durch die gewählte Portnummer (im Beispiel immer 2323) ersetzen. Beim ersten Login müssen Sie den Server-Key bestätigen; bei allen folgenden Logins passiert das nicht mehr.

Um nun auf den SFTP-Server zuzugreifen, können Sie auf einem Linux-Rechner den KDE-Dateimanager Dolphin verwenden. Öffnen Sie ein neues Dolphin-Fenster und drücken Sie [Strg]+[L], damit Sie eine URL eingeben können. Es gibt nun zwei Möglichkeiten – probieren Sie es zunächst mit einer URL der Form sftp://username@rechnername/ bzw. sftp://username@rechnername:port/ (wenn Sie den Standard-SSH-Port 22 geändert haben). Falls Sie dabei die Fehlermeldung aus Abbildung 5 erhalten, probieren Sie es erneut, ersetzen diesmal in der URL aber sftp durch fish, also mit fish://username@rechnername/ bzw. fish://username@rechnername:port/ (Abbildung 6). Zugriffe über das FISH-Protokoll sind etwas langsamer als SFTP-Zugriffe, dafür gibt es damit keine Fehlermeldungen.

Abbildung 5: Dolphin bemängelt gelegentlich beim SFTP-Zugriff eine falsche Schlüsselkonfiguration; verwenden Sie dann FISH statt SFTP.
Abbildung 6: Über das langsamere FISH-Protokoll sollte der Zugriff auf den SFTP-Server immer funktionieren.

Auch unter Windows und OS X können Sie auf einen SFTP-Server zugreifen: Für Windows ist WinSCP [3] ein beliebtes Tool, Mac-Anwender können Cyberduck [4] verwenden.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 4 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 

Ähnliche Artikel

Kommentare