Verhindern von Brute Force Attacken mit Fail2ban auf OpenSUSE 10.3

Version 1.0
Author: Falko Timme


Diese Anleitung veranschaulicht, wie man fail2ban auf einem OpenSUSE 10.3 System installiert und konfiguriert. Fail2ban ist ein Tool, das Login-Versuche in verschiedene Systemen wie z.B. SSH, FTP, SMTP, Apache, etc. überwacht. Wenn es fehlgeschlagene Login-Versuche aufspürt, die immer wieder bei ein und derselben IP Adresse oder dem selben Host auftreten, stoppt fail2ban weitere Login-Versuche dieser IP Adresse/Hosts indem es mit einem iptables firewall rule blockiert.

Diese Anleitung ist ohne jede Garantie und ich möchte an dieser Stelle darauf hinweisen, dass dies hier nicht der einzige Weg ist, ein solches System zu installieren. Es gibt viele Möglichkeiten - ich selbst habe mich für diese entschieden. Ich kann aber nicht garantieren, dass diese Lösung bei jedem funktioniert bzw. für jeden die richtige ist!

1 Vorbemerkung

Fail2ban ähnelt DenyHosts , welches ich im folgenden Tutorial abgehandelt habe: http://www.howtoforge.com/preventing_ssh_dictionary_attacks_with_denyhosts, doch anders als DenyHosts, bei dem das Hauptaugenmerk auf SSH liegt, kann fail2ban konfiguriert werden, um jeden Betriebseinsatz zu kontrollieren, der Login-Versuche in eine Log-Datei schreibt. An Stelle der Verwendung von /etc/hosts.deny um nur IP Adressen/Hosts zu blockieren, kann fail2ban iptables und /etc/hosts.deny verwenden.

In diesem Beispiel werde ich fail2ban konfigurieren um Login-Versuche auf den SSH Server, den Proftpd Server, Login-Versuche auf .htaccess/.htpasswd geschützte Websiten, auf Courier POP3 und Courier IMAP, und auf SASL (um Emails zu schicken) zu überwachen. Ich werde das fail2ban Paket installieren, welches für OpenSUSE 10.3 verfügbar ist. Darin ist eine Standardkonfiguration enthalten, die unglücklicherweise nicht wirklich bei den meisten oben genannten Services funktioniert. Daher werde ich eine angepasste fail2ban Konfiguration erstellen, die ich getestet habe und die bei mir funktioniert.

2 Installation von fail2ban

Fail2ban ist in der Packman Paketdatenbank erhältlich. Also müssen wir diese zuerst aktivieren:

yast2

Gehe im YaST auf Software > Community Repositories:


Aktiviere dann den Packman Repository und drücke [Finish]:


Verlasse danach YaST:


Danach kann fail2ban wie folgt installiert werden:

yast2 -i fail2ban

Dann müssen wir die System Startup Links für fail2ban erstellen und es dann starten:

chkconfig --add fail2ban
/etc/init.d/fail2ban start

Du kannst alle fail2ban Konfigurationsdateiein im /etc/fail2ban Verzeichnis finden.

3 Konfiguration von fail2ban

Das Standardverhalten von fail2ban wird in der Datei /etc/fail2ban/jail.conf konfiguriert. Sieh sie Dir mal an, ist nicht schwer zu verstehen. Da gibt es eine [DEFAULT] Sektion, die allen anderen Sektionen entpsricht, wenn die Standardoptionen nicht in den anderen Sektionen überschrieben sind.

