IPTABLES. Comportamiento extraño con Input Drop y sources duplicados.

Buenas tardes,

estoy experimentando con iptables en Debian. La idea que tengo es cerrar completamente la entrada al sistema e ir abriéndola selectivamente a determinadas IPs y puertos.

Para empezar, deniego toda entrada con:

iptables --policy INPUT DROP


Luego, asigno reglas más específicas para que una IP en particular pueda acceder al puerto 8080 y el resto no.

iptables -A INPUT -p tcp --dport 8080 -s 191.168.88.1 -j ACCEPT
iptables -A INPUT -p tcp --dport 8080 -j DROP


El problema es que sólo me funciona si la default policy está en ACCEPT. Si no, no va. Parece que no hace caso de las reglas posteriores...

Otra duda es que si listo las reglas con:

iptables -L -v


1. No sale por ningún lado el puerto 8080, y eso que lo hago en modo "v" (verbose).
2. Si lo hago sin "-n" (resolver por DNS), en el campo source me salen cosas diferentes: "router.lan" y un FQDN aparentemente proveniente de Brasil (.br).
Con el modificador "-n" (no resolver por DNS), me salen esas dos reglas duplicadas (por pruebas que he hecho) con la misma IP .

¿A qué se debe?

Agradezco cualquier ayudita.

Gracias!
banderas20 escribió:Buenas tardes,

estoy experimentando con iptables en Debian. La idea que tengo es cerrar completamente la entrada al sistema e ir abriéndola selectivamente a determinadas IPs y puertos.

Para empezar, deniego toda entrada con:

iptables --policy INPUT DROP


Y la salida, ¿cómo está la salida?

En cualquier caso, es conveniente que permitas el tráfico de loopback, para que no te empieces a encontrar errores raros:

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT


banderas20 escribió:Luego, asigno reglas más específicas para que una IP en particular pueda acceder al puerto 8080 y el resto no.

iptables -A INPUT -p tcp --dport 8080 -s 191.168.88.1 -j ACCEPT
iptables -A INPUT -p tcp --dport 8080 -j DROP


La segunda regla sobra, porque la política de entrada es denegar tráfico.

banderas20 escribió:El problema es que sólo me funciona si la default policy está en ACCEPT. Si no, no va. Parece que no hace caso de las reglas posteriores...


¿Permites el tráfico de regreso? Por eso te he pregiuntado antes, si estableciste una política predeterminada para él.

A mi juicio lo más sencillo para establecer una política de lista blanca es algo así:

iptables -P INPUT DROP
iptables -P OUTPUT DROP

# Permitido el tráfico en la interfaz de loopback.
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# Permitido el tráfico establecido
iptables -A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT

# Reglas para habilitar el tráfico de salida.
# Las que estimes convenientes: DNS, Web, etc.

# Reglas para habilitar el tráfico de entrada.
iptables -A INPUT -p tcp --dport 8080 -s 191.168.88.1 -j ACCEPT



banderas20 escribió:Otra duda es que si listo las reglas con:

iptables -L -v


1. No sale por ningún lado el puerto 8080, y eso que lo hago en modo "v" (verbose).


Porque tienes que poner -n para que no traduzca números de puerto a nombres de servicio: 8080 es http-alt.

banderas20 escribió:2. Si lo hago sin "-n" (resolver por DNS), en el campo source me salen cosas diferentes: "router.lan" y un FQDN aparentemente proveniente de Brasil (.br).
Con el modificador "-n" (no resolver por DNS), me salen esas dos reglas duplicadas (por pruebas que he hecho) con la misma IP .


-n lo único que hace es no resolver IP ni nombres de servicios ¿Qué dos reglas te salen duplicadas? Si salen reglas duplicadas es porque has ejecutado varias veces el mismo comando iptables.

Prueba a ver si te ayuda algo de lo que he dicho y, si no, pega aquí la sadlida de iptables .-vnL.
auxiliar escribió:Y la salida, ¿cómo está la salida?


Chain OUTPUT está todo en ACCEPT

auxiliar escribió:La segunda regla sobra, porque la política de entrada es denegar tráfico.


Entiendo que es redudante. OK.

auxiliar escribió:¿Permites el tráfico de regreso? Por eso te he pregiuntado antes, si estableciste una política predeterminada para él.

Mmmmh... creo que no. ¿cómo sería para mi ejemplo?

auxiliar escribió:Porque tienes que poner -n para que no traduzca números de puerto a nombres de servicio: 8080 es http-alt.

Era eso! OK. Jaja.

auxiliar escribió:Qué dos reglas te salen duplicadas? Si salen reglas duplicadas es porque has ejecutado varias veces el mismo comando iptables.

Los dos accepts con la misma IP. Al principio no me funcionaba y al listarlo, vi que resolvía una dirección rara, así que la volví a añadir.
Si las listo sin resolver, la IP es la misma.
Si las listo resolviendo, el host source es distinto. Por eso me creó confusión y la volví a crear. No entiendo por qué resuelve 2 sources distintos si la IP es la misma (me conectaba desde una cafetería y el server es una VM en modo NAT).

auxiliar escribió:Prueba a ver si te ayuda algo de lo que he dicho y, si no, pega aquí la sadlida de iptables .-vnL.


Lo intentaré, pero antes de salir del servidor hice "iptables-save". Ahora, al volver a iniciar, el listado está vacío y si hago "iptables-restore" se queda pensando indefinidamente...

Muchísimas gracias por tus comentarios!
Hola. Creo que hice un tutorial aqui, no hace mucho tiempo.
Miralo, que si mal no recuerdo, estaba muy bueno y claro.

https://www.elotrolado.net/hilo_arma-tu-propio-firewall-en-linux_2192253
Y esta asi como quieres, todo denegado y solo entra y sale lo que tu quieras.

De paso, te dejo las reglas que estoy usando en uno de mis maquinas.
https://pastebin.com/NYKdik88

Saludos y espero que te sirva para reforzar tu aprendizaje.
1985a escribió:Hola. Creo que hice un tutorial aqui, no hace mucho tiempo.
Miralo, que si mal no recuerdo, estaba muy bueno y claro.

https://www.elotrolado.net/hilo_arma-tu-propio-firewall-en-linux_2192253
Y esta asi como quieres, todo denegado y solo entra y sale lo que tu quieras.

De paso, te dejo las reglas que estoy usando en uno de mis maquinas.
https://pastebin.com/NYKdik88

Saludos y espero que te sirva para reforzar tu aprendizaje.


Genial. Muchísimas gracias!
4 respuestas