iptables usa política padrão mesmo que as regras correspondam

iptables usa política padrão mesmo que as regras correspondam

Atualmente estou tentando aprender como iptablesfunciona. Eu li o seguinte:

Quando um pacote chega (ou sai, dependendo da cadeia), o iptables o compara com as regras dessas cadeias, uma por uma. Ao encontrar uma correspondência, ele salta sobre o alvo e executa a ação associada a ele. Se não encontrar uma correspondência com nenhuma das regras, ele simplesmente faz o que a política padrão da cadeia manda. A política padrão também é um alvo.1

Agora configurei minha cadeia INPUT na tabela de filtros assim:

$ iptables -S INPUT
-P INPUT ACCEPT
-A INPUT -i wg0 -j ACCEPT

Executar ping na máquina (10.0.0.1) de outra máquina (10.0.0.2) usando a interface wg0 agora funciona.

Usando iptables -S INPUT -v, também posso ver que a regra corresponde, pois os contadores de pacotes e bytes estão aumentando.

Adicionar um destino de log iptables -I INPUT -i wg0 -j LOG --log-prefix "INPUT-wg0: "confirma isso ainda mais. Agora posso ver os pacotes usando dmesg -w.

No entanto, quando eu defino a política padrão como DROP, nenhum pacote é mais registrado e o ping não é mais possível:

$ iptables -S INPUT
-P INPUT DROP
-A INPUT -i wg0 -j LOG --log-prefix "INPUT-wg0: "
-A INPUT -i wg0 -j ACCEPT

Eu não entendo isso. Achei que o alvo da primeira regra de correspondência seria usado. (O alvo LOG parece ser uma exceção)

As regras correspondiam antes e, portanto, ainda deveriam corresponder mesmo depois que a política padrão foi alterada, certo?

Eu ficaria muito feliz se alguém pudesse explicar issolinkscomportamento para mim.

A saída de iptables-savewhile ping funciona:

# 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

A saída iptables-saveapós alterar a política padrão da cadeia INPUT para DROP e o ping não funciona mais:

# 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

(Existem algumas regras adicionais relacionadas à minha configuração do Wireguard VPN aqui que não mencionei, mas não parecem ser relevantes para minha pergunta de política padrão)

Responder1

Como mencionado em um comentário paraesta resposta, a solução foi permitir também pacotes na interface eth0. Isso faz sentido, pois a interface wg0 é apenas virtual e a interface eth0 é necessária para estabelecer um túnel.

Responder2

As regras são processadas linha por linha. portanto, se houver uma correspondência para uma regra, nenhuma outra regra será processada para esse pacote IP. Se a regra especificar um alvo ACCEPT para um pacote correspondente, o pacote ignora o restante das verificações da regra e poderá continuar até seu destino. Se uma regra especificar um destino DROP, esse pacote terá acesso recusado ao sistema e nada será enviado de volta ao host que enviou o pacote.

Como você afirmou, no seguinte conjunto de regras, Drop é acasalado primeiro e não há nenhum processo adicional para ir para a próxima linha para registrar seus pacotes.

iptables -S INPUT
-P INPUT DROP   ***Matched Line***
-A INPUT -i wg0 -j LOG --log-prefix "INPUT-wg0: "
-A INPUT -i wg0 -j ACCEPT

Agora, se você quiser adicionar log e, ao mesmo tempo, descartar pacotes, algo como isto pode ajudá-lo.

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 mais detalhes, consulte o link abaixo. Como registrar pacotes descartados do firewall IPTables do Linux em um arquivo de log

informação relacionada