Nerviges Brute Force

Nachdem immer wieder irgendwelche Brutforce Angriffe in meinen Logs aufgetaucht sind, habe ich mich entschlossen prinzipiell etwas dagegen zu unternehmen. Die üblichen Mechanismen root Remotelogins zu verweigern und Portnocking auf bestimmten Diensten sind manchmal einfach nicht umsetzbar …

In früheren Ansätzen habe ich auf iptables zurückgegriffen, hier ein Beispiel für SSH:

Mitlerweile existieren gute Mechanismen und Tools die es einem sehr einfach ermöglichen, auf solche Angriffe zu reagieren. Ein solches Tool möchte ich hier vorstellen: fail2ban

Fail2Ban ist ein kleines Programm, das Logfiles verschiedenster Programme überwacht und basierend auf Einträgen in den Logfiles Ereignisse auslöst. Es kann sowohl im Hintergrund (als Dämon) als auch im Vordergrund laufen.

Allgemeines

Fail2ban ist vergleichbar mit DenyHosts, aber im Gegensatz zu DenyHosts, kann fail2ban so konfiguriert werden, dass jeder Dienst der Loginversuche in eine Log-Datei schreibt überwacht und ausgewertet werden kann und anstelle der Verwendung von /etc/hosts.deny um IP-Adressen zu blockieren nutzt fail2ban iptables. Das macht das Ganze etwas flexibler im Einsatz.

Installation

Unter Debian mittels:

Nach der Installation finden wir unter /etc/fail2ban das Konfigurationsverzeichnis.

Konfiguration

Das Standardverhalten von fail2ban wird in der Datei /etc/fail2ban/jail.conf festgelegt. Ein Blick zeigt, dass die verwendete Syntax ziemlich einfach zu handhaben ist. Der [DEFAULT] Abschnitt, gilt auch für alle anderen Abschnitte, es sei denn, dass die dort festgelegten Optionen in anderen Abschnitten überschrieben werden.

Einige der Konfigurationsoptionen:

  • ignoreip: Dies ist eine durch Leerzeichen getrennte Liste von IP-Adressen, die nicht blockiert werden.
  • bantime: Zeit in Sekunden, die ein Host blockiert wird (600 Sekunden = 10 Minuten).
  • maxretry: max. Anzahl der fehlgeschlagenen Loginversuche, bevor ein Host blockiert wird.
  • filter: Ausdruck durch den fail2ban Logeintrag und eventuelle Aktion zuordnet.
  • logpath: Das von fail2ban zu verwendende Logfile.

Um fail2ban nun an unsere Bedürfnisse anzupassen, legen wir mittels touch eine neue Datei namens jail.local an. Bitte die datei jail.conf nicht ändern!

Nachstehend versuche ich soviel als mögliche Beispielkonfigurationen darzustellen, also bitte nicht wahllos übernehmen, sondern nur die Abschnitte die man benötigt, bzw. dessen Dienst auch installiert ist.

vi /etc/fail2ban/jail.local

192.168.1.1 dient als ein Beispiel für eine statische IP-Adresse, die nicht blockiert werden soll. Ich habe die max. Anzahl der fehlgeschlagenen Loginversuche für alle Dienste auf 5 gesetzt. Darüber hinaus werden IP Adressen 10 Minuten gesperrt.

Nachdem wir unsere Konfiguration angepasst haben muss fail2ban neugestartet werden.

Das war es für das erste. Fail2ban schreibt sein Log in /var/log/fail2ban.log, dort kann die funktionsweise udn ob IP’s geblockt werden kontrolliert werden:

2008-06-17 19:49:09,466 fail2ban.actions: WARNING [apache] Ban 1.2.3.4
2008-06-17 20:08:33,213 fail2ban.actions: WARNING [sasl] Ban 1.2.3.4

Genauso kann man die iptables Regeln überprüfen:

Links