Se connecter avec
S'enregistrer | Connectez-vous
Votre question

Script bash pour DROP d'IP

Dernière réponse : dans Le monde de Linux
Partagez
9 Décembre 2006 02:52:25

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://fa..., referer: http://login.dcn.yahoo.com/config/login

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 :
  1. #! /bin/sh
  2. # clam-ip-drop.sh
  3. # under GPL2
  4. #
  5. #/***************************************************************************
  6. # * *
  7. # * This program is free software; you can redistribute it and/or modify *
  8. # * it under the terms of the GNU General Public License as published by *
  9. # * the Free Software Foundation; either version 2 of the License, or *
  10. # * (at your option) any later version. *
  11. # * *
  12. # ***************************************************************************/
  13.  
  14. # Réccupération des adresses IP si il y en a dans les 4 dernière ligne (limite le nombre de doublon)
  15. ip=`tail -n 4 /var/log/httpd/error_log | grep "virus daemon" | grep -v "cannot create" | cut -d " " -f8-8 | cut -d "]" -f1-1`;
  16. date=`date`;
  17.  
  18. # Boucle qui va faire un DROP de chaque IP
  19. for i in $ip ; do
  20. # On indique dans /var/log/messages que l'on drop une IP
  21. echo $date." Drop de l'IP : "$i >> /var/log/messages;
  22. /sbin/iptables -I INPUT -s $i -j DROP;
  23. done

Tous cela est lancé toutes les 3-4 minutes par un cron !

Des idées !??

Merci

Autres pages sur : script bash drop

a b 5 Linux
11 Décembre 2006 13:05:57

RTFM :
$ man uniq


Ligne 15, ne mets pas de tail, mais ajoute uniq à la fin.
11 Décembre 2006 19:41:42

Je dirais même plus...
man uniq
man sort

Bref je bosse sur uniq que je ne connaissais pas :) 
Contenus similaires
11 Décembre 2006 20:09:49

J'en suis là :
  1. # Récupération des adresses IP si il y en a dans les 100 dernières lignes
  2. 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`;
  3.  
  4. # La Date
  5. date=`date`;
  6.  
  7. # Range les IPs
  8. ip1=`sort /tmp/IP-file -o /tmp/IP-file-sort`;
  9.  
  10. # Récupère les IP de façon unique !
  11. ip2=`uniq /tmp/IP-file-sort | grep -v "already"`
  12.  
  13. # Boucle qui va faire un DROP de chaque IP
  14. for i in $ip2 ; do
  15. # On indique dans /var/log/messages que l'on drop une IP
  16. echo $date." Drop de l'IP : "$i >> /var/log/messages;
  17. /sbin/iptables -I INPUT -s $i -j DROP;
  18. done


Comme quoi lire ce :fou:  :o  :(  tain de manuel est souvent très utile ! :) 
11 Décembre 2006 20:20:12

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: 
a b 5 Linux
12 Décembre 2006 13:53:06

Citation :
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 :

#!/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


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  )
13 Décembre 2006 12:11:54

Citation :

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: 

Citation :

....
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.
13 Décembre 2006 12:16:36

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