Elimine fragmentos IP de um determinado protocolo

2

Quando conntrack está ativo, a pilha do iptables nunca vê um pacote IP fragmentado, apenas o remontado ( source ), portanto, o teste -f nunca corresponde.

Se eu quiser bloquear qualquer fragmento, posso definir ipfrag_high_thresh ou ipfrag_time a 0 ( source ), mas isso eliminaria qualquer tipo de fragmento. Há algo que eu possa fazer se eu quiser descartar fragmentos de um determinado protocolo IP?

    
por Lorenzo Pistone 16.10.2013 / 00:07

2 respostas

2

Eu vejo duas maneiras de atingir seu objetivo, dependendo de suas necessidades.

Você pode deixar a remontagem seguir seu curso e, após a remontagem bem-sucedida, soltar todo o pacote. Isso funciona somente se o pacote reagrupado estiver sobre a interface MTU (caso contrário, você não será capaz de distinguir entre pacotes remontados e “normais”). Se os pacotes não puderem ser remontados com sucesso, eles serão descartados de qualquer maneira, mas com uma sobrecarga de CPU maior.

A outra maneira é modificar a origem e fazer com que nf_defrag_ipv4 ignore os pacotes do (s) protocolo (s) que você deseja manipular diretamente. Uma rápida olhada sugere que isso deve funcionar, já que já existe uma opção ( IP_NODEFRAG ) disponível para soquetes RAW que permite ignorar o código de reagrupamento.

Para ser honesto, eu também adoraria ter mais controle sobre essa parte da filtragem, então tentarei corrigir o problema.

    
por 04.09.2015 / 00:54
1

Gostaria de saber se você pode usar a tabela "raw" do netfilter, que vem antes da maioria dos ganchos de rastreamento de conexão. Ele tem um alvo "NOTRACK" que você pode usar para isentar certos pacotes da conntrack, ou talvez a própria condição -f funcione com --table raw .

    
por 24.12.2013 / 21:50