Hier erkläre ich einige der Konfigurationsoptionen:
  • ignoreip: Eine durch Leerzeichen getrennte Liste von IP Adressen, die nicht von fail2ban blockiert werden können. Zum Beispiel wenn Dein Computer, von dem aus Du mit dem Server verbunden bist, eine statische IP Adresse hat, möchtest Du sie hier vielleicht auflisten.
  • bantime: Zeit in Sekunden, die ein Host blockiert ist, wenn er von fail2ban erwischt worden ist (600 Sekunden = 10 Minuten).
  • maxretry: Max. Anzahl fehlgeschlagener Login-Versuche bevor ein Host blockiert von fail2ban blockiert wird.
  • filter: Bezieht sich auf die entsprechende Filterdatei in /etc/fail2ban/filter.d.
  • action: Bezieht sich auf die entsprechende Action Datei in /etc/fail2ban/action.d.
  • logpath: Die Log-Datei, die fail2ban nach Login-Versuchen untersucht.
So sieht meine /etc/fail2ban/jail.conf Datei aus:

vi /etc/fail2ban/jail.conf

# Fail2Ban configuration file
# # Author: Cyril Jaquier # # $Revision: 611 $ # # The DEFAULT allows a global definition of the options. They can be override # in each jail afterwards. [DEFAULT] # "ignoreip" can be an IP address, a CIDR mask or a DNS host. Fail2ban will not # ban a host which matches an address in this list. Several addresses can be # defined using space separator. ignoreip = 127.0.0.1 192.168.0.99 # "bantime" is the number of seconds that a host is banned. bantime = 600 # A host is banned if it has generated "maxretry" during the last "findtime" # seconds. findtime = 600 # "maxretry" is the number of failures before a host get banned. maxretry = 3 # "backend" specifies the backend used to get files modification. Available # options are "gamin", "polling" and "auto". This option can be overridden in # each jail too (use "gamin" for a jail and "polling" for another). # # gamin: requires Gamin (a file alteration monitor) to be installed. If Gamin # is not installed, Fail2ban will use polling. # polling: uses a polling algorithm which does not require external libraries. # auto: will choose Gamin if available and polling otherwise. backend = auto # This jail corresponds to the standard configuration in Fail2ban 0.6. # The mail-whois action send a notification e-mail with a whois request # in the body. [ssh-iptables] enabled = true filter = sshd action = iptables[name=SSH, port=ssh, protocol=tcp] sendmail-whois[name=SSH, dest=you@mail.com, sender=fail2ban@mail.com] logpath = /var/log/messages maxretry = 5 [proftpd-iptables] enabled = true filter = proftpd action = iptables[name=ProFTPD, port=ftp, protocol=tcp] sendmail-whois[name=ProFTPD, dest=you@mail.com] logpath = /var/log/messages maxretry = 6 # This jail forces the backend to "polling". [sasl-iptables] enabled = true filter = sasl backend = polling action = iptables[name=sasl, port=smtp, protocol=tcp] sendmail-whois[name=sasl, dest=you@mail.com] logpath = /var/log/mail # Here we use TCP-Wrappers instead of Netfilter/Iptables. "ignoreregex" is # used to avoid banning the user "myuser". [ssh-tcpwrapper] enabled = false filter = sshd action = hostsdeny sendmail-whois[name=SSH, dest=you@mail.com] ignoreregex = for myuser from logpath = /var/log/messages # This jail demonstrates the use of wildcards in "logpath". # Moreover, it is possible to give other files on a new line. [apache-tcpwrapper] enabled = true filter = apache-auth action = hostsdeny logpath = /var/log/apache2/error_log maxretry = 6 # The hosts.deny path can be defined with the "file" argument if it is # not in /etc. [postfix-tcpwrapper] enabled = true filter = postfix action = hostsdeny sendmail[name=Postfix, dest=you@mail.com] logpath = /var/log/mail bantime = 300 # Do not ban anybody. Just report information about the remote host. # A notification is sent at most every 600 seconds (bantime). [vsftpd-notification] enabled = false filter = vsftpd action = sendmail-whois[name=VSFTPD, dest=you@mail.com] logpath = /var/log/messages maxretry = 5 bantime = 1800 # Same as above but with banning the IP address. [vsftpd-iptables] enabled = false filter = vsftpd action = iptables[name=VSFTPD, port=ftp, protocol=tcp] sendmail-whois[name=VSFTPD, dest=you@mail.com] logpath = /var/log/messages maxretry = 5 bantime = 1800 # Ban hosts which agent identifies spammer robots crawling the web # for email addresses. The mail outputs are buffered. [apache-badbots] enabled = true filter = apache-badbots action = iptables-multiport[name=BadBots, port="http,https"] sendmail-buffered[name=BadBots, lines=5, dest=you@mail.com] logpath = /var/log/apache2/access_log bantime = 172800 maxretry = 1 [courierpop3] enabled = true port = pop3 filter = courierlogin action = iptables[name=%(__name__)s, port=%(port)s] logpath = /var/log/mail maxretry = 5 [courierimap] enabled = true port = imap2 filter = courierlogin action = iptables[name=%(__name__)s, port=%(port)s] logpath = /var/log/mail maxretry = 5
Mein client Computer hat die statische IP Adresse 192.168.0.99 und da ich nicht ausgeschlossen werden möchte, habe ich sie der ignoreip Liste beigefügt.

