Iptables может сопоставлять пакеты по строке.
Пример для DNS:
iptables -A INPUT -i eth0 -p udp --dport 53 -m string --hex-string "|09|proxypipe|03|net" --algo bm -j DROP
Как выполнить такое сопоставление в nftables?
С nftables вы можете использовать синтаксис Raw Payload Expression (задокументированный Вот) для сопоставления пакета на основе содержимого блока битов.
Итак, правило блокировки запросов для proxypipe.net
будет выглядеть так:
meta l4proto udp udp dport 53 @th,160,120 0x0970726f787970697065036e657400 counter drop comment "block queries for proxypipe.net"
Вышеупомянутое будет получать данные объемом 120 бит, начиная с бита 160 транспортного заголовка (@th
) и сравните их с шестнадцатеричным эквивалентом |09|proxypipe|03|net
Обратите внимание, что в отличие от версии iptables, приведенное выше будет соответствовать только proxypipe.net
в фиксированном положении в пакете. Это означает, что он не заблокирует foobar.proxypipe.net
или любые другие поддомены.