GEoIP Debian Wheezy (7)

Otra entrada de apunte…. esta vez, quiero permitir el acceso al puerto 25 de mi mailserver a mi red local, vpn y subredes de españa; ya tengo un antispam en una máquina separada y no me interesa que se acceda de manera habitual para entrega de correo.

La entrada original, se encuentra aquí:

https://terminal28.com/how-to-block-countries-using-iptables-debian/

Esto es solo un ejemplo, pero se puede aplicar a más cosas… ssh, VoIP o lo que necesites.

Primero de todo, instalamos las dependencias:


# apt-get install libtext-csv-xs-perl module-assistant geoip-database libgeoip1
# module-assistant --verbose --text-mode auto-install xtables-addons


Una vez instaladas las dependéncias, instalamos las bbdd de maxmind:

# mkdir /usr/share/xt_geoip
# cd /usr/share/xt_geoip
# wget http://terminal28.com/wp-content/uploads/2013/10/geoip-dl-build.tar.gz
# tar xvf geoip-dl-build.tar.gz
# ./xt_geoip_dl
# ./xt_geoip_build -D . *.csv
# rm -fr geoip-dl-build.tar.gz


Una vez aplicado, configuramos los iptables, tal que:


# Generated by iptables-save v1.4.14 on Fri Jan 3 15:57:31 2014
*filter
:INPUT ACCEPT [541:131352]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [528:125051]
:SIPDOS - [0:0]
:SSHDDOS - [0:0]
:MYSQLDOS - [0:0]
:SMTPDDOS - [0:0]
-A INPUT -m geoip --src-cc CN,UA,TW -j DROP
-A INPUT -s 127.0.0.0/8 -p tcp -m tcp --dport 22109 -j ACCEPT
-A INPUT -s 192.168.0.0/16 -p tcp -m tcp --dport 22109 -j ACCEPT
-A INPUT -s 192.168.0.0/16 -p tcp -m tcp --dport 3306 -j ACCEPT
-A INPUT -s 127.0.0.0/8 -p tcp -m tcp --dport 3306 -j ACCEPT
-A INPUT -s 192.168.0.0/16 -p tcp -m tcp --dport 25 -j ACCEPT
-A INPUT -s 10.0.0.0/8 -p tcp -m tcp --dport 25 -j ACCEPT
-A INPUT -s 127.0.0.0/8 -p tcp -m tcp --dport 25 -j ACCEPT
-A INPUT -m geoip --src-cc ES -p tcp -m tcp --dport 25 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22109 -j SSHDDOS
-A INPUT -p tcp -m tcp --dport 3306 -j MYSQLDOS
-A INPUT -p tcp -m tcp --dport 25 -j SMTPDDOS
-A SIPDOS -j LOG --log-prefix "firewall-sipdos: " --log-level 6
-A SIPDOS -j DROP
-A SMTPDDOS -j LOG --log-prefix "firewall-smtpddos: " --log-level 6
-A SMTPDDOS -j DROP
-A SSHDDOS -j LOG --log-prefix "firewall-sshddos: " --log-level 6
-A SSHDDOS -j DROP
-A MYSQLDOS -j LOG --log-prefix "firewall-mysqldos: " --log-level 6
-A MYSQLDOS -j DROP

COMMIT
Enjoy your iptables 😉