Knowledge Base

¿Qué es esto?

Linux: Bloquear todo el tráfico por país con iptables

25/05/2016 - 27/12/2018 -  Comentarios - Linux Iptables

Sólo hay que crear un fichero con este script, guardarlo en alguna parte del sistema y darle permisos de ejecución:

#!/bin/bash

# Purpose: Block all traffic from Russia. Use ISO code. #

# -------------------------------------------------------------------------------

ISO="ru"

 

### Set PATH ###

IPT=/sbin/iptables

WGET=/usr/bin/wget

EGREP=/bin/egrep

 

### No editing below ###

SPAMLIST="countrydrop"

ZONEROOT="/root/iptables"

DLROOT="http://www.ipdeny.com/ipblocks/data/countries"

 

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

}

 

# create a dir

[ ! -d $ZONEROOT ] && /bin/mkdir -p $ZONEROOT

 

# clean old rules

cleanOldRules

 

# create a new iptables list

$IPT -N $SPAMLIST

 

for c  in $ISO

do

# local zone file

tDB=$ZONEROOT/$c.zone

 

# get fresh zone file

$WGET -O $tDB $DLROOT/$c.zone

 

# country specific log message

SPAMDROPMSG="$c Country Drop"

 

# get

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 everything

$IPT -I INPUT -j $SPAMLIST

$IPT -I OUTPUT -j $SPAMLIST

$IPT -I FORWARD -j $SPAMLIST

 

# call your other iptable script

# /path/to/other/iptables.sh

 

exit 0

--------------------------

En la variable iso determinamos los códigos de los países que queremos bloquear, si hubiera más de uno se separarían con un espacio: "ru af" (En este caso rusia y afganistan). Los códigos de los países se obtienen de este enlace: http://www.ipdeny.com/ipblocks/

Una vez guardado el script lo ponemos en el cron para que una vez a la semana actualice la lista:

@weekly /var/www/html/block_traffic_by_country_iptables.sh

Si queremos ejecutarlo a mano sólo hay que ejecutar el script: /var/www/html/block_traffic_by_country_iptables.sh

Al hacerlo veremos cómo nos ha añadido un montón de IP'S dentro de iptables

Más info aquí:

http://www.cyberciti.biz/faq/block-entier-country-using-iptables/

Aquí explican otra forma de hacerlo,  geolocaliza en caliente las ip's (no la he probado):

http://xmodulo.com/block-network-traffic-by-country-linux.html