
Actualmente estoy tratando de aprender cómo iptables
funciona. He leído lo siguiente:
Cuando un paquete llega (o sale, dependiendo de la cadena), iptables lo compara con las reglas de estas cadenas una por una. Cuando encuentra una coincidencia, salta sobre el objetivo y realiza la acción asociada a él. Si no encuentra una coincidencia con ninguna de las reglas, simplemente hace lo que le indica la política predeterminada de la cadena. La política predeterminada también es un objetivo.1
Ahora he configurado mi cadena de ENTRADA en la tabla de filtros de esta manera:
$ iptables -S INPUT
-P INPUT ACCEPT
-A INPUT -i wg0 -j ACCEPT
Ahora funciona hacer ping a la máquina (10.0.0.1) desde otra máquina (10.0.0.2) usando la interfaz wg0.
Al usar iptables -S INPUT -v
, también puedo ver que la regla coincide ya que los contadores de paquetes y bytes están aumentando.
Agregar un objetivo de registro iptables -I INPUT -i wg0 -j LOG --log-prefix "INPUT-wg0: "
confirma esto aún más. Ahora puedo ver los paquetes usando dmesg -w
.
Sin embargo, cuando ahora configuro la política predeterminada en DROP, ya no se registran paquetes y ya no es posible hacer ping:
$ iptables -S INPUT
-P INPUT DROP
-A INPUT -i wg0 -j LOG --log-prefix "INPUT-wg0: "
-A INPUT -i wg0 -j ACCEPT
No entiendo esto. ¿Pensé que se utilizaría el objetivo de la primera regla de coincidencia? (El objetivo LOG parece ser una excepción)
Las reglas coincidían antes y, por lo tanto, deberían seguir coincidiendo incluso después de que se cambiara la política predeterminada, ¿verdad?
Estaría muy feliz si alguien pudiera explicar esto.Enlacescomportamiento hacia mí.
Salida de iptables-save
mientras funciona el ping:
# Generated by iptables-save v1.8.8 on Fri Dec 23 06:18:42 2022
*mangle
:PREROUTING ACCEPT [31842:2917695]
:INPUT ACCEPT [28740:2664375]
:FORWARD ACCEPT [3102:253320]
:OUTPUT ACCEPT [23607:5802958]
:POSTROUTING ACCEPT [26366:6035482]
COMMIT
# Completed on Fri Dec 23 06:18:42 2022
# Generated by iptables-save v1.8.8 on Fri Dec 23 06:18:42 2022
*raw
:PREROUTING ACCEPT [217327:66651913]
:OUTPUT ACCEPT [102949:46884985]
COMMIT
# Completed on Fri Dec 23 06:18:42 2022
# Generated by iptables-save v1.8.8 on Fri Dec 23 06:18:42 2022
*nat
:PREROUTING ACCEPT [115:6688]
:INPUT ACCEPT [49:2632]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [62:3720]
-A POSTROUTING -s 10.0.0.0/24 -o wg0 -j MASQUERADE
COMMIT
# Completed on Fri Dec 23 06:18:42 2022
# Generated by iptables-save v1.8.8 on Fri Dec 23 06:18:42 2022
*filter
:INPUT ACCEPT [974:119665]
:FORWARD ACCEPT [474:28440]
:OUTPUT ACCEPT [558:81105]
-A INPUT -i wg0 -j ACCEPT
-A FORWARD -i wg0 -o wg0 -j ACCEPT
COMMIT
# Completed on Fri Dec 23 06:18:42 2022
La salida de iptables-save
después de cambiar la política predeterminada de la cadena INPUT a DROP y hacer ping ya no funciona:
# Generated by iptables-save v1.8.8 on Fri Dec 23 06:22:19 2022
*mangle
:PREROUTING ACCEPT [32468:2982249]
:INPUT ACCEPT [29284:2723905]
:FORWARD ACCEPT [3184:258344]
:OUTPUT ACCEPT [23854:5839963]
:POSTROUTING ACCEPT [26695:6077511]
COMMIT
# Completed on Fri Dec 23 06:22:19 2022
# Generated by iptables-save v1.8.8 on Fri Dec 23 06:22:19 2022
*raw
:PREROUTING ACCEPT [217953:66716467]
:OUTPUT ACCEPT [103193:46921614]
COMMIT
# Completed on Fri Dec 23 06:22:19 2022
# Generated by iptables-save v1.8.8 on Fri Dec 23 06:22:19 2022
*nat
:PREROUTING ACCEPT [165:9268]
:INPUT ACCEPT [73:3868]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [71:4260]
-A POSTROUTING -s 10.0.0.0/24 -o wg0 -j MASQUERADE
COMMIT
# Completed on Fri Dec 23 06:22:19 2022
# Generated by iptables-save v1.8.8 on Fri Dec 23 06:22:19 2022
*filter
:INPUT DROP [205:26532]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [26:9060]
-A INPUT -i wg0 -j ACCEPT
-A FORWARD -i wg0 -o wg0 -j ACCEPT
COMMIT
# Completed on Fri Dec 23 06:22:19 2022
(Aquí hay algunas reglas adicionales relacionadas con mi configuración de Wireguard VPN que no mencioné pero que no parecían ser relevantes para mi pregunta sobre política predeterminada)
Respuesta1
Como se menciona en un comentario aesta respuesta, la solución fue permitir también paquetes en la interfaz eth0. Esto tiene sentido ya que la interfaz wg0 es solo virtual y se requiere la interfaz eth0 para establecer un túnel.
Respuesta2
Las reglas se procesan línea por línea. Por lo tanto, si hay una coincidencia para una regla, no se procesarán otras reglas para ese paquete IP. Si la regla especifica un destino ACCEPT para un paquete coincidente, el paquete omite el resto de las comprobaciones de la regla y se le permite continuar hasta su destino. Si una regla especifica un destino DROP, a ese paquete se le niega el acceso al sistema y no se envía nada al host que envió el paquete.
Como usted indicó, en el siguiente conjunto de reglas, Drop se acopla primero y no hay ningún proceso adicional para ir a la siguiente línea para registrar sus paquetes.
iptables -S INPUT
-P INPUT DROP ***Matched Line***
-A INPUT -i wg0 -j LOG --log-prefix "INPUT-wg0: "
-A INPUT -i wg0 -j ACCEPT
Ahora, si desea agregar registros y, mientras tanto, descartar paquetes, algo como esto puede ayudarlo.
iptables -N LOGGING
iptables -A INPUT -j LOGGING
iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables-Dropped: " --log-level 4
iptables -A LOGGING -j DROP
Para obtener más detalles, consulte el siguiente enlace. Cómo registrar paquetes descartados del Firewall IPTables de Linux en un archivo de registro