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.)