Назад | Перейти на главную страницу

Отбрасывать фрагментированные пакеты в nftables

Используя iptables, можно блокировать фрагментированные пакеты с помощью этого правила:

iptables -A INPUT -f -j DROP

Но в nftables нет эквивалента. Есть ли способ это сделать?

Из Вики Сообщества или просто 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 Comm from (в 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#Base_chain_priority

или nft 'добавить правило inet filter input ip frag-off 0x4000 counter accept'