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