Última actualización el Martes, 18 de Mayo de 2010 09:14


Aunque tiene sus detractores, por ineficacia, Mod_evasive (o modevasive) es una herramienta más de freno a los crackers que campan por Internet, frenando ciertos tipos de ataque DoS al servidor web Apache.
Pero uno de los problemas que tiene, es que aunque ajustemos relajadamente los valores de su configuración, Googlebot, a veces es como un elefante en una cacharreria. Su extremada velocidad de rastreo, puede llevarle a ser incluido en la lista temporal de baneados, algo que nadie desea.
El script es sencillo. Aunque podiamos haber usado las listas de IP de Google disponibles en IPLists.com, tras un analisis de estas listas, obervamos que muchas de las IP que contienen no son de sus rastreadores, sino de IP de sus rangos, y eso es otro cantar.
En su defecto, hemos usado lo que el propio Google dice, sobre sus boots, "siempre en su PTR tienen la cadena googlebot", aunque nos avisan de que alguien puede hacer una dirección inversa spoofed, por lo que hemos añadido una pequeña pieza de código que verifica en segunda parte, que la IP pertenezca a Google, algo más dificil de suplantar.
Para el uso del script se requiere que se configure el path de logs de mod_evasive, en un directorio propio, algo que no viene por defecto. Creara una lista de mantenimiento, y añadirá las IP a la lista blanca (whitelist) de modevasive.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
#!/bin/sh # ############################################################################## # Script de anadir a la lista blanca de mod_evasive las IP que corresponden a # los boot de google, que tiene tendencia a ser baneados por velocidad de scaneo # Version: 0.20 # # Fecha: 10/05/2010 # Notas de la version: # evasive - Lista blanca para googleboot en mod_evasive (Cpanel) # Copyright (C)2009 Abdelkarim Mateos, Tamainut, S.L. # Contact abkrim[at]tamainut.com. # Tamainut IT, S.L. (Madrid - Spain) # Licencia: GPL3 # ############################################################################# # TODO # * Sistema para guardar las IP con el fin de no hacer el bucle una y otra vez #
IFS="$"
#Variables DW="DosWhitelist " LOGDE="/var/log/mod_evasive" LDWL="/tmp/evasive-list-ip.txt" LDWLG="/tmp/evasive-list-ip-google.txt" FDWL="/usr/local/apache/conf/mod_evasive_whitelist.txt" FCDWL="/usr/local/apache/conf/mod_evasive_whitelist.conf" GOOGLE="Google Inc." # Cadena que tiene wl hwois de las IP de Google NOIP=""
#Comprobamos primero si existe el fichero temporal if [ -f "$LDWL" ]; then rm -f $LDWL fi if [ -f "$LDWLG" ]; then rm -f $LDWLG fi
ls -liSt $LOGDE | while read MEIP; do #echo "Comprobando IP bloqueadas ${MEIP} ..." SIP=${MEIP##*-} echo "IP sin delantera ${SIP}" #find /home/${CPUSER}/public_html -type 'd' > /tmp/${CPUSER}.dir.$$ PTR=`dig +short -x ${SIP}` GOOGLEBOT=`echo "$PTR" | grep "googlebot"` echo "$PTR" echo "$GOOGLEBOT" if [ "$PTR" != "" ] && [ "$GOOGLEBOT" != "" ]; then # Se que es un poco chapuza pero perdi mucho tiempo buscando hacerlo # con awk o bash. Practicidad (mejor hacerlo que no hacerlo) # De lo que se trata es de comprobar que la IP esta registrada por # Google ya que cualquiera que gestione un LIR, o tenga delegadas X # IP's puede hacerse un PTR falso poniendo la cadena. Si lo pongo # Es porque ya he visto este tipo de suplantacion # Es ok IFWHOIS=$(whois "$SIP" | grep "$GOOGLE") if [ "$IFWHOIS" != "" ]; then echo "La Ip de google es: $SIP" echo $SIP >> $LDWL fi fi echo "==============================================" done
# Comprobamos que existe el fichero de IP de mod_evasive if [ ! -f "$FDWL" ]; then touch $FDWL fi # Comprobmaos que existe el fichero include whitelist de mod_evasive # Debe existir un Include a este fichero en el fichero de configuracion # de mod_evasive # Include "/usr/local/apache/conf/mod_evasive_whitelist.conf" if [ ! -f "$FCDWL" ]; then touch $FCDWL fi
# Bucle para comprobar que las IP's no esten en la lista y no duplicarlas while read line; do NOIP=$line echo "Comprobando la IP: ${NOIP}" while read line2; do # Comprobamos que la IP no esta en el fichero if [ "$line" = "$line2" ]; then NOIP="" break fi done < $FDWL echo "Add la IP ${NOIP}" sleep 10 # Si hay una nueva IP la grabamos if [ "$NOIP" != "" ]; then echo "No existe la IP ${NOIP} en el fichero. Add" echo $NOIP >> $FDWL echo $DW $NOIP >> $FCDWL fi done < $LDWL
# Un restart graceful para que lea la nueva configuracion /etc/rc.d/init.d/httpd graceful
|
Descargar código