Mittels des PAM Moduls pam_abl von Andy Armstrong ist es möglich, pam-basierte Dienste durch Autoblacklisting infolge Brute-Force oder Dictionary Attacken zu schützen. Es wird in der Regel so konfiguriert, daß die blacklist-User weiterhin einen normalen Login sehen, aber garantiert nicht authentifiziert werden. Der Vorteil von pam_abl ist es, dass im Gegensatz zu beispielsweise Portsentry, das auf eine Anzahl von SYN-Paketen reagiert, indem entsprechende Hosts an der Firewall blockiert und dadurch für einen Denial-Of-Service Angriff durch gefälschte Pakete anfällig wird, weil das automatische Blacklisting einen kompletten TCP-drei-Wege-Handshake voraussetzt.
rpm -Uvh pam_abl*.i386.rpm openssh-3.9*.i386.rpm
/etc/security/pam_abl.conf
# debug host_db=/var/lib/abl/hosts.db host_purge=2d host_rule=*:10/1h,30/1d user_db=/var/lib/abl/users.db user_purge=2d user_rule=!root:10/1h,30/1d
* : Alle User sind für diese Regel gültig
! : Dieser User ist für diese Regel nicht gültig
| : Benutzerliste
user_rule=*:6/1h|root/ssh:4/1h,8/1d user_purge=2d
Alle User dürfen maximal 6x pro Stunde falsche Kennwörter eingeben, root beim Dienst ssh maximal 4 Versuche pro Stunde und maximal 8 Fehlversuche pro Tag, ansonsten ist der Account gesperrt.
Dies gilt dann allerdings nur für die entsprechende Absende-IP-Adresse. Es wird nicht der gesamte Dienst für den User gesperrt. Nach 2d zwei Tagen wird die IP-Adresse dann wieder freigegeben.
/etc/pam.d/sshd
#%PAM-1.0 auth required pam_stack.so service=system-auth auth required pam_nologin.so auth required pam_abl.so config=/etc/security/pam_abl.conf account required pam_stack.so service=system-auth password required pam_stack.so service=system-auth session required pam_selinux.so session required pam_stack.so service=system-auth session required pam_limits.so session optional pam_console.so
/etc/ssh/sshd_config (Auszug)
UsePAM yes
Befehlszeile pam_abl
pam_abl
pam_abl zeigt die aktuelle Blacklist (Failed users: und Failed hosts:) an.