Inicio » Redes » IPTables ¡qué recuerdos!

IPTables ¡qué recuerdos!

Comentando con los alumnos de seguridad las IPTables, hace unos días rescaté unos cuantos scripts de los que tenía hechos cuando trabajaba con ellas en lugar de con UTM’s para pasárselas a un alumno interesado en el tema.

Eso me hizo recordar esos tiempos de «picar» todas y cada una de las reglas necesarias a mano. La verdad es que era un poco pesado configurar un router/firewall completo así,  pero se conseguía un control total sobre todas las comunicaciones que entraban y salían de la empresa, así como de las redirecciones de puertos, NAT y demás configuraciones. Y además ¡¡lo habías hecho tu mismo!!

La costumbre era poner en monopuesto el router del proveedor de turno y colocar detrás un equipo con Linux con varias tarjetas de red (desde 2 el más simple hasta 5 o 6 dependiendo de la finalidad del mismo) que pasaría a ser el router/firewall de esa/esas ADSL. Podía haber más de una y poder hacer balanceo de carga, usarla como failover,…

De hecho, en una de las versiones más divertidas que hice, mediante comando ping controlaba las conexiones de las ADSL (con sus tiempos prudenciales y demás comprobaciones extras) y si detectaba la caída del enlace, los enrutaba a todos hacia un módem 3G USB. Seguía comprobando el estado de la línea y cuando se restauraba se volvía a enrutar el tráfico por las líneas convencionales. El enlace 3G no es que fuese una maravilla, pero podían navegar mientras se restauraba la conexión.

Otro ejemplo de las cosas interesantes que se podían hacer con estos equipos, es que hay una parte en la cuál se rebota el correo de un comercial que trabajaba en remoto al cuál su proveedor de Internet le tenía el puerto 25 «capado». Así conectando al puerto 8000 del equipo Linux, cambiado la IP de origen del paquete y reenviando hacia el puerto 25 del servidor de correo, se consigue que dicho servidor nos conteste el correo el cuál le pasamos al portátil sin problema.

Se hace algo parecido con un RDP que se conectaba a dicho Linux para ser rebotado mediante una MPLS a otra sede.

Importante la parte también de permitir las conexiones que se están estableciendo o ya están establecidas. Así cada vez que se agrega o modifica una nueva regla y se reinicia el script para que tome los cambios, no tira la conexión a los que ya están trabajando.

Os dejo el script completo por si os sirve para vuestras pruebas. Incluye también la cabecera necesaria para crear un servicio que autoarranque en el inicio una vez que haya arrancado la red y el sistema de archivos (necesarios para poder hacer correr dicho servicio de reglas IPTables).

He cambiado alguna IP pública por XXX.XXX.XXX.XXX, no me lo tengáis en cuenta ;-D.

También hay un detalle para los más puristas. En lugar de utilizar MASQUERADE para enmascarar la red interna, se utiliza un SNAT (source NAT) con la IP pública. ¿Sabríais decirme por qué?

Un saludo y hasta la próxima.

!/bin/sh
#
### BEGIN INIT INFO
# Provides: Reglas IPTables
# Required-Start: $network $local_fs
# Required-Stop: $network
# Default-Start: 3 5
# Default-Stop: 0 1 2 6
# Short-Description: Reglas IPTables
# Description: Reglas IPTables
### END INIT INFO
#
. /etc/rc.status

# Reset status of this service
rc_reset

case "$1" in
start)
echo "Iniciando Reglas IPTables "

#Borrado de todas las reglas anteriores
iptables -F
iptables -X
iptables -Z
iptables -t nat -F

#Politica por defecto DROP (Todo DENEGADO)
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT

#Permitir el paso de las ip's de administradores hacia todos los sitios y al firewall
iptables -A FORWARD -s 192.168.46.45 -j ACCEPT
iptables -A FORWARD -d 192.168.46.45 -j ACCEPT
iptables -A FORWARD -s 192.168.46.235 -j ACCEPT
iptables -A FORWARD -d 192.168.46.235 -j ACCEPT
iptables -A INPUT -s 192.168.46.45 -j ACCEPT
iptables -A OUTPUT -d 192.168.46.45 -j ACCEPT
iptables -A INPUT -s 192.168.46.235 -j ACCEPT
iptables -A OUTPUT -d 192.168.46.235 -j ACCEPT

#Permitimos ping
iptables -A INPUT -p icmp -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT
iptables -A FORWARD -p icmp -j ACCEPT

#Permitimos el forward
echo 1 > /proc/sys/net/ipv4/ip_forward

#Enmascaramos la red interna para salir al exterior
iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to XXX.XXX.XX.X

#Mantener abiertas las conexiones ya establecidas
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

#Acceso RDP Servidor XXXXXX
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 3389 -j DNAT --to 192.168.46.58:3389
iptables -A FORWARD -p tcp -s 192.168.46.58 --sport 3389 -j ACCEPT
iptables -A FORWARD -p tcp -d 192.168.46.58 --dport 3389 -j ACCEPT

