Tutoriels

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 😉

umask de apache à 002 sur debian/Ubuntu pour obtenir des permissions à 664/775

umask de apache à 002 sur debian/Ubuntu pour obtenir des permissions à 664/775

Le umask par défaut d’apache est à 022, Nous allons voir ici comment le modifier afin d’obtenir des permissions en lecture/écriture pour les utilisateurs appartenant au même groupe.

Lorsque l’utilisateur apache crée des fichiers (que ce soit via un upload, ou un script tel qu’une installation de module/plugin dans un CMS) les permissions par défaut sur Debian (et Ubuntu) son rw-r–r– (0644) pour les fichiers, et rwxr-xr-x (755) pour les dossiers.
Ce comportement est certes sécurisé, mais particulièrement frustrant lorsque l’utilisateur FTP cherche à modifier ces fichiers créés et se retrouve coincé parce qu’il n’a pas les droits.
Et il n’est pas si facile que ça de mettre la main sur la solution, bien qu’on puisse la trouver ici et là.

Pour que l’utilisateur apache puisse créer des fichiers en 0664 et des dossiers en 0775 il faut changer son umask par défaut en 002 au lieu de 0022.

Pour ce faire commencer par faire un petit script php de test :

<?php
$now = date("Y-m-d-H-i-s",time());
if ($fp = fopen($now . '.txt', 'w')) {
  fwrite($fp, 'fichier de test.');
  fclose($fp);
  echo "ecriture réussie";
} else {
  echo "erreur d'écriture de fichier";
}
?>

et placer ce script dans un dossier où l’utilisateur apache a le droit d’écrire..

Vérifier que la ligne :

PIDFILE=$(. /etc/apache2/envvars && echo $APACHE_PID_FILE)

Se trouve bien dans le fichier /etc/init.d/apache2 et si elle s’y trouve, ajouter à la fin du fichier /etc/apache2/envvars :

#umask  002 pour passer les permission de fichiers à 0664 et de dossiers à 0775
umask 002

Relancer ensuite apache via un STOP/START (pas un restart):

/etc/init.d/apache2 stop
/etc/init.d/apache2 start

et c’est tout..
Lancer votre test et faites un ls dans le dossier pour vérifier les permissions :

-rw-r--r-- 1 www-data www-data  19 Nov 13 02:59 2014-11-13-07-59-54.txt
-rw-rw-r-- 1 www-data www-data  19 Nov 13 03:32 2014-11-13-08-06-33.txt

Ne pas oublier ensuite, si ce n’est pas déjà fait, d’attribuer le groupe de l’utilisateur ‘apache’ (www-data ici) à vos utilisateur FTP

(solution trouvée via serverfault.com appliquée et traduite de mes blanches mains pour votre plaisir)