IPTables: permite solo tráfico de rangos específicos

IPTables: permite solo tráfico de rangos específicos

Estoy intentando bloquear todo el tráfico a un servidor web, excepto el de algunas subredes definidas. Revisé numerosas publicaciones y creí que tenía iptables configurado correctamente, pero por alguna razón todavía se puede acceder al sitio fuera de las subredes que definí en el conjunto de reglas. ¿Alguien puede arrojar algo de luz sobre lo que pude haber hecho mal? He establecido que eliminar la regla 3 impide que se pueda acceder al sitio. El sitio en sí se encuentra en 10.10.0.0/16.

Chain INPUT (policy DROP 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 ACCEPT     all  --  any    any     10.10.0.0/16         anywhere            
2        0     0 ACCEPT     all  --  any    any     172.30.0.0/16        anywhere            
3        0     0 ACCEPT     all  --  lo     any     anywhere             anywhere            

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 ACCEPT     all  --  any    lo      anywhere             anywhere    

El objetivo será agregar varias IP públicas a la lista blanca y bloquear el sitio para que solo sea accesible para algunos.

Se agregaron reglas de la siguiente manera:

iptables -I INPUT -i lo -j ACCEPT
iptables -I OUTPUT -o lo -j ACCEPT
iptables -I INPUT -s 10.10.0.0/16 -j ACCEPT
iptables -I INPUT -s 172.30.0.0/16 -j ACCEPT
iptables -P INPUT DROP

Respuesta1

Elorden de reglasasuntos en iptables. Al usar iptables -Aestás agregando reglas.al finaldel conjunto de reglas. Pero iptables -Iinserta una regla encima del conjunto de reglas, a menos que especifique un número de línea (no lo ha hecho). Como resultado, las reglas no se evalúan en el orden previsto.

Aquí hay una configuración de muestra que debería funcionar, segúnesta publicación. Elimine sus reglas antes para evitar duplicaciones.

iptables -P FORWARD DROP
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -s 10.10.0.0/16 -j ACCEPT
iptables -A INPUT -s 172.30.0.0/16 -j ACCEPT
# add some more whitelisting rules here
iptables -P INPUT DROP # Drop everything we don't accept

La tercera regla es importante:

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

de lo contrario, su servidor no recibirá respuestas a las conexiones que inició, como por ejemplo las solicitudes de DNS.

Como nota al margen, iptables funciona para IPv4 pero no para IPv6, por lo que si su servidor está habilitado para IPv6, es posible que tenga clientes que se conecten usandoIPv6. Esto es posible si se conectan por nombre de host en lugar de dirección IP, y si el nombre de host se resuelve en una dirección IPv6 válida en su servidor. Probablemente ya lo sepas, pero muchas personas aún no saben que iptables filtra el tráfico (y los ataques) IPv6. Luego también agregaría ip6tablesreglas similares si fuera apropiado para su configuración.

información relacionada