jueves, 23 de junio de 2016

Bloqueo de IPTABLES por región

Últimamente he tenido muchos ataques de suplantación de identidad en zimbra, así que ya obstinado me puse manos a la obra con IPTABLES e indague como solucionar definitivamente este flagelo, o paliarlo den gran medida.

Debo aclarar antes de continuar que esta configuración fue echa en Centos 6, aunque en Centos 7 y en las demás distribuciones como regla general es lo mismo, cambiando solo la forma de hacer el guardado permanente de las reglas (si no se guardan permanentemente al hacer un reinicio de servicio o del sistema se pierden).

Para ello busqué el bloque regional de IP's asignado a Venezuela (mi caso) para poder discriminar el acceso a la interfaz webmail de zimbra. En mi caso no deseo bloquear el MTA, solo el acceso a la interfaz por el puerto 443. Esto debido a que los ataques que he tenido han sido de países africanos y en menor medida EEUU y Europa.

Podemos ver el bloque de IP por región en la siguiente página

Ya teniendo la información editamos (recomiendo usar gedit o vim) para proceder a construir nuestro bash

#cd /home
#sudo vim lista-blanca.sh

Agregamos con los siguientes parámetros:

iptables -I INPUT -p UDP -s 172.16.0.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p UDP -s 129.90.0.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p UDP -s 150.185.0.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p UDP -s 150.186.0.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p UDP -s 150.188.0.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p UDP -s 158.160.0.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p UDP -s 159.90.0.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p UDP -s 161.22.32.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p UDP -s 161.140.0.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p UDP -s 161.196.0.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p UDP -s 161.212.0.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p UDP -s 161.234.0.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p UDP -s 161.255.0.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p UDP -s 162.122.0.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p UDP -s 167.134.0.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p UDP -s 179.20.0.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p UDP -s 179.44.0.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p UDP -s 181.17.0.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p UDP -s 181.18.0.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p UDP -s 181.34.0.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p UDP -s 181.180.0.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p UDP -s 181.184.0.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p UDP -s 181.208.0.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p UDP -s 181.208.128.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p UDP -s 181.225.32.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p UDP -s 186.14.0.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p UDP -s 186.24.0.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p UDP -s 186.24.128.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p UDP -s 186.25.0.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p UDP -s 186.26.0.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p UDP -s 186.26.128.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p UDP -s 186.88.0.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p UDP -s 186.96.64.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p UDP -s 186.164.0.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p UDP -s 186.166.0.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p UDP -s 186.167.0.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p UDP -s 186.184.0.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p UDP -s 186.186.0.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p UDP -s 186.188.0.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 190.170.64.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 190.170.128.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 190.170.192.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 190.198.0.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 190.200.0.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 200.5.16.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 200.5.128.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 200.8.0.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 200.11.128.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 200.31.128.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 200.35.0.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 200.35.64.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 200.35.128.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 200.35.192.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 200.35.224.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 200.35.240.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 200.44.0.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 200.47.0.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 200.47.128.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 200.47.176.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 200.47.192.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 200.47.224.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 200.71.128.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 200.71.144.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 200.71.160.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 200.74.192.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 200.74.224.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 200.75.96.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 200.75.128.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 200.75.144.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 200.82.128.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 200.82.160.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 200.82.176.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 200.82.192.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 200.82.208.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 200.82.224.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 200.84.0.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 200.84.128.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 200.84.160.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 200.84.192.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 200.85.64.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 200.90.0.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 200.90.32.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 200.90.64.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 200.93.0.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 200.93.64.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 200.93.96.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 200.109.0.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 200.109.128.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 200.110.240.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 201.208.0.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 201.222.0.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 201.238.0.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 201.238.32.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 201.242.0.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 201.243.0.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 201.248.0.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 201.249.0.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 201.249.64.0/16 --dport 443 -j ACCEPT
iptables -I INPUT -p TCP -s 201.249.128.0/16 --dport 443 -j ACCEPT

En este caso vemos que he agregado el rango 192.168.0.0, eso es conveniente si se dispone de muchas vlans en dicho rango y el servicio de correo se encuentra detrás de un firewall haciendo NAT como es mi caso.

Si quieren bloquear el acceso a UDP pueden hacerlo cambiando el "TCP" por "UDP" en cualquier editor de texto.

la sintaxis "-I" es para agregarlo al principio de la configuración, esta regla deben ser la primera que lea nuestro IPTABLES

Ahora que hemos dado acceso a nuestro bloque de IP lo que queremos hacer muy seguramente es bloquear el acceso a las demás IP's del resto del mundo conocido al 443, para lo cual colocamos el siguiente comando:

#sudo iptables -A INPUT -p TCP -s 0.0.0.0/0 --dport 443 -j DROP

Donde "-A" indica que se coloque al final de la línea. En este sentido, es muy importante el orden, pues si se coloca esta sentencia entre las primeras sencillamente denegará a las otras por muy bien colocadas que estuvieren, así que mucho cuidado, pues IPTABLES para estas cosas es un dolor de cabeza.

ponemos nuestro archivo sh como ejecutable solo para root usando
#sudo chmod +x lista-blanca.sh

ejecutamos, y verificamos que las reglas estén arriba con el comando:

#sudo iptables -L -n -v

Luego de agregado debemos verificar el funcionamiento tanto interno como externo.

Si todo funciona correctamente ejecutamos.

#sudo service iptables save

Una vez completado esto, solo los bloques de IP que hemos agregado podrán acceder al puerto 443, quitándonos de encima un montón de smpamers que quieran usar nuestro servicio.

Esto claro, funciona si se dispone de un servidor de correo que no requiera el acceso desde otros países, aunque lo bueno es que si se tiene zpush u otro servicio de open exchange se puede tener acceso hasta en la China sin tener que comprometer nuestra seguridad, pues este seguirse usando.



Espero les sirva.