Trata-se de como entender as cadeias encontradas na configuração padrão iptables
em um roteador doméstico típico executando o OpenWrt (um Linux simplificado para dispositivos roteadores), mas que no final das contas pode não ser específico para esse sistema em particular.
Vamos nos concentrar no INPUT
main chain aqui e desconsiderar FORWARD
e OUTPUT
do mesmo table , bem como PREROUTING
e POSTROUTING
da tabela nat
.
Fazer um iptables -L -t filter
mostra um grande número de regras. Eu rearranjei a saída abaixo para torná-la menos intimidante e na tentativa de identificar as partes que dificultam a minha compreensão.
Existem três cadeias incorporadas na tabela filter
, que aparecem no topo da saída. (Eu especifiquei -v
porque acho menos confuso .)
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
1260 133K ACCEPT all -- any any anywhere anywhere ctstate RELATED,ESTABLISHED
8 544 ACCEPT all -- lo any anywhere anywhere
787 41632 syn_flood tcp -- any any anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN
13012 1249K input_rule all -- any any anywhere anywhere
13012 1249K input all -- any any anywhere anywhere
Chain FORWARD … # not considering this chain here
Chain OUTPUT … # not considering either
Como você pode ver, recortei as cadeias mencionadas de FORWARD
e OUTPUT
para se concentrar em INPUT
. (Eu poderia ter escolhido qualquer um dos outros dois como eles são construídos de uma maneira semelhante.)
INPUT
tem uma política de ACCEPT
e especifica cinco regras. Os três primeiros são claros para mim. Primeiro, aceite coisas "estabelecidas" ou "relacionadas". (Por exemplo, aceite a resposta de uma solicitação HTTP ou DNS que eu fiz.) Segundos, aceite tudo que estiver indo para o dispositivo de loopback ( 127.0.0.1
). (Isso só pode vir do próprio localhost, e eu quero que isso funcione. Não faria sentido de outra forma.) Terceiro, tenha uma proteção contra o Synflood. (Que protege contra um certo tipo de ataque.)
Chain syn_flood (1 references)
pkts bytes target prot opt in out source destination
787 41632 RETURN tcp -- any any anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN limit: avg 25/sec burst 50
0 0 DROP all -- any any anywhere anywhere
Mas há duas regras que se ramificam em duas cadeias chamadas input
e input_rule
, e a pergunta é: por que existem duas delas e qual delas você deve usar para quê?
Vamos detalhar a pilha de saltos dessas regras.
Chain input_rule (1 references)
pkts bytes target prot opt in out source destination
Não há nada aqui ainda. É para mim adicionar regras. Mas que tipo de regras?
Chain input (1 references)
pkts bytes target prot opt in out source destination
6315 482K zone_lan all -- br-lan any anywhere anywhere
6697 767K zone_wan all -- pppoe-wan any anywhere anywhere
Ok, este tem coisas, indo mais longe na LAN e na WAN, o que faz sentido para um roteador doméstico.
Chain zone_lan (1 references)
pkts bytes target prot opt in out source destination
6315 482K input_lan all -- any any anywhere anywhere
6315 482K zone_lan_ACCEPT all -- any any anywhere anywhere
Chain zone_wan (1 references)
pkts bytes target prot opt in out source destination
0 0 ACCEPT udp -- any any anywhere anywhere udp dpt:bootpc
0 0 ACCEPT icmp -- any any anywhere anywhere icmp echo-request
6697 767K input_wan all -- any any anywhere anywhere
6697 767K zone_wan_REJECT all -- any any anywhere anywhere
Como você pode ver, cada uma dessas regras aumenta ainda mais a pilha para regras mais definidas pelo usuário.
Chain input_lan (1 references)
pkts bytes target prot opt in out source destination
Chain zone_lan_ACCEPT (2 references)
pkts bytes target prot opt in out source destination
4 1322 ACCEPT all -- any br-lan anywhere anywhere
6315 482K ACCEPT all -- br-lan any anywhere anywhere
Qual é o objetivo de input_lan
? O outro é provavelmente aceitar pacotes, mas isso me faz pensar ... a política para INPUT
é ACCEPT
, então por que repetir ACCEPT
aqui?
Agora, insira a partir da WAN. Se você rolar para cima, poderá ver que algumas coisas sobre UDP e ICMP são aceitas. Isso é para DHCP e, basicamente, ping
. Isso é claro. O que é menos claro, novamente, é o material parcialmente vazio seguindo essas regras:
Chain input_wan (1 references)
pkts bytes target prot opt in out source destination
Mesma pergunta que para input_lan
.
Chain zone_wan_REJECT (2 references)
pkts bytes target prot opt in out source destination
0 0 reject all -- any pppoe-wan anywhere anywhere
6697 767K reject all -- pppoe-wan any anywhere anywhere
Ok, isso é entrada da WAN (não estabelecida ou relacionada), e sim, provavelmente queremos rejeitá-la, e agora há dois tipos de rejeição aqui, um fechando o soquete ( tcp-reset
) para tentativas de conexão TCP e outro via resposta ICMP ( icmp-port-unreachable
) para mensagens ICMP (pense em ping
).
Chain reject (5 references)
pkts bytes target prot opt in out source destination
595 31817 REJECT tcp -- any any anywhere anywhere reject-with tcp-reset
4858 582K REJECT all -- any any anywhere anywhere reject-with icmp-port-unreachable
Este último é um pega-tudo. Então nada será aceito aqui.
Por fim, aqui está uma lista de outras cadeias encontradas na tabela filter
que não são referenciadas na cadeia INPUT
incorporada na tabela net
. Apenas por completude, e para ver que eles parecem ter construções análogas.
# other chains, not reached from the INPUT chain, so truncated and moved here
Chain forward (1 references)
Chain forwarding_lan (1 references)
Chain forwarding_rule (1 references)
Chain forwarding_wan (1 references)
Chain nat_reflection_fwd (1 references)
Chain output (1 references)
Chain output_rule (1 references)
Chain reject (5 references)
Chain zone_lan_DROP (0 references)
Chain zone_lan_REJECT (1 references)
Chain zone_lan_forward (1 references)
Chain zone_wan_ACCEPT (2 references)
Chain zone_wan_DROP (0 references)
Chain zone_wan_forward (1 references)
Então, bem. Desculpe por este longo post. Houve algumas perguntas ao longo do caminho. Eu não sei como colocar isso de maneira mais fácil ou mais curta. Esta configuração de iptables
não é exatamente fácil de entender porque não há detalhes claros espalhados aqui e ali. Espero que você possa esclarecer isso e explicar o raciocínio subjacente. Obrigado pela sua atenção.