
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 -A
estás agregando reglas.al finaldel conjunto de reglas. Pero iptables -I
inserta 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 ip6tables
reglas similares si fuera apropiado para su configuración.