#!/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.
# See url for more info - http://www.cyberciti.biz/faq/?p=3402
# Author: nixCraft under GPL v.2.0+
# -------------------------------------------------------------------------------
ISO="ru cn"
# Rusia y china
### 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