#Servidor Http
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 83 -j DNAT --to 192.168.46.72:83
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 82 -j DNAT --to 192.168.46.72:82
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 85 -j DNAT --to 192.168.46.72:85
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 86 -j DNAT --to 192.168.46.72:86
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 8080 -j DNAT --to 192.168.46.72:8080
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 87 -j DNAT --to 192.168.46.72:87
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 88 -j DNAT --to 192.168.46.72:88
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 89 -j DNAT --to 192.168.46.72:89
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 91 -j DNAT --to 192.168.46.72:91
iptables -A FORWARD -p tcp -d 192.168.46.72 --dport 82 -j ACCEPT
iptables -A FORWARD -p tcp -d 192.168.46.72 --dport 83 -j ACCEPT
iptables -A FORWARD -p tcp -d 192.168.46.72 --dport 85 -j ACCEPT
iptables -A FORWARD -p tcp -s 192.168.46.72 --sport 82 -j ACCEPT
iptables -A FORWARD -p tcp -s 192.168.46.72 --sport 83 -j ACCEPT
iptables -A FORWARD -p tcp -s 192.168.46.72 --sport 85 -j ACCEPT
iptables -A FORWARD -p tcp -d 192.168.46.72 --dport 86 -j ACCEPT
iptables -A FORWARD -p tcp -s 192.168.46.72 --sport 86 -j ACCEPT
iptables -A FORWARD -p tcp -d 192.168.46.72 --dport 8080 -j ACCEPT
iptables -A FORWARD -p tcp -s 192.168.46.72 --sport 8080 -j ACCEPT
iptables -A FORWARD -p tcp -s 192.168.46.72 --sport 87 -j ACCEPT
iptables -A FORWARD -p tcp -d 192.168.46.72 --dport 87 -j ACCEPT
iptables -A FORWARD -p tcp -s 192.168.46.72 --sport 88 -j ACCEPT
iptables -A FORWARD -p tcp -d 192.168.46.72 --dport 88 -j ACCEPT
iptables -A FORWARD -p tcp -s 192.168.46.72 --sport 89 -j ACCEPT
iptables -A FORWARD -p tcp -d 192.168.46.72 --dport 89 -j ACCEPT
iptables -A FORWARD -p tcp -s 192.168.46.72 --sport 91 -j ACCEPT
iptables -A FORWARD -p tcp -d 192.168.46.72 --dport 91 -j ACCEPT

#Servidor Http
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 7015 -j DNAT --to 192.168.46.216:80
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 6405 -j DNAT --to 192.168.46.216:6405
iptables -A FORWARD -p tcp -s 192.168.46.216 --sport 80 -j ACCEPT
iptables -A FORWARD -p tcp -d 192.168.46.216 --dport 80 -j ACCEPT
iptables -A FORWARD -p tcp -s 192.168.46.216 --sport 6405 -j ACCEPT
iptables -A FORWARD -p tcp -d 192.168.46.216 --dport 6405 -j ACCEPT

#TS JMG
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 11850 -j DNAT --to 192.168.46.133:11850
iptables -A FORWARD -p tcp -s 192.168.46.133 --sport 11850 -j ACCEPT
iptables -A FORWARD -p tcp -d 192.168.46.133 --dport 11850 -j ACCEPT

#Soporte Remoto JMG
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 11800 -j DNAT --to 192.168.46.133:11800
iptables -A FORWARD -p tcp -s 192.168.46.133 --sport 11800 -j ACCEPT
iptables -A FORWARD -p tcp -d 192.168.46.133 --dport 11800 -j ACCEPT

#SSH J.Leal
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 62628 -j DNAT --to-destination 192.168.46.5:22
iptables -A FORWARD -p tcp -d 192.168.46.5 --dport 22 -j ACCEPT
iptables -A FORWARD -p tcp -s 192.168.46.5 --sport 22 -j ACCEPT

#Permitir envio de correos
iptables -A FORWARD -s 192.168.46.216 -p tcp --dport 25 -j ACCEPT
iptables -A FORWARD -d 192.168.46.216 -p tcp --sport 25 -j ACCEPT

#Permitir consulta de DNS's
iptables -A FORWARD -p udp --dport 53 -j ACCEPT
iptables -A FORWARD -p udp --sport 53 -j ACCEPT

#SQL TAREAS
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 1433 -j DNAT --to 192.168.46.45:1433
iptables -t nat -A PREROUTING -i eth1 -p udp --dport 1434 -j DNAT --to 192.168.46.45:1434
iptables -A FORWARD -p tcp -s 192.168.46.45 --sport 1433 -j ACCEPT
iptables -A FORWARD -p tcp -d 192.168.46.45 --dport 1433 -j ACCEPT
iptables -A FORWARD -p udp -s 192.168.46.45 --sport 1434 -j ACCEPT
iptables -A FORWARD -p udp -d 192.168.46.45 --dport 1434 -j ACCEPT

#REDIRECCION SERVIDOR DE CORREO
iptables -A INPUT -p tcp --dport 8000 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp --dport 8000 -j DNAT --to-destination IPSERVIDORCORREO:25
iptables -t nat -A POSTROUTING -p tcp -d IPSERVIDORCORREO --dport 25 -j SNAT --to-source IPPUBLICALINUX
iptables -A FORWARD -p tcp -d IPSERVIDORCORREO --dport 25 -j ACCEPT

