fail2ban: automatiser les mails de plainte aux adresses abuse

fail2ban: automatiser les mails de plainte aux adresses abuse

Si vous faites tourner fail2ban pour protéger votre serveur d’attaques diverses, vous recevez peut-être (et sinon vous devriez) des rapports sur les hôtes bannis par votre système. Et vous avez peut être un peu les nerfs de voir revenir les mêmes au fil des semaines.

En général les réseaux disposent d’un ‘abuse contact’ un enregistrement ‘abuse-c:’ dans la base whois.

Avec un petit script il est assez facile d’envoyer automatiquement un mail à cette adresse pour se plaindre de ces attaques incessantes..

Voilà mon script (édité pour suivre la remarque de penthium):

# nano reportabuse.sh
for HOST in $(cat /var/log/fail2ban.log | grep Ban | awk '{print $NF}');
do
        for EMAIL in $(whois $HOST | grep '% Abuse contact for' | awk '{print $NF}'| sed -e "s/'//g");
                do
                        (echo "Hi, "
                        echo "the host $HOST for which you are listed as the abuse contact, is operating a bot trying to brute force ssh. "
                        echo "You might want to check what's happening. "
                        echo " "
                        echo "This is an automated email sent as many times as the host listed above has been banned by our Fail2ban. "
                        echo "If the duplication is an inconvenience, you might consider acting upon that problem faster :) "
                        echo "(you can further inquire about it by writing an email to : myaddress@exemple.com if you wish so) "
                        echo " "
                        echo "Best Regards. "
                        echo " "
                        echo "All Log date and time below are UTC+1. "
                        echo "====================== BEGIN AUTH LOG ============================="
                        echo " "
                        cat /var/log/auth.log | grep 'Failed password' | grep $HOST
                        echo "====================== END AUTH LOG ===============================" )>report.txt
                        mail -s "COMPLAINT about the host $HOST on your network trying brute forcing ssh"  $EMAIL,myaddress@exemple.com -a From:myaddress@exemple.com < report.txt

        done
done

on sauve puis

# chmod 0755 reportabuse.sh

Enfin on ajoute dans le crontab (pour ma part je le fais 15 minutes avant la rotation de logs)

# crontab -e

et on rentre :

15 6 * * * /root/reportabuse.sh

puis on sauve

Et c'est tout. A partir de là tous les jours des mails partiront vers les divers contacts abuse des hébergeurs des machines qui vous attaquent. C'est possiblement moyennement utile, mais si 1 sur 10 réagit et fais le ménage c'est toujours un empaffé de moins à faire chier le peuple 😉

2 Comments

  1. penthium2 · 10 décembre 2015

    pitié ! faire des regroupement de commandes pour construire ton mail :
    tu diminues le nombre I/O sur le fichier !
    on génère le texte dans un fichier
    (
    echo « Hi,  »
    echo « the host $HOST for which you are listed as the abuse contact, is operating a bot trying to brute force ssh.  »
    echo « You might want to check what’s happening.  »
    echo  »  »
    echo « This is an automated email sent as many times as the host listed above has been banned by our Fail2ban.  »
    echo « If the duplication is an inconvenience, you might consider acting upon that problem faster 🙂  »
    echo « (you can further inquire about it by writing an email to : myaddress@example.com if you wish so)  »
    echo  »  » echo « Best Regards.  »
    echo  »  »
    echo « All Log date and time below are UTC+1.  »
    echo « ========================================== BEGIN AUTH LOG ================================================ »
    echo  »  »
    #on extrait les ten,tatives de auth.log qu’on ajoute au texte
    cat /var/log/auth.log | grep ‘Failed password’ | grep $HOST
    echo « ========================================== END AUTH LOG ================================================== »
    ) >report.txt

    • Fièvres · 10 décembre 2015

      Oui, en effet ça réduit le nombre d’I/O 🙂 En même temps, ça tourne une fois par jour et ça envoie une trentaine de mail max, ça va pas mettre mon serveur à genoux et j’ai écrit ça un poil vite. Mais tu as tout à fait raison, j’ai édité en conséquence