Ao usar regras de firewall iptables, por que declarar o estado NEW em todas as portas permitidas?

21

Muitas vezes vejo iptables configurados para permitir todos os pacotes para conexões RELACIONADAS e as portas de serviço específicas para NOVAS conexões.

Qual é o motivo para afirmar NEW? Se uma conexão não é nova, é relacionada, eu acho, então a regra de porta específica não executará nenhuma delas. Então, por que definir explicitamente as portas de serviço com NEW e não apenas com o número de porta e protocolo?

    
por dronus 27.02.2014 / 14:18

3 respostas

19

As regras em um firewall de filtros de rede (iptables) são verificadas sequencialmente e o destino do pacote (ACCEPT, DROP, REJECT etc.) é determinado em uma base de primeira partida.

Ao tornar o firewall statefull e a primeira regra, o típico -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT da grande maioria do tráfego legítimo para o seu servidor é aceito após passar apenas essa regra única. Esse tráfego não precisa passar por nenhuma outra regra.

Dependendo do tamanho da sua base de regras, isso pode significar uma diferença significativa no desempenho do seu firewall.

O único tráfego que o firewall precisa validar agora são as novas conexões explicitamente.

Ou seja. comparar um firewall para um servidor da Web público com acesso a um punhado de webmasters de suas estações de trabalho:

-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp -m multiport --dports 80,443 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -m iprange --src-range 10.9.8.7-10.9.8.10 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited

Aproximadamente 99% dos pacotes legítimos pertencerão a conexões estabelecidas, atingindo apenas a primeira regra. Dos pacotes que não correspondem a essa regra, a maioria deve ser novas conexões ao seu site, o módulo multiportas pode conceder acesso a HTTP ou HTTPS em uma única regra. Os webmasters fazem login a partir de várias estações de trabalho com endereços fixos usando ssh e sftp e tudo o mais é rejeitado.

Um firewall em que as regras são ordenadas logicamente pela porta TCP:

-A INPUT -p tcp  -m tcp --dport 22  --source 10.9.8.7 -j ACCEPT
-A INPUT -p tcp  -m tcp --dport 22  --source 10.9.8.8 -j ACCEPT
-A INPUT -p tcp  -m tcp --dport 22  --source 10.9.8.9 -j ACCEPT
-A INPUT -p tcp  -m tcp --dport 22  --source 10.9.8.10 -j ACCEPT
-A INPUT -p tcp  -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp  -m tcp --dport 443 -j ACCEPT

Aqui, o todo e qualquer pacote para o seu servidor da Web HTTP precisaria ser verificado em relação a 5 regras antes que o acesso seja concedido. E com mais serviços em execução em um servidor que pode facilmente se tornar 50 regras ou muito mais quando você, por exemplo, usaria produtos fail2ban ou similares.

    
por 27.02.2014 / 17:01
13

NEW significa que o pacote iniciou uma nova conexão.

Ele é gerenciado pelos módulos do kernel chamados ip_conntrack_* , que tornam o stateful do seu Firewall . Os firewalls com informações de estado podem assistir a fluxos de tráfego.

Se você especificar apenas o protocolo e o número da porta, seu Firewall não será stateful, mas sem estado. Significa que apenas restringe ou bloqueia pacotes. Esses tipos de firewalls não estão cientes dos fluxos de dados.

Um bom exemplo é o FTP: o FTP ativo usa a porta 21 para o canal de controle, mas usa a porta 20 para o canal de dados. No caso de um Firewall com monitoração de estado, você não precisa abrir explicitamente a porta 20 porque ela está relacionada a uma nova conexão estabelecida anteriormente na porta 21.

Aqui está um extrato da página iptables man:

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

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.

    
por 27.02.2014 / 14:43
4
-A INPUT -m tcp -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -DROP

O conjunto de regras Above deixará os pacotes na porta TCP 22 com um estado de INVALID a ACCEPT

Invalid: If none of the previous states apply the packet is in state INVALID. This could be caused by various types of stealth network probes, or it could mean that you're running out of CONNTRACK entries (which you should also see stated in your logs). Or it may simply be entirely benign.

link

A afirmação de STATE NEW garante que os pacotes INVALID não sejam acertados por engano.

E para esclarecer os significados:

  • NOVO : esta é uma nova conexão
  • ESTABELECIDO : Este é um pacote envolvido em uma conexão atual
  • RELACIONADO : esta é uma nova conexão, mas foi predicada por uma conexão existente
  • INVALID : Nenhuma das situações acima se aplica.
por 27.02.2014 / 17:32