NFTables. Разбираем преимущества перехода с iptables на новый файрвол

0
255

Содержание статьи

NFTables — новая реализация файрвола в ядре Linux, которая призвана заменить iptables. Как и многие другие радикальные изменения, этот инструмент до сих пор вызывает у пользователей противоречивые чувства. И главный вопрос, конечно же, — какие преимущества можно получить от перехода на него?

В статье «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, и ты не сможешь найти нужное в огромном объеме вывода.

Тем не менее само наличие этого механизма открывает прежде недоступные возможности для отладки правил.

Продолжение доступно только участникам

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

Присоединяйся к сообществу «Xakep.ru»!

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

ОСТАВЬТЕ ОТВЕТ

Please enter your comment!
Please enter your name here