iptables: diferença entre pacotes NOVOS, ESTABELECIDOS e RELACIONADOS

38

Parte de um firewall em um servidor:

iptables -A INPUT -p tcp --dport 22 -m state NEW --state -m recent --set

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 100 --hitcount 10 -j DROP

Quando procuro on-line, sempre vejo o NEW sendo usado nessa regra, mas estou tendo dificuldade em entender por que ESTABLISHED e RELATED não estão sendo usados.

Assim:

iptables -A INPUT -p tcp --dport 22 -m state NEW,ESTABLISHED,RELATED --state -m recent --set

iptables -A INPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED,RELATED -m recent --update --seconds 100 --hitcount 10 -j DROP

Alguém pode me explicar quando exatamente um NOVO pacote muda para ESTABLISHED e RELATED?

    
por Kris 19.03.2012 / 22:37

2 respostas

41

Considere um NOVO pacote em uma chamada telefônica antes que o receptor tenha atendido. Um pacote ESTABLISHED é seu, "Olá". E um pacote RELATED seria se você estivesse ligando para falar sobre um e-mail que estava prestes a enviar. (O e-mail sendo RELACIONADO.)

Caso minha analogia não seja tão boa, eu pessoalmente acho que as páginas man lidam bem com ela:

NEW -- meaning that the packet has started a new connection, or otherwise associated with a connection which has not seen packets in both directions, and

ESTABLISHED -- meaning that the packet is associated with a connection which has seen packets in both directions,

RELATED -- meaning that the packet is starting a new connection, but is associated with an existing connection, such as an FTP data transfer, or an ICMP error.

iptables (8) - Página man do Linux

    
por 19.03.2012 / 22:41
11

Somando para servidor e cliente um INPUT restritivo e um OUTPUT aberto, ou seja:

iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT

E de iptables-extensions (8) sobre o exemplo do FTP no modo ativo:

1. NOVO

NEW The packet has started a new connection or otherwise associated with a connection which has not seen packets in both directions.

O cliente na porta 50000 (qualquer porta não privilegiada aleatória) se conecta ao servidor FTP na porta 21 , o servidor precisaria de pelo menos isso para aceitar essa conexão de entrada:

iptables -A INPUT --dport 21 -m state --state NEW -j ACCEPT

2. ESTABELECIDO

ESTABLISHED The packet is associated with a connection which has seen packets in both directions.

Agora, no lado do cliente, ele abriu uma conexão de saída para o servidor na porta 21 usando uma porta local 50000 e ele precisa dos seguintes iptables para permitir que a resposta chegue de server (21) a client (50000) :

sudo iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT

3. RELACIONADOS

RELATED The packet is starting a new connection, but is associated with an existing connection, such as an FTP data transfer or an ICMP error.

Agora, depois que a conexão FTP tiver sido estabelecida e uma conexão de dados estiver prestes a ser executada, o cliente abrirá um soquete do servidor (sim, com o cliente FTP ativo se torna um servidor para a conexão de dados) na porta 60000 O cliente compreensivo marcará essa porta 60000 as RELATED como a outra conexão de 50000->21 ) e enviará esse número de porta para o servidor usando o comando PORT do FTP. Em seguida, o servidor FTP abrirá uma nova conexão da porta 20 para a porta 60000 no cliente e, bem, o cliente agora exige o seguinte para permitir que essa nova conexão seja bem-sucedida:

sudo iptables -A INPUT -m state --state RELATED -j ACCEPT

Por fim, para que isso funcione, você precisa ativar o módulo ip_conntrack_ftp kernel para permitir que o sistema marque conexões / pacotes como RELATED (isto é o meu entendimento, eu não pesquisei muito isso):

modprobe ip_conntrack_ftp
    
por 21.02.2017 / 17:16