Отбрасывать фрагментированные пакеты в nftables
Используя iptables можно блокировать фрагментированные пакеты с этим правилом:
iptables -A INPUT -f -j DROP
Но в nftables нет эквивалента. Есть ли способ сделать это?
2 ответа
Из Nftables Wiki или просто man nft
ты можешь использовать ip frag-off
, Теперь (после нескольких проб и ошибок) 3 флага (зарезервировано, DF, MF) включены в это значение в 3 старших бита и должны быть исключены из теста, нуждающихся в &
операция. Итак, это:
nft 'add rule ip filter input ip frag-off & 0x1fff != 0 drop'
Сделал бы это...
... но когда загружается nf_conntrack_ipv4 (почти всегда), его специфическая часть nf_defrag_ipv4 регистрируется с приоритетом ловушки -400 и собирает все фрагменты. Это означает, что любая обработка после не увидит ни одного фрагмента. Таким образом, ваша цепочка должна перехватить значение приоритета ниже этого. Вот полный рабочий пример:
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'
Возможно, 1-й пакет также является фрагментом со смещением 0, но с установленным значением MF. Так что, может быть 0x1fff
следует заменить на 0x3fff
поймать это.
Пытаться :
iptables-translate -A INPUT -f -j DROP
результат:
nft add rule ip filter INPUT ip frag-off != 0 counter drop
iptables-translate comme (в Debian Debian 4.9.82-1 + deb9u3 (2018-03-02) x86_64 GNU / Linux:
apt установить iptables-nftables-compat
https://wiki.nftables.org/wiki-nftables/index.php/Configuring_chains
или nft 'добавить правило входного фильтра ip frag-off 0x4000 counter accept'