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

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

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

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

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

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.


3 комментария

  1. Аватар

    Laglag

    29.09.2020 в 19:17

    Boot long forvarding srating, see look to forvarding to nat drop iptables up tcp up to sha512 ssh dripind no or all drop. Goot see steded

  2. Аватар

    zerox

    30.09.2020 в 18:07

    А в чем проблема включить логирование отброшенных пакетов в iptables, чтобы увидеть там все, что было отклонено? Всегда так делал во время разбирательств, когда что-то куда-то не идет. Так что по этому пункту удобство nftables натянуто выглядит.

  3. Аватар

    jura12

    02.10.2020 в 00:11

    ufw будет работать?

Оставить мнение