Содержание статьи
В статье «Nftables. Как выглядит будущее настройки файрвола в Linux» я рассмотрел основы настройки nftables и миграции с iptables. Набор правил после миграции стал короче благодаря новым фичам nftables вроде переменных и встроенной поддержки групп объектов. Тем не менее по функциональности он идентичен старому, и у некоторых читателей возникли сомнения, что мигрировать вообще целесообразно.
В этот раз мы рассмотрим ряд функций nftables, которые в iptables отсутствуют, и убедимся, что переделать файрвол в Linux авторы задумали не просто от скуки.
Трассировка правил
Наверняка бывало так, что нужный трафик ошибочно блокируется каким-то правилом, но ты не можешь понять, каким именно. У nftables для таких случаев есть встроенный механизм трассировки правил.
Рассмотрим его на очевидном примере. Пусть у тебя правило блокирует весь трафик сети 192.0.2.0/24.
$ sudo nft insert rule inet filter input ip saddr 192.0.2.0/24 drop
Предположим, ты о нем забыл и в упор не видишь его в настройках, а пользователи жалуются, что не проходит трафик с хоста 192.0.2.1. Не беда — мы можем включить трассировку для всех пакетов с адресом источника 192.0.2.1. Это делается опцией nftrace set 1
.
$ sudo nft insert rule inet filter input ip saddr 192.0.2.1 meta nftrace set 1
Теперь в выводе команды nft monitor trace
мы можем увидеть весь путь этого пакета через наш набор правил.
$ sudo nft monitor trace
trace id 66fdb23e inet filter input packet: iif "eth0" ether saddr ... ether daddr ... ip saddr 192.0.2.1 ip daddr 203.0.113.1 ip dscp cs0 ip ecn not-ect ip ttl 64 ip id 0 ip protocol icmp ip length 84 icmp type echo-request icmp code net-unreachable icmp id 50986 icmp sequence 1 @th,64,96 14560823784192396447041847296
trace id 66fdb23e inet filter input rule ip saddr 192.0.2.1 meta nftrace set 1 (verdict continue)
trace id 66fdb23e inet filter input rule ip saddr 192.0.2.0/24 drop (verdict drop)
Теперь мы сможем найти нужное правило поиском по ip saddr 192.0.2.0/24
. Это, конечно, тривиальный пример, и правило могло быть куда менее простым и очевидным, но в выводе трассировки ты всегда увидишь именно правило, которое отбросило пакет.
Как и с tcpdump/Wireshark, выбор критерия для трассировки — залог удачной отладки. Трассировка работает только для пакетов, которые попали под правило с nftrace set 1
. Если условие недостаточно специфично, пакет в нее не попадает. Сделай условие слишком общим, вроде protocol tcp
, и ты не сможешь найти нужное в огромном объеме вывода.
Тем не менее само наличие этого механизма открывает прежде недоступные возможности для отладки правил.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»