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, -n
no 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?
sudo
las búsquedas de DNS y si están bloqueadas, el comando será lento. ¿Todos sus otrosiptables
comandos tienen el prefijosudo
?sudo strace …
(desde un shell raíz) para ver en qué está bloqueando.Respuestas:
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á.
fuente
Con
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
eso te asegurará que te conectarás a algún servidor web en lugar de conectarte a alguien.
fuente
-m conntrack
usted puede tener otra "posibilidad" de que los paquetes sean aceptados antes de que se descarten con seguridad. En la máquina cliente, debe tenerlaiptables -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.