FORUM Tom's Hardware » Le monde de Linux » Sécurité » Script bash pour DROP d'IP
 

Script bash pour DROP d'IP

Il y a 425 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici
Ajouter une réponse



 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet : Script bash pour DROP d'IP
 
I am not a number (license), I'm a free man !
Plus d'informations

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/ [...] swd=orange, 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 :

Code :
  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. # Réccupération des adresses IP si il y en a dans les 4 dernière ligne (limite le nombre de doublon)
  14. ip=`tail -n 4 /var/log/httpd/error_log | grep "virus daemon" | grep -v "cannot create" | cut -d " " -f8-8 | cut -d "]" -f1-1`;
  15. date=`date`;
  16. # Boucle qui va faire un DROP de chaque IP
  17. for i in $ip ; do
  18.     # On indique dans /var/log/messages que l'on drop une IP
  19.     echo $date." Drop de l'IP : "$i >> /var/log/messages;
  20.     /sbin/iptables -I INPUT -s $i -j DROP;
  21. done


Tous cela est lancé toutes les 3-4 minutes par un cron !
 
Des idées !??
 
Merci


Message édité par lolotux le 09-12-2006 à 02:56:54

---------------
Sofware is like sex, it's better when it's free !
Linux is like a tipi: no Windows, no Gate and an Apache inside
http://www.yesgameonlinux.org/
zeb
Plus d'informations

RTFM :

$ man uniq


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

I am not a number (license), I'm a free man !
Plus d'informations

Je dirais même plus...
man uniq
man sort
 
Bref je bosse sur uniq que je ne connaissais pas :)

I am not a number (license), I'm a free man !
Plus d'informations

J'en suis là :

Code :
  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. # La Date
  4. date=`date`;
  5. # Range les IPs
  6. ip1=`sort /tmp/IP-file -o /tmp/IP-file-sort`;
  7. # Récupère les IP de façon unique !
  8. ip2=`uniq /tmp/IP-file-sort | grep -v "already"`
  9. # Boucle qui va faire un DROP de chaque IP
  10. for i in $ip2 ; do
  11.     # On indique dans /var/log/messages que l'on drop une IP
  12.     echo $date." Drop de l'IP : "$i >> /var/log/messages;
  13.     /sbin/iptables -I INPUT -s $i -j DROP;
  14. done


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


Message édité par lolotux le 11-12-2006 à 20:17:36
I am not a number (license), I'm a free man !
Plus d'informations

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:


Message édité par lolotux le 22-12-2006 à 02:37:07
zeb
Plus d'informations

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 )

I am not a number (license), I'm a free man !
Plus d'informations

a écrit :


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:  
 

a écrit :


....
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.

I am not a number (license), I'm a free man !
Plus d'informations

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


Message édité par lolotux le 13-12-2006 à 12:17:07

Aller à :
Ajouter une réponse
  FORUM Tom's Hardware » Le monde de Linux » Sécurité » Script bash pour DROP d'IP
 

Annonces Google
Publicité
Les ressources relatives