Sicherheit · 6 min read · Dec 30, 2025

Verhindern von Brute-Force-Angriffen mit Fail2ban auf OpenSUSE 10.3

Verhindern von Brute-Force-Angriffen mit Fail2ban auf OpenSUSE 10.3

Version 1.0
Autor: Falko Timme

In diesem Artikel zeige ich, wie man fail2ban auf einem OpenSUSE 10.3-System installiert und konfiguriert. Fail2ban ist ein Tool, das Anmeldeversuche für verschiedene Dienste, z.B. SSH, FTP, SMTP, Apache usw., überwacht und, wenn es wiederholt fehlgeschlagene Anmeldeversuche von derselben IP-Adresse oder demselben Host findet, stoppt fail2ban weitere Anmeldeversuche von dieser IP-Adresse/diesem Host, indem es sie mit einer iptables-Firewall-Regel blockiert.

Dieses Dokument kommt ohne jegliche Gewährleistung! Ich möchte sagen, dass dies nicht der einzige Weg ist, ein solches System einzurichten. Es gibt viele Möglichkeiten, dieses Ziel zu erreichen, aber dies ist der Weg, den ich wähle. Ich gebe keine Garantie, dass dies für Sie funktioniert!

1 Vorbemerkung

Fail2ban ähnelt DenyHosts, das ich in diesem Tutorial behandelt habe: https://www.howtoforge.com/preventing_ssh_dictionary_attacks_with_denyhosts, aber im Gegensatz zu DenyHosts, das sich auf SSH konzentriert, kann fail2ban so konfiguriert werden, dass es jeden Dienst überwacht, der Anmeldeversuche in eine Protokolldatei schreibt, und anstelle von /etc/hosts.deny nur zur Blockierung von IP-Adressen/Hosts kann fail2ban iptables und /etc/hosts.deny verwenden.

In diesem Beispiel werde ich fail2ban so konfigurieren, dass es Anmeldeversuche für den SSH-Server, den Proftpd-Server, Anmeldeversuche für .htaccess/.htpasswd-geschützte Websites, für Courier POP3 und Courier IMAP sowie für SASL (zum Versenden von E-Mails) überwacht. Ich werde das fail2ban-Paket installieren, das für OpenSUSE 10.3 verfügbar ist. Es kommt mit einer Standardkonfiguration, aber leider funktioniert diese Konfiguration nicht ganz für die meisten der oben genannten Dienste. Daher werde ich eine angepasste fail2ban-Konfiguration erstellen, die ich getestet habe und die für mich funktioniert.

2 Installation von fail2ban

Fail2ban ist im Packman-Repository verfügbar, also müssen wir das zuerst aktivieren:

yast2 

In YaST gehen Sie zu Software > Community-Repositories:

Aktivieren Sie dann das Packman-Repository und klicken Sie auf [Fertigstellen]:

Verlassen Sie anschließend YaST:

Danach kann fail2ban wie folgt installiert werden:

yast2 -i fail2ban

Dann müssen wir die Systemstartlinks für fail2ban erstellen und es starten:

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

Sie finden alle fail2ban-Konfigurationsdateien im Verzeichnis /etc/fail2ban.

3 Konfiguration von fail2ban

Das Standardverhalten von fail2ban ist in der Datei /etc/fail2ban/jail.conf konfiguriert. Werfen Sie einen Blick darauf, es ist nicht schwer zu verstehen. Es gibt einen [DEFAULT]-Abschnitt, der für alle anderen Abschnitte gilt, es sei denn, die Standardoptionen werden in den anderen Abschnitten überschrieben.

Ich erkläre einige der Konfigurationsoptionen hier:

  • ignoreip: Dies ist eine durch Leerzeichen getrennte Liste von IP-Adressen, die von fail2ban nicht blockiert werden können. Wenn der Computer, von dem Sie sich mit dem Server verbinden, eine statische IP-Adresse hat, möchten Sie ihn möglicherweise hier auflisten.
  • bantime: Zeit in Sekunden, die ein Host blockiert ist, wenn er von fail2ban erfasst wurde (600 Sekunden = 10 Minuten).
  • maxretry: Max. Anzahl der fehlgeschlagenen Anmeldeversuche, bevor ein Host von fail2ban blockiert wird.
  • filter: Bezieht sich auf die entsprechende Filterdatei in /etc/fail2ban/filter.d.
  • action: Bezieht sich auf die entsprechende Aktionsdatei in /etc/fail2ban/action.d.
  • logpath: Die Protokolldatei, die fail2ban auf fehlgeschlagene Anmeldeversuche überprüft.

So sieht meine /etc/fail2ban/jail.conf-Datei aus:

vi /etc/fail2ban/jail.conf

