En alguna ocasión me he encontrado con servidores que estaban recibiendo ataques muy graves desde rangos de China. Los sistemas perimetrales deben parar estos ataques pero en ocasiones los mismos «se cuelan». Como solución temporal y para terminar con el ataque y recuperar el servicio, procedí a bloquear todos los rangos de IPs Chinas con un sencillo script.
Este script que voy a dejar a continuación, obtiene los rangos de IPs actualizados de unos ficheros por países en un sitio web (http://www.ipdeny.com/ipblocks/data/countries) y después aplicando reglas en función de las zonas descargadas. Es necesario editar el script y en la variable ISO escribir el prefijo del país que queremos bloquear. En el script, vamos a bloquear Rusia (RU) y China (CN)
#!/bin/bash # El objetivo de este script es bloquear todo el tráfico de AFGHANISTAN (af) y CHINA (CN). Se puede usar la variable ISO para fijar qué países queremos bloquear. # ------------------------------------------------------------------------------- ISO="ru cn" ### Variables para facilitar el uso del script que apuntan a iptables (cortafuegos), wget para coger los archivos de la base de datos y egrep para seleccionar la IP sin ningún símbolo que iptables no pueda interpretar ### IPT=/sbin/iptables WGET=/usr/bin/wget EGREP=/bin/egrep #Nueva tabla en iptables sobre el baneo por región SPAMLIST="countrydrop" #Ubicacion donde se guarda la base de datos de ZONEROOT="/root/iptables" #URL de la base de datos de paises DLROOT="http://www.ipdeny.com/ipblocks/data/countries" #Funcion para limpiar todas las reglas del firewall y lo ponemos por defecto. cleanOldRules(){ $IPT -F $IPT -X $IPT -t nat -F $IPT -t nat -X $IPT -t mangle -F $IPT -t mangle -X $IPT -P INPUT ACCEPT $IPT -P OUTPUT ACCEPT $IPT -P FORWARD ACCEPT } #Creamos el directorio para almacenar la base de datos [ ! -d $ZONEROOT ] && /bin/mkdir -p $ZONEROOT #Ejecutamos la funcion cleanOldRules #Creamos la nueva tabla de iptables con el nombre de la variable SPAMLIST $IPT -N $SPAMLIST for c in $ISO do # Base de datos local tDB=$ZONEROOT/$c.zone # Descargamos y actualizamos la base de datos $WGET -O $tDB $DLROOT/$c.zone # Mensaje del pais baneado que aparecerá en el log de iptables SPAMDROPMSG="$c Country Drop" # Filtramos la base de datos para que iptables interprete correctamente la base de datos y vamos anadiendo cada bloque de IP. BADIPS=$(egrep -v "^#|^$" $tDB) for ipblock in $BADIPS do $IPT -A $SPAMLIST -s $ipblock -j LOG --log-prefix "$SPAMDROPMSG" $IPT -A $SPAMLIST -s $ipblock -j DROP done done # Drop todo $IPT -I INPUT -j $SPAMLIST $IPT -I OUTPUT -j $SPAMLIST $IPT -I FORWARD -j $SPAMLIST exit 0
0 comentarios