Ao usar as regras de firewall do iptables, por que afirmar NOVO estado em todas as portas permitidas?

23

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

Qual é o motivo para declarar NOVO? Se uma conexão não é NOVA, acho que é RELATED, portanto a regra de porta específica não será executada. Então, por que definir explicitamente as portas de serviço com NEW e não apenas protocoll e número da porta?

dronus
fonte

Respostas:

21

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 ACCEPTa 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.

HBruijn
fonte
1
Uma excelente resposta (+1 de mim!), Exceto que você diz "o acesso é permitido na primeira partida ". Se a primeira partida for DROP ou REJECT, isso não permitirá acesso; se for um LOG, você precisará continuar encontrando uma correspondência posterior; e se cadeias personalizadas se envolverem, as coisas podem ficar bastante barrocas. Eu diria que " o destino do pacote é determinado com base na primeira correspondência ".
MadHatter suporta Monica
5
Você pode refletir sobre o caso em que a related/establishedlinha está presente, mas as regras subsequentes não afirmam NEW?
Daniel Widrick 27/02
13

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 iptablespágina de manual:

NOVO - o que significa que o pacote iniciou uma nova conexão ou se associou a uma conexão que não viu pacotes nas duas direções.

ESTABELECIDO - o que significa que o pacote está associado a uma conexão que viu pacotes nas duas direções.

RELATED - significa que o pacote está iniciando uma nova conexão, mas está associado a uma conexão existente, como uma transferência de dados FTP ou um erro ICMP.

krisFR
fonte
1
Qual mecanismo 'associará' a porta 20 à porta 21? Uma conexão IP aberta pode ser transferida para outra porta?
dronus
nf_conntrack_ftp.ko
Mateusza
7
-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 Acima permitirá que os pacotes para a porta TCP 22, com um estado de INVALIDmeioACCEPT

Inválido : se nenhum dos estados anteriores se aplicar, o pacote estará no estado INVALID. Isso pode ser causado por vários tipos de análises de rede furtivas ou pode significar que você está ficando sem entradas do CONNTRACK (que você também deve ver declarado em seus registros). Ou pode simplesmente ser inteiramente benigno.

/unix/57423/how-to-understand-why-the-packet-was-considered-invalid-by-the-iptables


A afirmação de STATE NEWgarante que os pacotes INVALID não sejam acidentalmente aceitos.

E para esclarecer os significados:

  • NOVO : Este é um novo Connections
  • ESTABELECIDO : Este é um pacote envolvido em uma conexão atual
  • RELATED : Esta é uma nova conexão, mas foi predicada por uma conexão existente
  • INVÁLIDO : Nenhuma das opções acima se aplica.
Daniel Widrick
fonte