iptables travessia e as políticas em cadeia, edição manual

2

Eu gosto de editar o arquivo iptables manualmente, mas há algo que me confunde um pouco.

De como entendi o iptables a partir do manual, ele percorre as regras de cima para baixo e, se nenhuma correspondência for possível, ele será registrado e negado pelas regras padrão na parte inferior.

Tudo bem.

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 na parte superior têm a política padrão "aceitar" - isso é apenas uma maneira de dizer que aceitamos os pacotes na tabela filter , 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 coincide, ele parará de ler as regras e então fará o que a política diz. Qualquer documentação desse comportamento? Não consigo encontrar nada específico o suficiente.

Eu também vi isso depois da tabela *filter :

*filter
:RH-Firewall-1-INPUT - [0:0]

Que permite adicionar suas próprias cadeias e direcionar outras cadeias para essa 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 essa cadeia, mas há um traço (-).

O que me deixa ainda mais confuso - como isso funciona?

    
por Nomad 08.05.2014 / 09:50

1 resposta

1
  1. A política de uma cadeia interna determina o que acontece com os pacotes que passam por todas as regras da cadeia sem corresponder a uma única com um destino de dispositivo. Em seu exemplo acima, os pacotes que percorrem toda a cadeia FORWARD sem corresponder a nenhuma regra com um destino de dispositivo serão ACCEPT ed, porque a política da cadeia é ACCEPT .

  2. Cadeias definidas pelo usuário não podem ter uma política. Os pacotes que passam por uma cadeia definida pelo usuário sem corresponder a uma regra com um destino de dispositivo retornam à cadeia da qual foram enviados para a cadeia definida pelo usuário (a "cadeia de chamada") na regra após a que enviou eles lá.

Um alvo dispositivo é aquele que descarta um pacote; exemplos incluem DROP , ACCEPT e MASQUERADE ; alvos não-dispositivos incluem LOG e o alvo nulo (é legal ter uma regra que não tenha destino). Quando um pacote corresponde a uma regra com um destino de dispositivo, o pacote é considerado descartado e não ocorre mais processamento de regra. Quando um pacote corresponde a uma regra sem um destino de dispositivo, o processamento de pacotes continua na próxima regra.

Um corolário importante dessa lógica na correspondência e disposição de alvos é que ganha a primeira correspondência de dispositivo . Demasiadas 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 da Web ( tcp dpt:80 ). Eles desejam permitir que um único endereço IP externo, digamos 1.2.3.4 , acesse esse servidor da Web, então eles 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, o pacote conta que a última regra é zero - e sempre será zero . Nenhum pacote pode igualar a última regra sem ter correspondido a anterior, e a anterior é dispositiva ( DROP ), portanto nenhum pacote alcançará a última regra.

A maneira de lidar com isso corretamente é garantir que suas exceções ocorram 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 de servidores web que não vêm do servidor excepcional são manipulados e descartados e, finalmente, a política de cadeia cuida de todos os outros pacotes e os aceita.

    
por 08.05.2014 / 09:55