
Gosto de editar o arquivo iptables manualmente, mas há algo que me confunde um pouco.
Pelo que entendi do iptables no manual, ele percorre as regras de cima para baixo e, se nenhuma correspondência for possível, será registrado e negado pelas regras padrão na parte inferior.
Tudo certo.
Mas o que isso significa:
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
<accept ssh, ssl, etc>
<log all, deny all>
As cadeias no topo têm a política padrão "aceitar" - esta é apenas uma maneira de dizer que aceitamos os pacotes na filter
tabela, para correspondência posterior? Para mim, depois de ler o manual, parece que ele aceitaria tudo e depois não leria as regras, porque é assim que as regras funcionam por padrão - se alguma coisa corresponder, ele irá parar de ler as regras e então fará o que a política diz. Alguma documentação desse comportamento? Não consigo encontrar nada específico o suficiente.
Eu também vi isso, depois da *filter
tabela:
*filter
:RH-Firewall-1-INPUT - [0:0]
O que dá a capacidade de adicionar suas próprias cadeias e encaminhar outras cadeias para esta cadeia:
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
Mas aqui o "ACCEPT" ou "DROP" não é especificado para esta cadeia, mas em vez disso há um traço (-).
O que me deixa ainda mais confuso – como funciona?
Responder1
A política em uma cadeia integrada determina o que acontece com os pacotes que passam por todas as regras da cadeia sem combinar nenhuma delas com um alvo dispositivo. No seu exemplo acima, os pacotes que percorrem toda a
FORWARD
cadeia sem corresponder a nenhuma regra com um alvo dispositivo serãoACCEPT
eliminados, porque a política da cadeia éACCEPT
.As cadeias definidas pelo usuário não podem ter uma política. Pacotes que passam por uma cadeia definida pelo usuário sem combinar uma regra com um alvo dispositivo retornam para a cadeia da qual foram enviados para a cadeia definida pelo usuário (a "cadeia de chamada") na regra após aquela que enviou eles lá.
Adispositivoalvo é aquele que descarta um pacote; exemplos incluem DROP
, ACCEPT
e MASQUERADE
; os alvos não-dispositivos incluem LOG
e o alvo nulo (é bastante legal ter uma regra que não tenha alvo). Quando um pacote corresponde a uma regra com um alvo dispositivo, o pacote é considerado descartado e nenhum processamento adicional de regra ocorre. Quando um pacote corresponde a uma regra sem um alvo dispositivo, o processamento do pacote continua na próxima regra.
Um corolário importante desta lógica sobre correspondência e disposição de alvos é quevitórias na primeira partida dispositiva. Muitas vezes vemos perguntas sobre SF onde as pessoas têm uma cadeia que diz, por exemplo,
Chain INPUT (policy ACCEPT 210 packets, 22621 bytes)
pkts bytes target prot opt in out source destination
3224K 1330M DROP tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
que contém uma única regra para bloquear o acesso a um servidor web ( tcp dpt:80
). Eles desejam permitir que um único endereço IP externo, digamos 1.2.3.4
, acesse este servidor web, então adicionam uma regra com
iptables -A INPUT -p tcp --dport 80 -s 1.2.3.4 -j ACCEPT
e eles acabam com uma corrente como esta
Chain INPUT (policy ACCEPT 210 packets, 22621 bytes)
pkts bytes target prot opt in out source destination
3224K 1330M DROP tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
0 0 ACCEPT tcp -- * * 1.2.3.4 0.0.0.0/0 tcp dpt:80
Como você pode ver, a contagem de pacotes nessa última regra é zero -e eles sempre serão zero. Nenhum pacote pode corresponder à última regra sem ter correspondido ao anterior, e o anterior é um dispositivo ( DROP
), portanto, nenhum pacote alcançará a última regra.
A maneira de lidar com isso corretamente égaranta que suas exceções venham antes de suas regras, assim:
Chain INPUT (policy ACCEPT 210 packets, 22621 bytes)
pkts bytes target prot opt in out source destination
20 875 ACCEPT tcp -- * * 1.2.3.4 0.0.0.0/0 tcp dpt:80
3224K 1330M DROP tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
Agora, as aceitações excepcionais são tratadas primeiro, depois outros pacotes do servidor web que não vêm do servidor excepcional são tratados e descartados e, finalmente, a política de cadeia cuida de todos os outros pacotes e os aceita.