As regras em um firewall de filtro de rede (iptables) são verificadas sequencialmente e o destino do pacote (ACEITAR, DESCER, REJEITAR etc.) é determinado em uma primeira partida.
Ao tornar o firewall completo e com a primeira regra típica, -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
a grande maioria do tráfego legítimo para o servidor é aceita depois de passar apenas essa regra. Esse tráfego não precisa atravessar outras regras.
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 agora precisa validar são as novas conexões explicitamente.
Ou seja, compare um firewall para um servidor da web público com acesso a um punhado de webmasters em 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, apenas atingindo a primeira regra. Dos pacotes que não correspondem a essa regra, a maioria deve ser de novas conexões com o site, o módulo de multiportas pode conceder acesso ao HTTP ou HTTPS em uma única regra. Os webmasters efetuam login em várias estações de trabalho com endereços fixos usando ssh e sftp e todo o resto é 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, todo e qualquer pacote para seu servidor da Web HTTP precisaria ser verificado em relação a 5 regras antes do acesso ser 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.
related/established
linha está presente, mas as regras subsequentes não afirmamNEW
?NEW
significa que o pacote iniciou uma nova conexão.É tratado pelos módulos do kernel chamados
ip_conntrack_*
que tornam seu Firewall com estado . Firewalls com monitoração de estado podem assistir a fluxos de tráfego.Se você apenas especificar o número do protocolo e da porta, o seu Firewall não será com estado, mas sem estado. Significa que apenas restringe ou bloqueia pacotes. Esse tipo de firewall não tem conhecimento dos fluxos de dados.
Um bom exemplo é o FTP: o FTP ativo usa a porta 21 para o canal de controle, mas depois usa a porta 20 para o canal de dados. No caso de um firewall com estado, você não precisa abrir explicitamente a porta 20 porque está relacionada a uma nova conexão estabelecida anterior na porta 21.
Aqui está um extrato da
iptables
página de manual:fonte
O conjunto de regras Acima permitirá que os pacotes para a porta TCP 22, com um estado de
INVALID
meioACCEPT
/unix/57423/how-to-understand-why-the-packet-was-considered-invalid-by-the-iptables
A afirmação de STATE
NEW
garante que os pacotes INVALID não sejam acidentalmente aceitos.E para esclarecer os significados:
fonte