#Routeo a sede Zaragoza
route add -net 192.168.132.0 netmask 255.255.255.0 gw 192.168.46.1

#Conexión a RDP Zaragoza Rebotada
iptables -A INPUT -p tcp --dport 13500 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 3389 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp --dport 13500 -j DNAT --to-destination 192.168.132.82:3389
iptables -t nat -A POSTROUTING -p tcp -d 192.168.132.82 --dport 3389 -j SNAT --to-source 192.1168.46.138
iptables -A FORWARD -p tcp -d 192.168.132.82 --dport 3389 -j ACCEPT

#Abrimos puerto y protocolo GRE VPN
iptables -A INPUT -p tcp --dport 1723 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 1723 -j ACCEPT
iptables -A INPUT -p 47 -j ACCEPT
iptables -A OUTPUT -p 47 -j ACCEPT
iptables -A FORWARD -p 47 -j ACCEPT

#Permitimos el paso de la subred de la vpn al 67
iptables -A FORWARD -s 192.168.200.0/24 -d 192.168.46.67 -j ACCEPT
iptables -A FORWARD -d 192.168.200.0/24 -s 192.168.46.67 -j ACCEPT

#Permitimos web del 64
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT --to-destination 192.168.46.64:80
iptables -A FORWARD -s 192.168.200.0/24 -d 192.168.46.64 -p tcp --dport 80 -j ACCEPT
iptables -A FORWARD -s 192.168.46.64 -d 192.168.200.0/24 -p tcp --sport 80 -j ACCEPT

#Permitimos imprimir en impresora del 61 (192.168.200.2)
iptables -A FORWARD -s 192.168.200.0/24 -d 192.168.46.61 -p tcp --dport 139 -j ACCEPT
iptables -A FORWARD -s 192.168.46.61 -d 192.168.200.0/24 -p tcp --sport 139 -j ACCEPT
iptables -A FORWARD -s 192.168.200.0/24 -d 192.168.46.61 -p tcp --dport 445 -j ACCEPT
iptables -A FORWARD -s 192.168.46.61 -d 192.168.200.0/24 -p tcp --sport 445 -j ACCEPT
iptables -A FORWARD -s 192.168.200.0/24 -d 192.168.46.61 -p udp --dport 137 -j ACCEPT
iptables -A FORWARD -s 192.168.46.61 -d 192.168.200.0/24 -p udp --sport 137 -j ACCEPT
iptables -A FORWARD -s 192.168.200.0/24 -d 192.168.46.61 -p udp --dport 138 -j ACCEPT
iptables -A FORWARD -s 192.168.46.61 -d 192.168.200.0/24 -p udp --sport 138 -j ACCEPT
iptables -A FORWARD -s 192.168.200.0/24 -d 192.168.46.61 -p tcp --dport 135 -j ACCEPT
iptables -A FORWARD -s 192.168.46.61 -d 192.168.200.0/24 -p tcp --sport 135 -j ACCEPT

#SERVIDOR DE ARCHIVOS
#ENTRAR AL 61 PARA LAS BLACKBERRYS 8081
#OWNCLOUD PUERTO 444
iptables -A FORWARD -s 192.168.46.61 -j ACCEPT
iptables -A FORWARD -d 192.168.46.61 -j ACCEPT
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 8081 -j DNAT --to-destination 192.168.46.61:8081
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 444 -j DNAT --to-destination 192.168.46.61:444

#Oscar
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 3397 -j DNAT --to-destination 192.168.46.45:3399
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 993 -j DNAT --to-destination 192.168.46.45:3399
iptables -A FORWARD -s 192.168.46.45 -p tcp --sport 3399 -j ACCEPT
iptables -A FORWARD -d 192.168.46.45 -p tcp --dport 3399 -j ACCEPT

#GATEWAY DE TERMINAL SERVER 192.168.46.110
iptables -A FORWARD -d 192.168.46.110 -p tcp --dport 443 -j ACCEPT
iptables -A FORWARD -s 192.168.46.110 -p tcp --sport 443 -j ACCEPT
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 443 -j DNAT --to-destination 192.168.46.110:443

# Remember status and be verbose
rc_status -v
;;
stop)
echo "Deteniendo Reglas IPTables "

#Borrado de reglas anteriores
iptables -F
iptables -X
iptables -Z
iptables -t nat -F

#Politica por defecto ACCEPT (Todo aceptado)
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

#No Detenemos el forward
echo 1 > /proc/sys/net/ipv4/ip_forward

# Remember status and be verbose
rc_status -v
;;
restart)
## Stop the service and regardless of whether it was
## running or not, start it again.
$0 stop
$0 start

# Remember status and be quiet
rc_status
;;
status)
echo "Mostrando Estado de Reglas IPTables "
iptables -L
rc_status -v
;;
*)
echo "Uso: $0 {start|stop|status|restart}"
exit 1
;;
esac
rc_exit

Deja un comentario

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.