Script bash pour DROP d'IP

lolotux

Grand Maître
Bonjour,

J'ai installé un module pour apache assez intéressant : mod_clamav
Sur un apache-2.0.54 sur une Mandriva 2006.0..

Il est intéressant car il affiche une page d'erreur, si un poste visitant l'un des sites que je gère, tente (volontairement ou non) de compromettre le système par hack de virus...
Cela génère un log dans /var/log/httpd/error_log :
[Mon Nov 20 08:25:13 2006] [error] [client 71.199.188.170] [14992] virus daemon connection problem found in request http://login.dcn.yahoo.com/config/login?.done=http://farechase.yahoo.com&login=Kit_&passwd=orange, referer:

Or j'ai remarqué souvent les mêmes entrées avec les mêmes IP... J'en conclu que certains postes infectés scan l' Internet au hasard et recommence indéfiniment !

D'où ma conclusion si une erreur HTTP ne suffit pas, "interdisons ces adresses IP !!!"
Alors j'ai fait un petit script bash qui analyse le log et drop les IP... Mais le seul truc qui ne me conviens pas c'est qu'une adresse IP peut apparaitre plusieurs fois !
Elle sera donc DROPée autant de fois !

Je vous mets mon script :
[cpp]#! /bin/sh
# clam-ip-drop.sh
# under GPL2
#
#/***************************************************************************
# * *
# * This program is free software; you can redistribute it and/or modify *
# * it under the terms of the GNU General Public License as published by *
# * the Free Software Foundation; either version 2 of the License, or *
# * (at your option) any later version. *
# * *
# ***************************************************************************/

# Réccupération des adresses IP si il y en a dans les 4 dernière ligne (limite le nombre de doublon)
ip=`tail -n 4 /var/log/httpd/error_log | grep "virus daemon" | grep -v "cannot create" | cut -d " " -f8-8 | cut -d "]" -f1-1`;
date=`date`;

# Boucle qui va faire un DROP de chaque IP
for i in $ip ; do
# On indique dans /var/log/messages que l'on drop une IP
echo $date." Drop de l'IP : "$i >> /var/log/messages;
/sbin/iptables -I INPUT -s $i -j DROP;
done
[/cpp]
Tous cela est lancé toutes les 3-4 minutes par un cron !

Des idées !??

Merci
 

zeb

Modérateur
RTFM :[fixed]$ man uniq[/fixed]

Ligne 15, ne mets pas de tail, mais ajoute uniq à la fin.
 

lolotux

Grand Maître
Je dirais même plus...
man uniq
man sort

Bref je bosse sur uniq que je ne connaissais pas :)
 

lolotux

Grand Maître
J'en suis là :
[cpp]# Récupération des adresses IP si il y en a dans les 100 dernières lignes
ip=`tail -n 100 /var/log/httpd/error_log | grep "virus daemon" | grep -v "cannot create" | cut -d " " -f8-8 | cut -d "]" -f1-1 > /tmp/IP-file`;

# La Date
date=`date`;

# Range les IPs
ip1=`sort /tmp/IP-file -o /tmp/IP-file-sort`;

# Récupère les IP de façon unique !
ip2=`uniq /tmp/IP-file-sort | grep -v "already"`

# Boucle qui va faire un DROP de chaque IP
for i in $ip2 ; do
# On indique dans /var/log/messages que l'on drop une IP
echo $date." Drop de l'IP : "$i >> /var/log/messages;
/sbin/iptables -I INPUT -s $i -j DROP;
done[/cpp]

Comme quoi lire ce :fou: :o :( tain de manuel est souvent très utile ! :)
 

lolotux

Grand Maître
Cela donne :
DROP all -- 74.52.87.82 0.0.0.0/0
DROP all -- 74.52.86.34 0.0.0.0/0

zeb a écrit :
( Est-ce bien nécessaire de nous donner cette liste d'IPs :o )

C'est vrai : Non !

:ange:
 

zeb

Modérateur
Je dirais même plus...
man uniq
man sort

Rhooo... Tu ne l'as pas lu, le man sort. Allez, recommence, surtout le paragraphe concernant l'option -u. ;)

Ce qui donne :

[fixed]#!/bin/sh

date=`date`;
for i in `tail -100 /var/log/httpd/error_log |
grep "virus daemon" |
grep -v "cannot create" |
cut -d " " -f8-8 |
cut -d "]" -f1-1 |
sort -u`
do
echo $date." Drop de l'IP : "$i >> /var/log/messages;
/sbin/iptables -I INPUT -s $i -j DROP;
done[/fixed]

Donc tu maintiens tail ?

Remarque la disposition en colonne du code que je te propose. C'est ma façon de faire (à moi et à d'autres hein !) et je ne t'impose rien, mais la facilité de relecture qu'elle permet mérite qu'on s'y penche.

( Est-ce bien nécessaire de nous donner cette liste d'IPs :o )
 

lolotux

Grand Maître
Rhooo... Tu ne l'as pas lu, le man sort. Allez, recommence, surtout le paragraphe concernant l'option -u. ;)
Si si mais surement trop en diagonal.... :non:

....
Remarque la disposition en colonne du code que je te propose. C'est ma façon de faire (à moi et à d'autres hein !) et je ne t'impose rien, mais la facilité de relecture qu'elle permet mérite qu'on s'y penche.

( Est-ce bien nécessaire de nous donner cette liste d'IPs :o )

La liste à été réduite !
Mais je garde ta remarque du code en colonne.
 

lolotux

Grand Maître
Le tail est pour l'instant gardé pour jouer sur l'option -n...
Lorsque le script ne droppera pas deux fois une IP et ne droppera pas une IP déjà droppée, je changerais :
tail -100 /var/log/httpd/error_log | grep "virus daemon"
en
grep "virus daemon" /var/log/httpd/error_log
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 128
Messages
6 717 844
Membres
1 586 372
Dernier membre
Meeithot
Partager cette page
Haut