Como o iptables reconhece o estado do pacote?

4

Considere estes dois conjuntos de regras:

Defina A

-A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A INPUT -j REJECT
-A OUTPUT -j ACCEPT

Definir B

-A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A INPUT -j REJECT
-A OUTPUT -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT

Anteriormente eu estava com a impressão de que os dois eram funcionalmente os mesmos, no entanto, alguém recentemente comentou comigo:

To have an ESTABLISHED,RELATED connection you have to have a rule that add the connection into the db that this rule looks at. This is done with the NEW rule. Once the connection is accepted it is placed into the db so the ESTABLISHED,RELATED rules can match against it. Without the NEW rules nothing is laced into the db and thus ESTABLISHED,RELATED will never match anything.

Então eu admito que estou um pouco confuso sobre como os componentes internos do iptables operam, exatamente como o iptables faz tagging de pacotes baseado no estado do pacote?

    
por AlexH 20.02.2014 / 12:02

1 resposta

6

Without the NEW rules nothing is laced into the db and thus ESTABLISHED,RELATED will never match anything.

Isso é falso.

Existem cinco estados da terra do usuário (há mais no espaço do kernel) e, embora A conexão ESTABLISHED ou RELACIONADA logicamente precisa começar com um NOVO pacote, você não precisa de nenhuma regra NEW explícita para produzir tal conexão (você precisa de um ACCEPT explícito que implicitamente inclui NOVOS pacotes, entretanto). Siga a lógica e considere os outros quatro estados primeiro, por exemplo:

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -m state --state INVALID -j REJECT --reject-with icmp-net-prohibited
-A INPUT -m state --state INVALID -j REJECT --reject-with icmp-net-prohibited

Eu deixei de fora o NOTRACK, pois isso só pode existir por causa de uma regra anterior de iptables . Adivinha o que resta depois que essas regras foram aplicadas? Apenas novos pacotes. Agora você pode classificar os que quiser. Ele funcionará, eu prometo e anote: sem nenhuma nova regra . Nenhum.

Exactly how does iptables go about tagging packets based on the packet state?

De acordo com a referência anterior , uma conexão é estabelecida assim que uma resposta é enviada. A natureza do protocolo evidentemente entra em jogo aqui um pouco (o kernel também aplica essas regras); por exemplo. quando um pacote SYN TCP NOVO é aceito, um SYN / ACK é enviado em resposta e a conexão é ESTABLISHED; após um FIN / ACK final é extinto.

Como uma conexão é considerada RELACIONADA evidentemente depende mais do protocolo envolvido; basicamente, refere-se a conexões de / para hosts que já possuem uma conexão ESTABLISHED. Observe que às vezes você precisa carregar módulos especiais (por exemplo, para ftp) para que isso funcione.

    
por 20.02.2014 / 14:33