Ich möchte Login-Versuche auf SSH, Apache, Proftpd, Courier-POP3, Courier-IMAP und Sasl überwachen, daher habe ich enabled für diese Services auf true gesetzt und auf false für alle anderen Services. Bitte nimm zur Kenntnis, dass einige Services wie zum Beispiel SSH entweder von iptables oder TCPWrappers (/etc/hosts.deny) blockiert werden können. Entscheide selbst, welche Methode Du bevorzugst.

Vergewissere Dich, dass Du die Emailadresse you@mail.com mit Deiner eigenen Emailadresse ersetzt, so dass Du benachrichtigt wirst, wenn jemand von fail2ban blockiert wird.

Wenn Du die Datei mit der Standardeinstellung /etc/fail2ban/jail.conf vergleichst, wirst Du ebenfalls feststellen, dass ich einige Log-Dateien geändert habe, da die Log-Dateien in der Standardeinstellung /etc/fail2ban/jail.conf für OpenSUSE 10.3 nicht richtig sind.

Immer wenn wir die fail2ban Konfiguration bearbeiten, müssen wir fail2ban neu starten, also tun wir das jetzt:

/etc/init.d/fail2ban restart

Das war es schon. Fail2ban zeichnet auf /var/log/fail2ban.log, alos kannst Du diese Datei überprüfen ob/wenn ein Host blockiert wird. Wenn es Host von fail2ban blockiert wird, sieht dies so aus:

2007-10-07 17:49:09,466 fail2ban.actions: WARNING [apache-tcpwrapper] Ban 1.2.3.4
2007-10-07 18:08:33,213 fail2ban.actions: WARNING [sasl-iptables] Ban 1.2.3.4
2007-10-07 18:26:37,769 fail2ban.actions: WARNING [courierlogin] Ban 1.2.3.4
2007-10-07 18:39:06,765 fail2ban.actions: WARNING [courierimap] Ban 1.2.3.4

Du kannst außerdem Dein Firewall überprüfen falls irgendwelche Hosts derzeit blockiert sind. Lass einfach dies laufen

iptables -L

Um Dich über Services zu informieren, die TCPWrappers verwenden um Hosts zu blocken, sieh hier nach /etc/hosts.deny.

Links

2 Kommentar(e)

Zum Posten von Kommentaren bitte

Kommentare

Von: hahni

Mit Ubuntu 6.06 LTS hagelt es nur Fehler! Da ist das Config-File leider nicht benutzbar!!!


Von: Apropo

Hi!

Bei mir läuft es einwandfrei nach dieser Anleitung.
Kann mir vielleicht jemand sagen welchen Eintrag ich in der jail.conf hinzufügen muss für qmail ?

Vielen Dank im Vorraus!

Mfg, Apropo