Учебник по Nftables

Ucebnik Po Nftables



В этом руководстве объясняется, как работать с брандмауэром Nftables Linux. Этот контент оптимизирован как для опытных, так и для новых пользователей Linux.

Nftables — это компонент ядра Linux, предоставляющий функции брандмауэра. Это замена Iptables.







После прочтения этого руководства вы поймете правила Nftables и сможете создать свой брандмауэр. Вам не нужны предварительные знания об Iptables.



Все примеры в этом руководстве содержат скриншоты, что упрощает их понимание и реализацию для всех пользователей Linux, независимо от их уровня знаний.



Начало работы с Nftables

Прежде чем начать, создайте и откройте файл с помощью текстового редактора, такого как nano или vi, чтобы начать вводить свои первые правила Nftables на основе следующего примера. Не копируйте-вставляйте; тип все.





нано брандмауэр.nft

Пример в этом руководстве довольно прост и показывает ограничительный брандмауэр, в котором отбрасывается весь трафик IPv4, кроме обратной петли и определенных портов.



На предыдущем снимке экрана я использовал первую строку, чтобы определить свою локальную сеть (192.168.0.0/16) как LinuxHintNet.

определить LinuxHintNet = 192.168.0.0 / 16

Во второй строке я определяю группу портов (80, 443 и 22). Я называю эту группу AllowPorts, потому что планирую разрешить трафик через них. AllowPorts — это произвольное имя.

определить AllowPorts   = { 80 , 443 , 53 , 22 }

Затем я добавляю таблицу, которая представляет собой контейнер или группу цепочек и правил; оба они объясняются ниже. Таблицы помогают организовать правила и цепочки. Я назвал таблицу в примере «Restrictive», потому что она содержит ограничительную политику, а ее имя произвольное.

IP-адрес перед именем таблицы указывает, что правила таблицы очереди будут применяться только к трафику IPv4. Вы можете использовать inet вместо IP для применения правил к протоколам IPv4 и IPv6. Или вы можете заменить IP на ip6 только для IPv6.

Помните, Restrictive — это имя, которое я определил произвольно. Вы можете назвать таблицу как хотите.

В моем случае я применяю правила только к IPv4, как показано ниже.

добавить таблицу IP ограничительный

Для обоих протоколов используйте следующее:

добавить таблицу инет ограничительный

Затем мы добавляем первую базовую цепочку, которую я условно называю Incoming, потому что она связана с входящим трафиком. Впрочем, вы можете назвать его как хотите.

Следующая базовая цепочка по умолчанию отбрасывает весь входящий трафик:

  • добавить цепочку ip Restrictive Incoming: в этом разделе добавляется цепочка Restrictive Incoming, которая будет применяться к IPv4.
  • фильтр типа: определяет тип цепочки как фильтр, поскольку он будет фильтровать трафик. Другими возможными типами цепочек являются route или NAT.
  • ловушка ввода: относится к входящим пакетам
  • приоритет 0: приоритет базовой цепочки определяет порядок базовых цепочек
  • отбрасывание политики: политика отбрасывания по умолчанию отбрасывает все пакеты.
Добавить цепочку IP Ограничительный входящий { тип приоритет ввода хука фильтра 0 ; падение политики; }

Как вы можете видеть на следующем снимке экрана, я создал две другие базовые цепочки, аналогичные предыдущей, Restrictive Redirect и Restrictive Outgoing. Разница заключается в определенном хуке для каждого (прямой хук и выходной хук). Объяснение их повторяется.

После трех базовых цепочек мы можем продолжить правила Nftables, чтобы разрешить петлевой трафик.

Я добавляю следующие строки для входящего и исходящего трафика на петлевом интерфейсе.

добавить правило IP Ограничительный прием входящего счетчика iifname lo

добавить правило IP Ограничительный прием входящего счетчика oifname lo

Теперь я добавляю четыре правила, принимающие исходящий и входящий трафик TCP и UDP через все порты, включенные в переменную $AllowPorts, определенную в начале файла.

добавить правило IP Ограничительный входящий TCP-порт $AllowPorts встречный прием

добавить правило IP Ограничительный исходящий tcp dport $AllowPorts встречный прием

добавить правило IP Ограничительный входящий UDP-спорт $AllowPorts встречный прием

добавить правило IP Ограничительный исходящий udp dport $AllowPorts встречный прием

Вы можете увидеть полный сценарий ниже.

Закончив вводить таблицы, цепочки и правила, закройте документ и сохраните изменения.

# В первых двух строках я определяю свою локальную сеть (LinuxHintNet) и набор портов (80,
#443,22) для включения трафика через них в правилах ниже.
определить LinuxHintNet = 192.168.0.0 / 16
определить AllowPorts   = { 80 , 443 , 53 , 22 }
#Я объявляю новую таблицу, которая будет содержать цепочки и правила. Я называю эту таблицу «Ограничительной».
# 'IP' применяет правила только к IPv4. Для IPv6 используйте только «ip6» и «inet» для обоих протоколов.
добавить таблицу IP ограничительный
# После создания таблицы я создаю три цепочки: Входящие, Редирект и Исходящие,
#Имена произвольны. Все они по умолчанию пропускают входящий, исходящий и пересылаемый трафик.
добавить цепочку IP Ограничительный входящий { тип приоритет ввода хука фильтра 0 ; падение политики; }
добавить цепочку IP Ограничительное перенаправление { тип приоритет переадресации фильтрующего хука 0 ; падение политики; }
добавить цепочку IP Ограничительный исходящий { тип приоритет вывода хука фильтра 0 ; падение политики; }
# Я реализую два правила, чтобы разрешить петлевой трафик.
добавить правило IP Ограничительный прием входящего счетчика iifname lo
добавить правило IP Ограничительный прием входящего счетчика oifname lo
# Я реализую правила, разрешающие трафик через порты, определенные в переменной AllowPorts.
добавить правило IP Ограничительный входящий TCP-порт $AllowPorts встречный прием
добавить правило IP Ограничительный исходящий tcp dport $AllowPorts встречный прием
добавить правило IP Ограничительный входящий UDP-спорт $AllowPorts встречный прием

добавить правило IP Ограничительный исходящий udp dport $AllowPorts встречный прием

Чтобы активировать брандмауэр, выполните следующую команду:

судо нфт -f брандмауэр.nft

Вы можете проверить свои правила, выполнив следующую команду:

судо набор правил списка nft

Это базовый ограничительный брандмауэр.

Вывод:

Как видите, Nftables намного удобнее, чем Iptables, и пользователи могут освоить Nftables быстрее, чем Iptables. Поскольку поддержка Iptables прекращена, многие дистрибутивы используют Nftables в качестве брандмауэра по умолчанию, включая Debian. Опытные пользователи Iptables могут захотеть взглянуть на инструмент Iptables-nftables-compat, который переводит Iptables в Nftables. Это может помочь им понять различия.

Профессиональные пользователи, такие как системные администраторы, как правило, продолжают работать с Iptables; не игнорируйте Nftables, чтобы сэкономить время при улучшении фильтрации. Я надеюсь, что эта статья была достаточно простой, чтобы убедить вас попробовать Nftables.