Afin de renforcer la sécurité d'un serveur, je cherche mettre en place fail2ban.
Notre but est de bloquer une IP pendant 4 heures si on a 6 échecs de connexion sur cinq minutes.
Le serveur dont il est question ici est une Debian Lenny.
La version du package utilisé est bien la dernière pour Lenny : 0.8.3-2sid1
Hélas, lors des tests, fail2ban n'a banni aucune IP.
Extrait de /var/log/auth.log :
(...)
Apr 11 22:45:18 xxx sshd[28514]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh (...)
Apr 11 22:45:21 xxx sshd[28514]: Failed password for invalid user elis from xxx.xxx.xxx.xxx port 36988 ssh2
Apr 11 22:45:22 xxx sshd[28517]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh (...)
Apr 11 22:45:23 xxx sshd[28517]: Failed password for invalid user elis from xxx.xxx.xxx.xxx port 37418 ssh2
(...)
Extrait de /var/log/fail2ban.log :
(...)
2010-04-11 22:45:22,596 fail2ban.filter : DEBUG /var/log/auth.log has been modified
2010-04-11 22:45:22,597 fail2ban.filter.datedetector: DEBUG Sorting the template list
2010-04-11 22:45:27,597 fail2ban.filter : DEBUG /var/log/auth.log has been modified
2010-04-11 22:45:27,597 fail2ban.filter.datedetector: DEBUG Sorting the template list
(...)
Or, fail2ban me semble configuré correctement.
Extrait de /etc/fail2ban/jail.conf :
[DEFAULT]
ignoreip = 127.0.0.1
findtime = 300
bantime = 14400
maxretry = 6
backend = polling
[ssh]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 6
Extrait de /etc/fail2ban/filter.d/ :
[INCLUDES]
before = common.conf
[Definition]
_daemon = sshd
failregex = ^%(__prefix_line)s(?:error: PAM: )?Authentication failure for .* from \s*$
^%(__prefix_line)s(?:error: PAM: )?User not known to the underlying authentication module for .* from \s*$
^%(__prefix_line)sFailed (?:password|publickey) for .* from (?: port \d*)?(?: ssh\d*)?$
^%(__prefix_line)sROOT LOGIN REFUSED.* FROM \s*$
^%(__prefix_line)s[iI](?:llegal|nvalid) user .* from \s*$
^%(__prefix_line)sUser .+ from not allowed because not listed in AllowUsers$
^%(__prefix_line)sUser .+ from not allowed because none of user's groups are listed in AllowGroups\s*$
^%(__prefix_line)sauthentication failure; logname=\S* uid=\S* euid=\S* tty=\S* ruser=\S* rhost=(?:\s+user=.*)?\s*$
^%(__prefix_line)srefused connect from \S+ \(\)\s*$
^%(__prefix_line)sAddress .* POSSIBLE BREAK-IN ATTEMPT\s*$
J'ai testé avec "fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf"
fail2ban a détecté correctement les différentes erreurs.
Une dizaine d'IPs remplissaient les conditions pour un ban.
Running tests
=============
Use regex file : /etc/fail2ban/filter.d/sshd.conf
Use log file : /var/log/auth.log
Results
=======
Failregex
| (...)
|
`- Number of matches:
[1] 0 match(es)
[2] 0 match(es)
[3] 1713 match(es)
[4] 0 match(es)
[5] 1079 match(es)
[6] 0 match(es)
[7] 0 match(es)
[8] 0 match(es)
[9] 0 match(es)
[10] 0 match(es)
Quelqu'un aurait-il une piste ?
Merci d'avance,
# un hack ignoble
Posté par neologix . Évalué à -1.
iptables -I INPUT -m hashlimit -m tcp -p tcp --dport 22 --hashlimit 1/min --hashlimit-mode srcip --hashlimit-name ssh -m state --state NEW -j ACCEPT
Maintenant je peux me tromper...
[^] # Re: un hack ignoble
Posté par benoar . Évalué à 5.
[^] # Re: un hack ignoble
Posté par neologix . Évalué à 3.
- ça marche
- cela permet de réduire la charge réseau/CPU (les connexions ne sont pas établies, contrairement à fail2ban)
- cela protège contre les attaques très courtes (je suppose que fail2ban est lancé périodiquement, et de toute façon les tentatives de connexion ne sont pas écrites immédiatement dans les logs, sinon bonjour le remplissage et l'activité disque)
Donc je maintiens que dans 99% des cas, iptables doit être préféré à fail2ban...
[^] # Re: un hack ignoble
Posté par benoar . Évalué à 2.
# Ma config (qui fonctionne bien)
Posté par François . Évalué à 1.
[ssh-iptables]
enabled = true
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
mail-whois[name=SSH, dest=moi@mon_adresse.tld]
logpath = /var/log/messages
maxretry = 5
Il te manque donc 'action' qui défini justement l'action à faire si une IP est repérée.
Action qui doit correspondre à un fichier .conf dans /etc/fail2ban/action.d/
Dans mon cas iptables.conf (pour bloquer l'IP en question) et mail-whois.conf pour me prévenir par email du blocage.
[^] # Re: Ma config (qui fonctionne bien)
Posté par eldiablo . Évalué à 1.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.