Ossec et Iptables : ban à durée variable

Plop à tous …
Encore de l’ossec et de l’iptables au menu, ici le but est de faire face aux crackers et autres kiddies sans se faire spammer de mails toutes les 6 minutes parce qu’un mec s’est planté 3 fois de suite de mot de passe sur SSH (un mec a tenté pendant deux jours de cracker mon ssh, résultat : une bonne centaines de mails d’alertes inutiles (le temps que je lui mettent un ban définitif)).

L’idée est simple, on crée une règle iptables qui drop les paquets reçu avec un timer, et à chaque nouveau paquet, on reset le timer. Ensuite toute les alertes d’ossec sont envoyées sur cette règle et l’ont est plus spammé!!

La règle iptables :

##Kiddies
/sbin/iptables -N KIDDIES
/sbin/iptables -A KIDDIES -m recent --set --name kiddies
/sbin/iptables -A INPUT -m recent --name kiddies --update --seconds 360 -j DROP

Puis on modifie le fichier d’active-response/bin/firewall-drop.sh d’ossec en remplaçant les DROP par des KIDDIES (de la ligne 55 à la 61 pour la dernière version).

     55    if [ "x${ACTION}" = "xadd" ]; then
     56       ARG1="-I INPUT -s ${IP} -j KIDDIES"
     57       ARG2="-I FORWARD -s ${IP} -j KIDDIES"
     58    else
     59       ARG1="-D INPUT -s ${IP} -j KIDDIES"
     60       ARG2="-D FORWARD -s ${IP} -j KIDDIES"
     61    fi

Ainsi, par défaut (dans ossec/etc/ossec.conf), la durée de ban de base est de 6 minutes et pour chaque paquet reçu, on drop encore les paquets pour 5 minutes (ce qui peut aller bien loin si le mec laisse tourner son script).

Par contre, avec un

iptables -L -v -n

on ne saura pas si une ip est encore droppée après les 6 minutes de ban Ossec (puisque la règle est supprimée au bout des 6 minutes) car même si la règle n’existe plus, si l’ip possède encore le tag kiddies avec un timer les paquets continueront d’être drop, il faut alors lister les ip avec la commande suivante :

cat /proc/net/xt_recent/kiddies |awk '{ print $1" "$4" "$5" "$6" "$7 }'

Par contre, je ne sais pas si l’on peut supprimer le timer à la main …