В этом руководстве объясняется, как работать с брандмауэром 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: приоритет базовой цепочки определяет порядок базовых цепочек
- отбрасывание политики: политика отбрасывания по умолчанию отбрасывает все пакеты.
Как вы можете видеть на следующем снимке экрана, я создал две другие базовые цепочки, аналогичные предыдущей, 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.