IPTABLES es lento después de agregar '-A INPUT -j DROP' a la lista de reglas

8

Recién estoy comenzando con iptables y me topé con algo que realmente no entiendo.

Para su información, seguí las instrucciones de IptablesHowTo de Ubuntu wiki .

Las tablas nat y mangle están vacías, solo estoy trabajando con la tabla de filtro en este momento.

El problema

Si agrego las siguientes reglas de iptables:

iptables -A INPUT -p tcp --dport ssh -j ACCEPT
iptables -A INPUT -j DROP

... entonces todavía tengo acceso a mi máquina a través de ssh, sin embargo, todos los comandos de iptables tardan aproximadamente un minuto o dos en ejecutarse. No es un problema de DNS, -nno lo cambia.

La solución

Si enjuago la tabla y agrego estas tres reglas, todo funciona bien:

sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport ssh -j ACCEPT
iptables -A INPUT -j DROP

¿Alguien puede explicarme por qué la primera regla tiene un impacto tan grande en iptables? Entiendo que permite que las sesiones establecidas reciban tráfico, pero ¿por qué lo necesito si ssh está abierto?

mohrphium
fuente
En algunos casos, sudolas búsquedas de DNS y si están bloqueadas, el comando será lento. ¿Todos sus otros iptablescomandos tienen el prefijo sudo?
Ladadadada
Ejecute sudo strace …(desde un shell raíz) para ver en qué está bloqueando.
Gilles 'SO- deja de ser malvado'

Respuestas:

3

Está realizando una búsqueda de DNS y, dado que la respuesta está bloqueada, lleva un tiempo de espera.

Intente hacer iptables -n ... para evitar la búsqueda de DNS.

El conntrack permite que se reciban conexiones en el puerto efímero que se creó para las respuestas a las solicitudes iniciadas por su máquina (en este caso, la solicitud de DNS). Sin permitir conexiones ESTABLECIDAS o RELACIONADAS, incluso las respuestas a sus solicitudes están bloqueadas.

EG: Si intenta ir a un sitio web, a pesar de que podría enviar la solicitud del sitio web, la respuesta del sitio web se bloqueará.

usuario2371745
fuente
4

Con

iptables -A INPUT -p tcp --dport ssh -j ACCEPT
iptables -A INPUT -j DROP

su máquina descartará cada paquete entrante a menos que provenga del puerto SSH. Es una buena idea si desea que esa máquina se comunique solo a través de SSH. De lo contrario, debe agregar

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

eso te asegurará que te conectarás a algún servidor web en lugar de conectarte a alguien.

edmz
fuente
Si bien es un buen consejo en general, esto no responde a la pregunta que realmente se estaba haciendo.
Shadur
@Shadur conntrack hace la diferencia. Esto se opone a soltar todo.
Nils
Si envía una solicitud genérica a un servidor web a través de una máquina como en este caso, esta última no mostrará nada ya que el firewall no permite enviar paquetes a una máquina con una conexión establecida.
edmz
Pero incluso si solo permitiera ssh usando solo los dos primeros comandos, ¿por qué los comandos de iptables tardan tanto más que con la regla conntrack ... Y la regla conntrack significa que podría conectarme a un servidor web? ¿No haría eso que la regla de caída sea inútil?
mohrphium
No, no lo haría. Con -m conntrackusted puede tener otra "posibilidad" de que los paquetes sean aceptados antes de que se descarten con seguridad. En la máquina cliente, debe tenerla iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT si quiere ver alguna respuesta. En el lado del servidor, solo permita la conexión entrante SSH y descarte todo lo demás (si el servidor actúa solo como SSH). Espero que todo esté claro.
edmz