| # Fail2Ban-Konfigurationsdatei # # Autor: Cyril Jaquier # # $Revision: 611 $ # # Die DEFAULT ermöglicht eine globale Definition der Optionen. Sie können in # jedem Jail danach überschrieben werden. [DEFAULT] # "ignoreip" kann eine IP-Adresse, eine CIDR-Maske oder einen DNS-Host sein. Fail2ban wird keinen Host sperren, der mit einer Adresse in dieser Liste übereinstimmt. Mehrere Adressen können durch Leerzeichen getrennt definiert werden. ignoreip = 127.0.0.1 192.168.0.99 # "bantime" ist die Anzahl der Sekunden, die ein Host gesperrt ist. bantime = 600 # Ein Host wird gesperrt, wenn er während der letzten "findtime" # Sekunden "maxretry" erzeugt hat. findtime = 600 # "maxretry" ist die Anzahl der Fehler, bevor ein Host gesperrt wird. maxretry = 3 # "backend" gibt das Backend an, das verwendet wird, um Dateien zu modifizieren. Verfügbare # Optionen sind "gamin", "polling" und "auto". Diese Option kann auch in # jedem Jail überschrieben werden (verwenden Sie "gamin" für ein Jail und "polling" für ein anderes). # # gamin: erfordert, dass Gamin (ein Dateiänderungsmonitor) installiert ist. Wenn Gamin # nicht installiert ist, verwendet Fail2ban Polling. # polling: verwendet einen Polling-Algorithmus, der keine externen Bibliotheken erfordert. # auto: wählt Gamin, wenn verfügbar, und Polling andernfalls. backend = auto # Dieses Jail entspricht der Standardkonfiguration in Fail2ban 0.6. # Die mail-whois-Aktion sendet eine Benachrichtigungs-E-Mail mit einer Whois-Anfrage # im Text. [ssh-iptables] enabled = true filter = sshd action = iptables[name=SSH, port=ssh, protocol=tcp] sendmail-whois[name=SSH, [email protected], [email protected]] logpath = /var/log/messages maxretry = 5 [proftpd-iptables] enabled = true filter = proftpd action = iptables[name=ProFTPD, port=ftp, protocol=tcp] sendmail-whois[name=ProFTPD, [email protected]] logpath = /var/log/messages maxretry = 6 # Dieses Jail zwingt das Backend zu "polling". [sasl-iptables] enabled = true filter = sasl backend = polling action = iptables[name=sasl, port=smtp, protocol=tcp] sendmail-whois[name=sasl, [email protected]] logpath = /var/log/mail # Hier verwenden wir TCP-Wrappers anstelle von Netfilter/Iptables. "ignoreregex" wird # verwendet, um zu vermeiden, dass der Benutzer "myuser" gesperrt wird. [ssh-tcpwrapper] enabled = false filter = sshd action = hostsdeny sendmail-whois[name=SSH, [email protected]] ignoreregex = for myuser from logpath = /var/log/messages # Dieses Jail demonstriert die Verwendung von Platzhaltern in "logpath". # Darüber hinaus ist es möglich, andere Dateien in einer neuen Zeile anzugeben. [apache-tcpwrapper] enabled = true filter = apache-auth action = hostsdeny logpath = /var/log/apache2/error_log maxretry = 6 # Der Pfad zu hosts.deny kann mit dem Argument "file" definiert werden, wenn er # nicht in /etc ist. [postfix-tcpwrapper] enabled = true filter = postfix action = hostsdeny sendmail[name=Postfix, [email protected]] logpath = /var/log/mail bantime = 300 # Sperren Sie niemanden. Berichten Sie einfach Informationen über den Remote-Host. # Eine Benachrichtigung wird höchstens alle 600 Sekunden (bantime) gesendet. [vsftpd-notification] enabled = false filter = vsftpd action = sendmail-whois[name=VSFTPD, [email protected]] logpath = /var/log/messages maxretry = 5 bantime = 1800 # Dasselbe wie oben, aber mit Sperrung der IP-Adresse. [vsftpd-iptables] enabled = false filter = vsftpd action = iptables[name=VSFTPD, port=ftp, protocol=tcp] sendmail-whois[name=VSFTPD, [email protected]] logpath = /var/log/messages maxretry = 5 bantime = 1800 # Sperren Sie Hosts, die Agenten identifizieren, die Spam-Roboter sind, die das Web # nach E-Mail-Adressen durchsuchen. Die E-Mail-Ausgaben werden gepuffert. [apache-badbots] enabled = true filter = apache-badbots action = iptables-multiport[name=BadBots, port="http,https"] sendmail-buffered[name=BadBots, lines=5, [email protected]] 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 ausgesperrt werden möchte, habe ich sie zur ignoreip-Liste hinzugefügt.

Ich möchte die Anmeldeversuche für SSH, Apache, Proftpd, Courier-POP3, Courier-IMAP und Sasl überwachen, also habe ich enabled für diese Dienste auf true und für alle anderen Dienste auf false gesetzt. Bitte beachten Sie, dass einige Dienste wie SSH entweder durch iptables oder durch TCPWrappers ( /etc/hosts.deny) blockiert werden können. Entscheiden Sie selbst, welche Methode Sie bevorzugen.

Stellen Sie sicher, dass Sie die E-Mail-Adresse [email protected] durch Ihre eigene E-Mail-Adresse ersetzen, damit Sie benachrichtigt werden, wenn jemand von fail2ban blockiert wird.

Wenn Sie die Datei mit der Standard-/etc/fail2ban/jail.conf vergleichen, werden Sie auch feststellen, dass ich einige Protokolldateien geändert habe, da die Protokolldateien in der Standard-/etc/fail2ban/jail.conf nicht korrekt für OpenSUSE 10.3 sind.

Wann immer wir die fail2ban-Konfiguration ändern, müssen wir fail2ban neu starten, also tun wir das jetzt:

/etc/init.d/fail2ban restart

Das war’s schon. Fail2ban protokolliert in /var/log/fail2ban.log, sodass Sie diese Datei überprüfen können, um herauszufinden, ob/welche Hosts blockiert wurden. Wenn ein Host von fail2ban blockiert wurde, sieht es 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

Sie können auch Ihre Firewall überprüfen, um zu sehen, ob derzeit Hosts blockiert sind. Führen Sie einfach aus

iptables -L  

Für Dienste, die TCPWrappers verwenden, um Hosts zu blockieren, werfen Sie einen Blick auf /etc/hosts.deny.

Links

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.