Fail2Ban: protéger Postfix contre les attaques DoS de types AUTH, UNKNOWN et EHLO

Aujourd’hui, Jac m’envoie un message pour m’informer que sa redirection email ne fonctionne plus.

Je lance donc un terminal et vérifie les logs de Postfix, qui chargent des dizaines de lignes d’erreurs de ce type:

Dec 15 16:30:33 mail postfix/smtpd[5912]: connect from static-68-236-203-102.nwrk.east.verizon.net[68.236.203.102]
Dec 15 16:30:34 mail postfix/smtpd[5912]: lost connection after AUTH from static-68-236-203-102.nwrk.east.verizon.net[68.236.203.102]
Dec 15 16:30:34 mail postfix/smtpd[5912]: disconnect from static-68-236-203-102.nwrk.east.verizon.net[68.236.203.102]
Dec 15 16:30:34 mail postfix/smtpd[5908]: connect from static-68-236-203-102.nwrk.east.verizon.net[68.236.203.102]
Dec 15 16:30:34 mail postfix/smtpd[5908]: lost connection after AUTH from static-68-236-203-102.nwrk.east.verizon.net[68.236.203.102]
Dec 15 16:30:34 mail postfix/smtpd[5908]: disconnect from static-68-236-203-102.nwrk.east.verizon.net[68.236.203.102]

Comme vous pourvez le constater, ça débite et ça impacte forcément les ressources du système. Voyons donc comment nous pouvons y mettre un terme.

Fail2Ban: protéger Postfix contre les attaques AUTH DoS photo

Pré-requis : fail2ban

Nous allons utiliser fail2ban, un compagnon très utile pour surveiller les logs et analyser les comportements néfastes à l’aide d’expressions régulières.

Je vous invite à relire le guide d’installation de fail2ban.

Nouvelle définition dans fail2ban : postfix-auth

Nous ajoutons donc une nouvelle définition, [postfix-auth], dans notre fichier jail.local:

nano /etc/fail2ban/jail.local

On l’ajoute à la fin des déclarations pour les serveurs mails :

[postfix-auth]
enabled     = true
filter      = postfix.auth
action      = iptables-multiport[name=postfix, port="http,https,smtp,submission,pop3,pop3s,imap,imaps,sieve", protocol=tcp]
#           sendmail[name=Postfix, dest=you@mail.com]
logpath     = /var/log/mail.logCode language: PHP (php)

Je désactive volontairement l’envoi des notifications, ce serait un comble.

Nouveau filtre : postfix.auth.conf

Maintenant que nous avons déclaré notre filtre dans fail2ban, passons à l’expression régulière qui va gérer le bannissement.

nano /etc/fail2ban/filter.d/postfix.auth.conf

On y ajoute:

[Definition]
failregex = lost connection after (AUTH|UNKNOWN|EHLO) from (.*)\[\]
ignoreregex =Code language: JavaScript (javascript)

Cela nous permet de gérer les erreurs AUTH mais aussi UNKNOWN et EHLO, afin de couvrir un large spectre.

Redémarrage de fai2ban et Postfix

Il ne nous reste plus qu’à relancer les services fail2ban et Postfix:

service fail2ban restart
service postfix restart

A noter que cela prend une bonne minute pour que toutes instances de connexions soient tuées par le filtre.

Après deux minutes, nous avons retrouvé le fichier log épuré de tout message d’erreur dont nous avions l’habitude.

Gravatar for Matt Biscay

Je suis Matt Biscay, développeur WordPress & WooCommerce certifié chez Codeable, administrateur système et enseignant.

J’aide les entreprises à créer, optimiser et fiabiliser leurs sites WordPress avec une approche technique propre : performance, sécurité, maintenance, développement sur mesure et résolution de problèmes complexes.

Sur Skyminds, je partage des tutoriels WordPress, WooCommerce, Linux et administration système, avec des solutions testées sur des cas réels et pensées pour durer.

Découvrez mes services WordPress et WooCommerce.

5 pensées sur “Fail2Ban: protéger Postfix contre les attaques DoS de types AUTH, UNKNOWN et EHLO”

  1. Bonjour, bravo et merci pour tous vos tutoriels, j’ai voulu rajouter cette jail mais lorsque je relance fail2ban j’ai le message suivant:
    NOK: (“No failure-id group in ‘lost connection after (AUTH|UNKNOWN|EHLO|unknown) from (.*)\\[\\]'”,)

    J’avoue que je ne maitrise pas, je suis preneur d’une idée.

    Merci.

    Reply
    • Bonjour Aunisien,

      Merci, c’est gentil.

      Je viens de vérifier les fichiers de fail2ban et tout ceci n’est plus nécessaire car c’est désormais inclus dans la jail `postfix.conf`

      Bonne journée,
      Matt

      Reply
      • Merci pour la réponse.
        J’ai activé la prison postfix.conf mais je désespère, j’ai toujours des connexions unknown qui ne sont pas bannies… ainsi que des “warning: hostname zg-0915b-23.stretchoid.com does not resolve to address 192.241.235.153: Name or service not known”…

        Mais je trouverai un jour !

  2. Hello,
    Il me semble que ceci fonctionne

    failregex = lost connection after (AUTH|UNKNOWN|EHLO) from (.*)\[\]

    Sinon, avez-vous une meilleure solution?

    Merci

    Reply
    • Pardon, je voulais plutôt dire:

      failregex = lost connection after (AUTH|UNKNOWN|EHLO) from (.*)\[\]

      Dans mon cas, sans le , j’ai un message d’erreur dans le log de fail2ban.

      Reply

Opinions