• Teilen
  • Bookmark "Fail2ban" auf del.icio.us
  • Bookmark "Fail2ban" auf Digg
  • Bookmark "Fail2ban" auf Reddit
  • Bookmark "Fail2ban" auf StumbleUpon
  • Bookmark "Fail2ban" auf Facebook
  • Bookmark "Fail2ban" auf Twitter
  • Bookmark "Fail2ban" auf Slashdot

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 (Karmic, Lucid, Lucid++) | Debian (Lenny, Squeeze) | teilweise auch andere Distributionen

Achtung! sudo: In dieser Anleitung verdeutlicht der Befehl sudo, dass die folgende Codezeile mit Root-Rechten ausgeführt werden muss. In normalen Ubuntu Installationen (Root-/VServer siehe Debian) kann dies durch den Befehl sudo erreicht werden.
Bei Debian wird bei der Installation ein Passwort für den Root-Benutzer festgelegt, so kann man sich entweder direkt als Root oder als „normaler“ Benutzer mit Eingabe von su als Root einloggen (Root-Passwort benötigt) → sudo bleibt dann überflüssig!

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 2015/11/02 18:02

Diskussion

Geben Sie Ihren Kommentar ein. Wiki-Syntax ist zugelassen:
CZQWO
 
  • Teilen
  • Bookmark "Fail2ban" auf del.icio.us
  • Bookmark "Fail2ban" auf Digg
  • Bookmark "Fail2ban" auf Reddit
  • Bookmark "Fail2ban" auf StumbleUpon
  • Bookmark "Fail2ban" auf Facebook
  • Bookmark "Fail2ban" auf Twitter
  • Bookmark "Fail2ban" auf Slashdot
Sonstiges
Drucken/exportieren
Archiv

Archivierter Inhalt der alten Seite