Estou começando a me aprofundar no iptables pela primeira vez hoje, então peço desculpas por qualquer ingenuidade.
Para referência, estou usando
- Ubuntu 22.04.4 LTS (Jammy Medusa)
- iptables v1.8.7 (nf_tables)
- ufw 0.36.1
Agora, eu sei (ou melhor, aprendi recentemente) que o ufw é apenas um wrapper para o iptables. Decidi que queria entender o que estava acontecendo por baixo do capô, então comecei a ler e bisbilhotar. O que não consigo entender é como o iptables lida com pacotes em conjunto com o ufw. Vamos começar com a INPUT
cadeia, que acredito ser onde qualquer pacote recebido começaria.
Chain INPUT (policy DROP)
target prot opt source destination
ufw-before-logging-input all -- anywhere anywhere
ufw-before-input all -- anywhere anywhere
ufw-after-input all -- anywhere anywhere
ufw-after-logging-input all -- anywhere anywhere
ufw-reject-input all -- anywhere anywhere
ufw-track-input all -- anywhere anywhere
Sinto que se estou entendendo tudo corretamente, então esta primeira linha aqui ufw-before-logging-input all -- anywhere anywhere
significa que qualquer pacote que chegar, em qualquer porta, de qualquer lugar, será repassado para a ufw-before-logging-input
cadeia. Se ele voltar dessa cadeia sem ser aceito, descartado ou rejeitado, então será passado para a próxima cadeia, neste caso ufw-before-input
, e assim por diante, até que seja aceito, descartado ou rejeitado (viz. , até encontrar uma ação de encerramento).
Ok, então vamos dar uma olhada na primeira cadeia para a qual qualquer pacote será repassado, ufw-before-logging-input
.
Chain ufw-before-logging-input (1 references)
target prot opt source destination
Literalmente nada aqui, então passamos para a ufw-before-input
cadeia
Chain ufw-before-input (1 references)
target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ufw-logging-deny all -- anywhere anywhere ctstate INVALID
DROP all -- anywhere anywhere ctstate INVALID
ACCEPT udp -- anywhere anywhere udp spt:bootps dpt:bootpc
ufw-not-local all -- anywhere anywhere
ACCEPT udp -- anywhere host.name udp dpt:mdns
ACCEPT udp -- anywhere w.x.y.z udp dpt:num
ufw-user-input all -- anywhere anywhere
E é aqui que estou confuso. A primeira linha parece que aceitamos qualquer pacote, ACCEPT all -- anywhere anywhere
mas... minhas regras de firewall funcionam, elas bloqueiam o tráfego.
Então, o que estou perdendo aqui?
(Observação, tentei postar isso no Stackoverflow , mas eles me enviaram aqui. Apenas incluindo isso caso você pesquise no Google e veja que está duplicado em outro lugar.)
A
-v
opção para detalhado :Você provavelmente usou algo como:
que não exibirá interfaces. Em vez disso com
-v
:Pode-se ver que a regra ACCEPT é para interface de entrada
lo
: para permitir tráfego de loopback incondicional e somente dalo
interface. Qualquer outra coisa continua a travessia da cadeia.De qualquer forma, este formato não é realmente adequado para reprodutibilidade, especialmente ao exibir um conjunto de regras em perguntas/respostas. Ainda pode ser útil verificar o status de correspondências ou alvos especiais (por exemplo: com estado memorizado). É melhor usar ou
iptables -S
(iptables-save
para todo o conjunto de regras ou pelo menos uma tabela inteira).iptables -S
também pode aceitar a-v
opção de exibir contadores entre outros estados. Da mesma forma para exibir contadores comiptables-save
useiptables-save -c
.iptables-save
tem como objetivo fornecer uma saída adequada paraiptables-restore
permitir salvar e restaurar conjuntos de regras. Também usar duas vezes-v
(por exemplo-vv
:)iptables
exibe informações adicionais de depuração.