Inhaltsverzeichnis
Fail2ban
Fail2ban ist ein Dienst, welcher Logs überwacht und bei einer gewissen Anzahl von falschen Passworteingaben diesen Client über iptables
bannt. Das bedeutet, jener Client kann für eine gewisse Zeit keine Verbindung mehr zum jeweiligen Dienst aufbauen. In der folgenden Anleitung wird die Konfiguration von Faail2ban mitsamt den Jails beschrieben.
Softwarevoraussetzungen: Paketverwaltung | Texteditor | evtl. Mailserver
Schwierigkeitsgrad: Mittel
Ausgetestet mit folgenden Betriebssystemen: Ubuntu | Debian | teilweise auch andere Distributionen
Installation
Es wird nur das Paket fail2ban
, so wie die Firewall iptables
benötigt:
user@server:~$ sudo apt-get install fail2ban iptables
Konfiguration
Die Konfiguration geschieht größtenteils in /etc/fail2ban/jail.local
, in /etc/fail2ban/fail2ban.conf
kann lediglich das loglevel
eingestellt werden, was unter Umständen ganz praktisch ist.
Standardeinstellungen
Hinweis: In älteren Logcheck-Versionen (bzw. anderen Distributionen) müssen diese Einstellungen teilweise in /etc/fail2ban/fail2ban.conf
vorgenommen werden.
Diese Einstellungen nimmt man in /etc/fail2ban/jail.local
vor. Dazu kopiert man die Vorlage /etc/fail2ban/jail.conf
wie von Fail2Ban vorgeschlagen nach jail.local
und öffnet diese anschließend:
user@server:~$ sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local user@server:~$ sudo nano /etc/fail2ban/jail.local
IPs ignorieren
Falls gewisse IP-Adressen nicht gebannt werden sollen können diese bei ignoreip
eingetragen werden:
ignoreip = 127.0.0.1 192.168.2.104 192.168.0.1/4 # Beispiel
Banzeit
Diese kann man durch bantime (in Sekunden) definieren:
bantime = 6000 # Beispiel
Benachrichtigung per E-Mail
Die anzuschreibende Mailadresse im Falle eines gebannten Hosts wird bei destmail
eingetragen
destemail = root@localhost # Beispiel
Man kann zwischen drei verschiedenen Bannaktionen und Benachrichtigungen wählen:
# The simplest action to take: ban only action_ = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s] # ban & send an e-mail with whois report to the destemail. action_mw = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s] %(mta)s-whois[name=%(__name__)s, dest="%(destemail)s", protocol="%(protocol)s] # ban & send an e-mail with whois report and relevant log lines # to the destemail. action_mwl = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s] %(mta)s-whois-lines[name=%(__name__)s, dest="%(destemail)s", logpath=%(logpath)s]
Nachdem man sich für eine entschieden hat, trägt man eine Ausgesuchte in die Klammer ein. Hier Syntaxbeispiele:
action = %(action_mwl)s # Aktion action_mwl action = %(action_mw)s # Aktion action_mw action = %(action_)s # Aktion action_
Jails
Auch diese Einstellungen nimmt man in /etc/fail2ban/jail.local
vor. Jails sind für verschiedene Dienste zuständig, beim aktivieren überwachen sie die Logs, der jeweiligen Dienste.
Dazu setzt man die jeweilige Jail bei enabled
von false
:
[Beispiel] enabled = false port = Port filter = Filter logpath = einlog.log maxretry = 6
…auf true
:
[Beispiel] enabled = true port = Port filter = Filter logpath = einlog.log maxretry = 6
Die jeweiligen Jails sind gut kommentiert. Man sollte diejenigen aktivieren, die Dienste schützen, die auf der jew. Maschine laufen. Hier eine Übersicht über die Standard Jails (stehen in der /etc/fail2ban/jail.local
):
### SSH Jail [ssh] enabled = true port = ssh filter = sshd logpath = /var/log/auth.log maxretry = 6 ### PAM Jail -> Vorsicht alle Ports werden gebannt! [pam-generic] enabled = false # pam-generic filter can be customized to monitor specific subset of 'tty's filter = pam-generic # port actually must be irrelevant but lets leave it all for some possible uses port = all banaction = iptables-allports port = anyport logpath = /var/log/auth.log maxretry = 6 ### Xinetd Jail -> auch hier werden alle Ports gebannt [xinetd-fail] enabled = false filter = xinetd-fail port = all banaction = iptables-multiport-log logpath = /var/log/daemon.log maxretry = 2 ### nochmalige Sicherung für ssh [ssh-ddos] enabled = true port = ssh filter = sshd-ddos logpath = /var/log/auth.log maxretry = 6 # # HTTP servers # ### verschiedene Apache Jails, können alle aktiviert werden, aber trotzdem testen! [apache] enabled = true port = http,https filter = apache-auth logpath = /var/log/apache*/*error.log maxretry = 6 [apache-multiport] enabled = true port = http,https filter = apache-auth logpath = /var/log/apache*/*error.log maxretry = 6 [apache-noscript] enabled = true port = http,https filter = apache-noscript logpath = /var/log/apache*/*error.log maxretry = 6 [apache-overflows] enabled = true port = http,https filter = apache-overflows logpath = /var/log/apache*/*error.log maxretry = 2 # # FTP servers # ### Jail für vsftpd [vsftpd] enabled = false port = ftp,ftp-data,ftps,ftps-data filter = vsftpd logpath = /var/log/vsftpd.log # or overwrite it in jails.local to be # logpath = /var/log/auth.log # if you want to rely on PAM failed login attempts # vsftpd's failregex should match both of those formats maxretry = 6 ### Jail für proFTPD [proftd] enabled = true port = ftp,ftp-data,ftps,ftps-data filter = proftpd logpath = /var/log/proftpd/proftpd.log maxretry = 6 ### wuftpd [wuftpd] enabled = false port = ftp,ftp-data,ftps,ftps-data filter = wuftpd logpath = /var/log/auth.log maxretry = 6 # # Mail servers # ### Jail für postfix [postfix] enabled = true port = smtp,ssmtp filter = postfix logpath = /var/log/mail.log ### Jail für couriersmtp [couriersmtp] enabled = false port = smtp,ssmtp filter = couriersmtp logpath = /var/log/mail.log ### Jail für courierauth [courierauth] enabled = false port = smtp,ssmtp,imap2,imap3,imaps,pop3,pop3s filter = courierlogin logpath = /var/log/mail.log ### SASL Jail [sasl] enabled = true port = smtp,ssmtp,imap2,imap3,imaps,pop3,pop3s filter = sasl # You might consider monitoring /var/log/warn.log instead # if you are running postfix. See http://bugs.debian.org/507990 logpath = /var/log/mail.log #logpath = /var/log/warn.log ### weitere Dinste [named-refused-udp] enabled = false port = domain,953 protocol = udp filter = named-refused logpath = /var/log/named/security.log [named-refused-tcp] enabled = false port = domain,953 protocol = tcp filter = named-refused logpath = /var/log/named/security.log
Fail2ban neustarten
Nach jeder Konfigurationsänderung muss Fai2ban neugestartet weren. Dies geschieht so:
user@server:~$ sudo service fail2ban restart
Geblockte IPs wieder freischalten
Siehe auch hier und hier. Folgender Befehl gibt den Befehl zurück, mit dem dann die IP entblockt werden kann:
user@server:~$ sudo fail2ban-client get JAIL actionunban iptables-multiport # JAIL durch den passenden Jail ersetzen
Für den Jail apache
ergibt sich folgende Ausgabe:
user@server:~$ sudo fail2ban-client get apache actionunban iptables-multiport iptables -D fail2ban-<name> -s <ip> -j DROP
Mit <name>
wird der wieder der Jail (hier: apache
) bezeichnet. Somit kann man den Client mit der IP <ip>
wie folgt entsperren:
user@server:~$ sudo iptables -D fail2ban-apache -s <ip> -j DROP
— chrisge 2018/05/26 01:05