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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *