De Wiki Nftables ou apenas man nft
você pode usar ip frag-off
. Agora (depois de algumas tentativas e erros) os 3 flags (reservado, DF, MF) são incluídos neste valor nos 3 bits mais altos e devem ser excluídos do teste, precisando de uma operação &
. Então isso:
nft 'add rule ip filter input ip frag-off & 0x1fff != 0 drop'
Faria isso ...
... mas quando o nf_conntrack_ipv4 é carregado (quase sempre), sua parte específica do nf_defrag_ipv4 é registrada em prioridade de gancho -400 , e irá remontar todos os fragmentos. Isso significa que qualquer processamento depois não verá nenhum fragmento. Então sua cadeia tem que se ligar a um valor de prioridade menor que isso. Aqui está um exemplo completo de trabalho:
nft add table filter
nft 'add chain filter predefrag { type filter hook prerouting priority -450; }'
nft 'add rule ip filter predefrag ip frag-off & 0x1fff != 0 drop'
Indiscutivelmente, o primeiro pacote também é um fragmento com offset 0 mas com MF set. Então talvez 0x1fff
deva ser substituído por 0x3fff
para pegá-lo.