Bonjour, Georges Roux a écrit, vendredi 24 décembre 2004, à 15:22 : [...] > #!/bin/bash > #banip.sh > > BANNEDIP="ALL: " > COUNT=`sudo grep Failed /var/log/auth.log | cut -d ' ' -f 13 | grep :: | > cut -d ':' -f 4 | sort -u | wc -l`
Compter les IP différentes n'est pas très utile pour tester -gt 0 ? On peut aussi éviter le recours à sudo en utilisant le groupe (adm ?) qui peut lire les auth.log. COUNT="$(grep -c -F Failed /var/log/auth.log)" On peut aussi se passer de COUNT, et tester si la liste BANNEDIP est vide avant d'allonger hosts.deny. > if [ "$COUNT" -gt 0 ] > then > for IP in `sudo grep Failed /var/log/auth.log | cut -d ' ' -f 13 | grep :: > | cut -d ':' -f 4 | sort -u` > do > BANNEDIP="$BANNEDIP $IP,"; > done > else BANNEDIP="" > fi > echo $BANNEDIP >> /etc/hosts.deny > > > et je met ca dans ma crontab bon il doit y avoir encore plein de truc a > corriger Le else est inutile, et le echo final peut remonter à la fin du if, après la boucle for. Cet echo doit être fait sous root ;) Il faudrait supprimer les doublons avec les IP déjà bannies dans un fichier banned_ips, puis régénérer le hosts.deny à l'aide d'un fichier hosts.deny.proto. En cas d'IP dynamique, ça ne servira pas beaucoup de garder longtemps des IP précises ; il est peut-être plus facile de déterminer les IP, ou plages d'IP, autorisées à se connecter par iptables ou/et ssh. > le script prend l'ip avec un seul acces rejeté pour le moment > et je pense qu'avec awk on pourrais faire mieux #!/usr/bin/awk -f BEGIN{ max_fail=10 } /Failed password/{ n[$13]++ } # on pourrait vérifier si $13 ressemble à une IP, et/ou # numéroter de droite à gauche, ici : $13 = $(NF - 3) END { for (x in n) { if(n[x] > max_fail) { print x } # ou : print x" \t"n[x] pour voir le score } } > pascal wrote: > > >Bonjour! > >C'est étrange c'est le même genre d'attaque que celle décrite dans un > >mail précédent qui provenait de ...côte d'ivoire! Les 3 IP citées sont en Chine (2) et en Hollande ... Bonnes fêtes, -- Jacques L'helgoualc'h