El silencio que costó una tarde
Un cortafuegos puede tirar un paquete en silencio (drop) o rechazarlo con un aviso (reject). Esa diferencia decide cuánto tarda alguien en encontrar una avería.
Una desarrolladora no consigue llegar a un servidor de pruebas. La página se queda colgada, espera, lo intenta otra vez y llama al equipo de redes. Un rechazo le habría dicho en un segundo que el servidor estaba en marcha. El silencio no le dijo nada.
Al final de esta lección
Nota
Puedo escribir una regla de cortafuegos y decir qué ve el otro lado.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Cortafuegos | reglas que deciden qué paquetes pasan | |
| Cadena | una lista de reglas, leídas en orden | |
| Política | lo que pasa con un paquete que ninguna regla recoge | |
| Drop | tirar un paquete sin ninguna respuesta | |
| Reject | rechazar un paquete y avisar al remitente | |
| Gancho | el punto del viaje de un paquete donde se lee una cadena | input |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Una cadena es una lista con una política
Un cortafuegos guarda sus reglas en una cadena. Un paquete se compara con las reglas desde arriba. La primera regla que coincide decide, y las demás no se leen.
Si ninguna regla coincide, decide la política. La cadena de la puerta de enlace tiene aquí la política drop: solo deja pasar lo que una regla permite.
Lee la cadena forward de la puerta
sudo ip netns exec gw nft list chain inet filter forwardSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Ejemplo resuelto: leer esa cadena línea a línea
| Línea | En palabras sencillas |
|---|---|
| hook forward ... policy drop | Mira los paquetes que atraviesan, y tira lo que ninguna regla permite |
| ct state established,related accept | Deja pasar las respuestas a conexiones ya abiertas |
| iifname "to-lan" accept | Deja pasar todo lo que llega por el cable de la LAN |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Una regla en una máquina tira un puerto
Ahora escribes una regla tú mismo, en la máquina LAN y no en la puerta de enlace. Va en una tabla aparte, llamada practica, y no se guarda nada.
Primero una tabla, luego una cadena en el gancho input, que ve los paquetes que llegan a esa máquina, y después una regla.
Crea una tabla en la máquina LAN
sudo ip netns exec lan nft add table inet practicaSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Añade una cadena en el gancho input
sudo ip netns exec lan nft add chain inet practica guardia '{ type filter hook input priority 0 ; policy accept ; }'Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Añade una regla que tira el puerto 8081
sudo ip netns exec lan nft add rule inet practica guardia tcp dport 8081 dropSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Pide el puerto 80, sin regla
sudo ip netns exec gw curl --noproxy '*' -sS -m 3 -o /dev/null -w '%{http_code}\n' http://10.0.0.2/Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Pide el puerto 8081, que la regla tira
sudo ip netns exec gw curl --noproxy '*' -sS -m 3 http://10.0.0.2:8081/Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Reject dice no en voz alta
Un drop no da respuesta, así que el remitente espera hasta rendirse. Un reject devuelve un rechazo enseguida, así que el remitente lo sabe al instante.
Drop es más discreto hacia fuera. Reject es más amable con tus propios compañeros, que encuentran la avería antes.
Vacía la cadena
sudo ip netns exec lan nft flush chain inet practica guardiaSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Añade una regla que rechaza el puerto 8081
sudo ip netns exec lan nft add rule inet practica guardia tcp dport 8081 reject with tcp resetSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Llama otra vez al puerto 8081
sudo ip netns exec gw nc -zv -w 2 10.0.0.2 8081Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Un error frecuente
Advertencia
Mucha gente cree que un puerto bloqueado siempre muestra Connection refused. Solo lo hace cuando el cortafuegos hace un reject. Con un drop, el remitente ve que se agota el tiempo, y eso se parece a una máquina apagada.
Gana la primera regla que coincide
Las reglas se leen desde arriba. Una regla añadida con add va abajo del todo. Una regla añadida con insert va arriba del todo.
Ahora dejas pasar a una máquina, la puerta de enlace en 10.0.0.1, hacia el puerto 8081, mientras todos los demás siguen rechazados.
Inserta una regla accept sobre el reject
sudo ip netns exec lan nft insert rule inet practica guardia ip saddr 10.0.0.1 tcp dport 8081 acceptSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Pide otra vez el 8081
sudo ip netns exec gw curl --noproxy '*' -sS -m 3 http://10.0.0.2:8081/Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Borra la tabla de práctica
sudo ip netns exec lan nft delete table inet practicaSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Para ir más lejos: cuenta las coincidencias
Haz otra vez la tabla y la cadena. Añade la regla tcp dport 8081 counter reject with tcp reset y llama tres veces al puerto 8081 con nc.
Lista la tabla con sudo ip netns exec lan nft list table inet practica. ¿Qué dice el contador, y por qué querría uno un equipo de redes? Borra la tabla después.