J'ai openSMPTD
l'exploitation d'un serveur de messagerie. Il semble que je subisse actuellement des attaques par force brute, même si je doute qu'elles parviennent à entrer. Cela dit, j'aimerais alléger le fardeau que représentent pour mon serveur les tentatives constantes de connexion. Je configure fail2ban
d'interdire les contrevenants. Cependant, je n'arrive pas à trouver la bonne expression rationnelle et cela me rend fou ! J'ai vu ce lien sur le forum freeBSD à propos de la fail2ban
pour l'attraper. Cependant, même cette regex ne semblait pas capturer le texte d'exemple qu'ils ont fourni. J'ai modifié leur regex en vain. J'espère que quelqu'un pourra me donner quelques conseils car je suis très faible en matière de regex.
Mes fichiers journaux ressemblent à ceci :
Dec 25 20:03:29 frick mail.info smtpd[16849]: f7fa148a43b34578 smtp connected address=193.169.254.42 host=<unknown>
Dec 25 20:03:30 frick mail.info smtpd[16849]: f7fa148a43b34578 smtp tls ciphers=TLSv1.2:ECDHE-RSA-AES128-SHA256:128
Dec 25 20:03:30 frick mail.info smtpd[16849]: f7fa148a43b34578 smtp authentication user=info result=permfail
Dec 25 20:03:30 frick mail.info smtpd[16849]: f7fa148a43b34578 smtp failed-command command="AUTH LOGIN (password)" result="535 Authentication failed"
Dec 25 20:03:30 frick mail.info smtpd[16849]: f7fa148a43b34578 smtp disconnected reason=quit
"
Voyons donc ce qu'il en est : la ligne qui montre qu'il s'agit d'un forçage brutal est la suivante :
f7fa148a43b34578 smtp failed-command command="AUTH LOGIN (password)" result="535 Authentication failed"
Où l'on voit que l'authentification a échoué. Cependant, bizarrement, openSMTPD n'inclut pas l'adresse IP à bannir dans cette ligne : Nous devons regarder un nombre variable au-dessus de celle-ci :
f7fa148a43b34578 smtp connected address=193.169.254.42 host=<unknown>
Où l'on peut voir l'adresse IP de l'auteur de l'infraction. D'accord, je suis d'accord. La regex que j'ai actuellement et qui sélectionne tout le texte est :
^.*smtp connected address=\w[1-9.]* host=[a-z<>]*\n*[a-zA-Z0-9_.-\s\]\[:=<>"()]*
bien que fail2ban
veut un modèle plus fin. Je ne suis pas sûr d'avoir un moyen propre d'obtenir l'adresse IP appropriée pour le bannissement, car il est possible que deux personnes se connectent en même temps et que la mauvaise ligne soit choisie pour le bannissement.
Des suggestions ?