Demiurgo
26/01/2011, 17:58
hace tiempo leí un artículo bastante interesante sobre un fallo de programación en mod evasive => http://el-blog-de-thor.blogspot.com/...odevasive.html
#!/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