Аналог iptables в windows

Обновлено: 30.06.2024

nftables — проект netfilter, разработанный для замены существующего фреймворка tables. Предоставляет новую систему фильтрации пакетов, пользовательскую утилиту ntf, а также слой совместимости с tables. nftables использует существующие хуки, отслеживание соединений, очереди в пространстве пользователя и подсистему логирования netfilter.

nftables состоит из трёх основных частей: низкоуровневая реализация в ядре, библиотека libnl, которая обеспечивает netlink-взаимодействие, и пользовательский фронтенд nftables. Ядро предоставляет интерфейс настройки netlink, а также занимается runtime-выполнением наборов правил. Библиотека libnl содержит низкоуровневые функции для взаимодействия с ядром. Фронтенд nftables — то, с чем пользователь взаимодействует утилитой nft.

Подробную информацию о nftables можно найти на вики-странице проекта.

Contents

Установка

Совет: Большинство фронтендов iptables не предлагают прямой или косвенной поддержки nftables, хотя подобная возможность предусмотрена [1]. firewalld — единственный графический фронтенд со встроенной поддержкой как iptables, так и nftables [2].

Использование

В nftables не различаются временные правила, добавленные из командной строки, и постоянные, загруженные из файла или сохранённые в файл.

Текущий набор правил можно узнать командой:

Простой межсетевой экран

В пакет nftables входит простая и надёжная конфигурация экрана, сохранённая в файле /etc/nftables.conf .

Служба nftables.service загрузит эти правила при запуске или включении.

Настройка

Утилита nft выполняет большую часть обработки правил перед передачей их ядру. Правила объединяются в цепочки, которые, в свою очередь, входят в состав таблиц. В последующих разделах описано создание и модифицирование этих структур.

Прочитать правила из файла можно с помощью опции -f / --file :

Обратите внимание, что уже загруженные на этот момент правила не будут при этом автоматически стёрты.

Полный список команд можно найти в руководстве nft(8) .

Таблицы

семейство nftables утилита iptables
ip iptables
ip6 ip6tables
inet iptables и ip6tables
arp arptables
bridge ebtables

ip (т.е. IPv4) — семейство по умолчанию; используется, если семейство не было указано.

Семейство inet объединяет протоколы IPv4 и IPv6, что позволяет унифицировать семейства ip и ip6 и упростить создание правил.

В командах ниже параметр семейство будет указываться не всегда; если его нет, то подразумевается семейство ip .

Создание таблицы

Добавить новую таблицу:

Просмотр таблиц

Вывести список таблиц:

Просмотр цепочек и правил в таблице

Вывести цепочки и правила выбранной таблицы:

Например, чтобы вывести на экран правила таблицы my_table семейства inet , выполните команду:

Удаление таблицы

Удалить таблицу со всеми цепочками:

Очистка таблицы

Стереть все правила в таблице:

Цепочки

Есть два типа цепочек. Базовая цепочка является точкой входа для пакетов из сетевого стека; в ней указывается хук. Обычная цепочка может использоваться в качестве цели перехода и используется для лучшей организации правил.

В командах ниже параметр семейство будет указываться не всегда; если его нет, то подразумевается семейство ip .

Создание цепочки

Обычная цепочка

Добавить обычную цепочку цепочка в таблицу таблица :

Например, чтобы добавить обычную цепочку my_tcp_chain к таблице my_table семейства адресации inet , выполните:

Базовая цепочка

Чтобы добавить базовую цепочку, укажите хук и значение приоритета:

тип может принимать значения filter , route или nat .

Например, добавим базовую цепочку для фильтрации входящих пакетов:

Просмотр правил

Следующая команда выводит на экран все правила в цепочке:

Например, следующая команда выведет правила цепочки my_output таблицы my_table семейства inet :

Изменение цепочки

Для редактирования цепочки укажите её название и правила, которые нужно изменить:

Например, для изменения политики обработки входящих пакетов цепочки исходной таблицы с accept на drop выполните команду:

Удаление цепочки

Цепочка должна быть пустой (не содержащей правил) и не должна быть целью перехода из другой цепочки.

Очистка цепочки

Стереть все правила в цепочке:

Правила

Правила конструируются из выражений (expressions) и операторов (statements) и содержатся внутри цепочек.

Добавление правила

Совет: Утилита iptables-translate поможет преобразовать правила iptables в формат nftables.

Добавить правило в цепочку:

Правило будет прикреплено после маркер , который можно не указывать. Если маркер (handle) не задать, то правило добавится в конец цепочки.

Чтобы добавить правило перед определённой позицией, выполните

Если маркер не указан, то правило добавится в начало цепочки.

Выражения

Обычно оператор включает некоторое выражение для сравнения и вынесения решения. Решениями могут быть accept , drop , queue , continue , return , jump цепочка и goto цепочка . Возможны и другие операторы помимо решений, подробнее смотрите nft(8) .

В nftables доступен ряд выражений, по большей части совпадающий с аналогичными в iptables. Наиболее важное отличие заключается в том, что здесь нет обобщённых или неявных параметров. Обобщённый параметр (generic match) обычно доступен для всех правил, например, параметры --protocol или --source . Неявные правила (implicit matches) относятся к конкретному протоколу, как параметр --sport для пакетов TCP.

Ниже представлен неполный список возможных параметров:

  • meta (метасущности, напр. интерфейсы)
  • icmp (протокол ICMP)
  • icmpv6 (протокол ICMPv6)
  • ip (протокол IP)
  • ip6 (протокол IPv6)
  • tcp (протокол TCP)
  • udp (протокол UDP)
  • sctp (протокол SCTP)
  • ct (отслеживание соединений)

Ниже приведён неполный список аргументов для параметров (подробнее см. nft(8) ):

Удаление

Отдельные правила могут быть удалены только с помощью маркера. Команда nft --handle list выведет список маркеров.

Ниже приведён пример правила с маркером и команда для его удаления. Аргумент --numeric позволяет выводить IP-адреса в численном виде.

Стирание всех цепочек таблицы выполняется командой nft flush table . Отдельные цепочки могут быть стёрты командами nft flush chain или nft delete rule .

Первая команда стирает все цепочки в ip-таблице таблица . Вторая очищает цепочку цепочка в таблице таблица семейства семейство . Третья удаляет все правила в цепочке цепочка в таблице таблица семейства семейство .

Множества

Множества бывают именованные и анонимные. Множество объявляется фигурными скобками, в которых перечислены разделённые запятыми элементы. Анонимные множества "встраиваются" в правило и не могут быть изменены отдельно от него. Если множество необходимо модифицировать, то придётся удалить правило целиком и добавить его заново. Так, не получится удалить "http" из множества dport'ов в следующем правиле:

Именованное множество можно изменить, а также присвоить ему тип и установить флаги. sshguard использует именованные множества для хранения адресов блокированных хостов.

Команды для добавления и удаления элементов из множества:

Если множество имеет тип ipv4_addr, то помимо адреса можно указать маску сети (маска "/32" в примере не обязательна, но указана для большей ясности). Обращение к множеству из примера выше ("TABLE ip sshguard < SET attackers >") производится по имени ip sshguard attackers .

Полная перезагрузка правил

Создать файл для новых правил:

Сбросить дамп правил в новый файл:

Теперь можно редактировать файл /tmp/nftables , создавая и изменяя правила. Применить изменения можно командой:

Примеры

Рабочая станция

Сервер

Ограничение скорости передачи

Переход

Если вы используете переходы (jumps), то целевая цепочка должна быть описана до перехода. Иначе будет получена ошибка Error: Could not process rule: No such file or directory .

Несколько сетевых интерфейсов с разными правилами

Если у вашей системы несколько сетевых интерфейсов и вы хотите использовать для них разные наборы правил, то создайте фильтрующую цепочку-диспетчер, а после неё опишите цепочки для сетевых интерфейсов. Например, пусть ваша машина выступает в качестве домашнего маршрутизатора и вы желаете запустить веб-сервер, доступный по локальной сети (интерфейс enp3s0 ), но не из публичного интернета (интерфейс enp2s0 ). Создайте таблицу вроде этой:

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

Маскарадинг

В nftables есть специальное ключевое слово masquerade , "позволяющее автоматически изменять адрес источника на адрес интерфейса-отправителя" [4]. Это особенно удобно в ситуациях, когда IP-адрес интерфейса непредсказуем или нестабилен — например, исходящий интерфейс маршрутизатора, подключённого к нескольким интернет-провайдерам. Маскарадинг позволяет не переписывать правила межсетевого экрана для трансляции сетевых адресов (NAT) при каждом изменении IP-адреса интерфейса.

Правила работы маскарадинга:

  • опция masquerading в ядре Linux должна быть включена (в стандартном ядре она включена по умолчанию); в противном случае задайте параметр ядра CONFIG_NFT_MASQ=m .
  • ключевое слово masquerade может использоваться только в цепочке типа nat .
  • masquerading является подвидом SNAT, поэтому работает только для исходящих пакетов.

Пример правил межсетевого экрана для машины с двумя интерфейсами, локальным enp3s0 и публичным enp2s0 :

Поскольку таблица выше относится к типу inet , то маскарадингу подвергаются пакеты и IPv4, и IPv6. Чтобы ограничить маскарадинг только IPv4-пакетами (т.к. у IPv6 большое пространство адресов и NAT не требуется) либо добавьте выражение meta nfproto ipv4 перед oifname "enp2s0" masquerade , либо измените тип таблицы на ip .

NAT с пробросом портов

Ниже приведён пример проброса портов 22 и 80 на адрес ip-адрес_получателя . Необходимо предварительно с помощью sysctl установить параметры net.ipv4.ip_forward и net.ipv4.conf.wan_интерфейс.forwarding на 1 .

Счётчик новых соединений

Динамическая блокировка

Для вывода заблокированных адресов выполните nft list set inet dev blackhole .

Советы и рекомендации

Сохранение текущего набора правил

Вывод команды nft list ruleset можно использовать в качестве входных данных для других команд. Текущий набор правил можно сохранить в файл, а позже — загрузить их из него.

Примечание: Команда nft list не выводит определения переменных. Если в файле /etc/nftables.conf есть какие-либо переменные, то в выводе команды вы их не увидите — все переменные будут заменены на значения.

Настройка межсетевого экрана

Одиночная машина

Сотрите текущий набор правил:

Добавьте базовые цепочки input, forward и output. Политика для входящих и пересылаемых пакетов должна быть drop. Политика для исходящих пакетов — accept.

Добавьте две обычные цепочки, которые будут обрабатывать пакеты протоколов TCP и UDP:

Разрешите related и established трафик:

Разрешите трафик на петлевой интерфейс:

Заблокируйте invalid трафик:

Разрешите пакеты ICMP и IGMP:

Новый UDP-трафик будет передаваться цепочке my_udp_chain :

Новый TCP-трафик будет передаваться цепочке my_tcp_chain :

Заблокировать весь трафик, который не обрабатывается другими правилами:

В этом месте необходимо выбрать, какие порты будут оставаться открытыми для входящих соединений, обрабатываемых цепочками my_tcp_chain и my_udp_chain . Например, открыть соединения для веб-сервера:

Разрешить SSH-трафик на порт 22:

Разрешить входящие DNS-запросы:

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

Предотвращение атак перебором

Журналирование трафика

Действие log позволяет вести журнал пакетов. Простейшее правило для сохранения информации обо всём поступающем трафике:

Решение проблем

Работа с Docker

nftables может создавать помехи сетевой работе контейнеров Docker (возможно, и другим средствам виртуализации тоже). В частности, политика drop цепочки forward блокирует пакеты, источником которых является docker. Если вы не хотите удалять эту цепочку, то сделайте следующее:

    пакет iptables-nft ; он содержит iptables-совместимый интерфейс nftables, который docker сможет использовать.
  1. Модифицируйте цепочку forward таблицы inet :
  2. Добавьте цепочку DOCKER-USER в таблицу ip filter , чтобы помечать (mark) пакеты docker:

Теперь сгенерированные контейнером docker пакеты будут маркироваться и пересылаться дальше, поскольку docker уже их отфильтровал (цепочка forward в docker использует политику drop ).

Всем доброго времени суток. Недавно столкнулся с одной серьёзной проблемой - сильно флудят пакетами на приложение сквозь защиту в коде (java).
Ситуация такая: на виндовс сервере стоит 2 сервера на яве+mysql. Приложение на одном порту(авторизация) отправляет данные на другое.
На обоих стоит защита от флуда, в коде четко прописано несколько вариантов чтения и исполнения пакетов и ограничения при флуде. Если быстрые коннекты/много пакетов приходит - там и бан и вовзращение null и чего только не пробовал - да вот только это всё спит и ничего не видит, пока сервер кладут.
Если пробовать пофлудить (loic например) - защиты прекрасно работают, однако сервер всё равно как-то сильно ддосят злоумышленники уже неделю сквозь эти защиты. Отправляют тяжелые пакеты по 1000 в секунду и защита их просто игнорирует.
Айпи баню руками в брандмауэре - колхоз и страдания. Сервер часто лежит, пока не перезагрузишь приложения (сокеты)
Есть снапшоты wireshark - флудят на одно приложение тысячами пакетов в секунду, логи за час достигают 5гб, ЦП в потолок за пару секунд - mysql наравне с процессом явы на который флудят.
То есть проблема в том на виндовсе нет банального бана флудеров как в iptables
Подскажите пожалуйста, что можно сделать на винде? Может есть какое-то ПО, которое будет автоматом в файрволл заносить айпишники? Айпи сервера менять нельзя, так что всякие услуги прокси не подойдут.
Руки совсем опустились, очень надеюсь на вашу помощь, готов даже отблагодарить

Добавлено через 35 минут
Если не ошибаюсь, хакеры сначала открывают 1 коннект на 1 айпи естественным способом, а потом кидают тысячи, миллионы пакетов

__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь


Ошибка при наложении программного фильтра и фильтра на форме
Добрый день, на форме программно устанавливается фильтр записей - все хорошо. но когда средствами.

Какой метод синтеза фильтра обеспечивает наименьшее число параметров фильтра при заданных ограничениях АЧХ?
Доброго времени суток! Подскажите пожалуйста,какой метод синтеза фильтра обеспечивает наименьшее.

Iptables
Вобщем нужно запретить всем пользователям кроме согзданного ранее использовать протокол ftp для.


Iptables
Привет форумчане! Возник вопрос и прошерстив поисковики ничего похожего на мою задачу я не нашел.

IPFire

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

Существует несколько графических утилит, которые могут помочь вам управлять им, но его защита ограничена вашей установкой Linux. А как насчет других устройств в вашей сети?

Независимо от того, являетесь ли вы домашним пользователем или руководите малым предприятием, скорее всего, у вас есть несколько устройств, подключенных к Интернету. Помимо компьютеров, довольно часто в учреждениях любого размера имеется множество IoT-устройств, которые также необходимо защитить от злоумышленников в Интернете.

Выделенный брандмауэр стоит между Интернетом и проверяет весь трафик, прежде чем он достигнет вашей внутренней сети.

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

1. IPFire

IPFire

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

Помимо функций межсетевого экрана, IPFire также обладает возможностями обнаружения и предотвращения вторжений, а также может быть использован для предоставления возможностей VPN. Дистрибутив также может быть расширен с помощью удобного набора дополнений для придания ему дополнительных функций.

2. OPNsense

Форк оригинального проекта pfSense, ориентированный на безопасность

OPNsense

OPNSense является результатом усилий двух существующих проектов с открытым исходным кодом, а именно pfSense и m0n0wall.

Вместо Linux, OPNsense работает на базе HardenedBSD, которая представляет собой ориентированный на безопасность форк FreeBSD. Дистрибутив предназначен для использования в качестве межсетевого экрана и платформы маршрутизации и, помимо фильтрации трафика, может использоваться для отображения captive portal, шейпинга трафика, обнаружения и предотвращения вторжений, а также для настройки виртуальной частной сети (VPN) и многого другого.

Стремясь своевременно реагировать на угрозы, дистрибутив брандмауэра предлагает еженедельные обновления безопасности. Одной из лучших особенностей OPNsense является то, что он раскрывает все свои функциональные возможности благодаря веб-интерфейсу, который очень удобен в использовании и доступен на нескольких языках.

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

Брандмауэр использует систему предотвращения вторжений Inline Intrusion Prevention System. Это мощная форма глубокой проверки пакетов, при которой вместо простой блокировки IP-адреса или порта, OPNsense может проверять отдельные пакеты данных или соединения и при необходимости останавливать их до того, как они достигнут отправителя.

3. pfSense

Многофункциональный брандмауэр и маршрутизатор на базе FreeBSD

pfSense

pfSense позиционирует себя как самый надежный брандмауэр с открытым исходным кодом. Оригинальный дистрибутив брандмауэра на базе FreeBSD, pfSense имеет много общих черт с OPNsense. Например, помимо того, что он является мощной, гибкой платформой для межсетевого экранирования и маршрутизации, он включает длинный список сопутствующих функций. Для начала, как и в OPNsense, вы можете использовать pfSense для развертывания системы предотвращения вторжений, а также для включения VPN-доступа.

Кроме того, как и все аналоги, pfSense можно полностью управлять с помощью интуитивно понятного веб-интерфейса. В отличие от большинства аналогов, pfSense доступен в виде аппаратного устройства, виртуального устройства и загружаемой версии для сообщества.

Благодаря своей богатой истории, pfSense, возможно, имеет самую обширную документацию и одно из самых больших сообществ пользователей, которые публикуют учебные пособия и видео на своих официальных каналах поддержки, а также в других местах в Интернете. Кроме того, коммерческие разработчики дистрибутива предлагают платные учебные курсы, которые помогут вам наилучшим образом использовать развертывание pfSense.

4. ClearOS

Хорошо продуманный дистрибутив, который очень прост в использовании

ClearOS

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

После установки вы можете управлять своим брандмауэром на базе ClearOS с помощью веб-интерфейса. Интерфейс администрирования интуитивно понятен в использовании и поможет вам не только настроить и контролировать ваш брандмауэр, но также может быть использован для настройки нескольких других сетевых служб с помощью нескольких щелчков мыши.

5. OpenWRT

Брандмауэр для маршрутизаторов

OpenWRT

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

Он также имеет удивительно приличный графический интерфейс и предлагает ряд дополнительных пакетов в своем репозитории, позволяющих настроить OpenWRT различными способами для всех видов использования. Несмотря на всю свою гибкость, OpenWRT по-прежнему является одним из наименее требовательных дистрибутивов и работает быстро.

Nftables - это новый программный продукт, который стремиться изменить существующий подход к фильтрации пакетов. До данного пакета работа с пакетами в сети осуществлялась с помощью утилит (iptables, ip6tables, arptables, entables). Данный framework доступен с версии ядра Linux 3.13 и позволяет запускать команды со старым синтаксисом iptables. По умолчанию же используется новый синтаксис построения команд. В основном используются такие понятия, как наборы, также для правил используют карты и конкатенации (склейки).

В сегодняшней статье мы разберемся как пользоваться nftables. Этот программный продукт позволяет отфильтровывать как каждый пакет, так и поток данных, выполнять NAT трансляцию, регистрировать подозрительную активность в трафике. При создании наборов правил следует избегать дублирования настроек. Nftables позволяет фильтровать и регистрировать одновременно трафик IPv4 и IPv6, благодаря новому семейству правил inet.

Основы nftables

Перед тем как мы перейдем к разбору того, как выполняется настройка iptables, разберемся с основными понятиями.

Набор (set) - множество похожих по смыслу значений для ключей правил, объединенных общим именем или конструкцией, состоящей из скобок. Позволяет описывать словари и карты. Позволяет обходиться одним правилом в том случае, где в iptables пришлось бы использовать цепочку правил. Например:

Карта (maps) - карта используется для сопоставления обрабатываемой информации с правилом на основе пар значение - ключ. Создание карт основано на использовании инфраструктуры наборов (set). Существует два типа карт - точные карты (literal maps) и карты присяжных (verdict maps). Мы рассмотрим только точные карты.

Точные карты - это набор пар (sets) критерий_совпадения: действие. Например:

nft add rule ip nat prerouting dnat tcp dport map

Это правило с помощью карты осуществляет перенаправление (DNAT) с порта TCP назначения 80 на IP-адрес назначения 192.168.1.100, а с порта 8888 - на IP-адрес 192.168.1.101.

Интервалы (intervals) - описываются с помощью синтаксической конструкции значение-значение Интервал обозначает указание диапазона значений. Например: 192.168.1.0-192.168.1.105 обозначает диапазон IP-адресов 1-1023 обозначает диапазон портов интернет-протокола. Вот пример соответствующего правила:

nft add rule inet table1 chain_input ip daddr 192.168.0.1-192.168.0.105 drop

Данное правило указывает отбрасывать все пакеты для семейства правил inet в таблице table1 в цепочке chain_input с IPv4 адресом назначения от 192.168.0.1 до 192.168.0.105


Основные различия с iptables

  • Синтаксис Iptables построен таким образом, что ключам правил всегда предшествует двойное или одинарное тире. В отличии от этого, nftables использует другой синтаксис, перенятый у tcpdump.
  • В iptables вы получаете сразу готовое количество таблиц с фиксированным набором уже настроенных в них цепочек правил. Что приводило к потерям производительности из-за существования неиспользуемых цепочек. В nftables таблицы и цепочки полностью настраиваются.
  • В nftables выражения это базовый строительный блок правила. В связи с этим правило представляет собой последовательность с выражениями, которые выполняются последовательно слева направо.
  • В nftables можно указать несколько действий в одном правиле.
  • Нет по умолчанию счетчика цепочек и правил. Вы можете включить его по желанию.
  • Лучшая поддержка обновления правил в процессе работы.
  • Возможность одновременного администрирования стеков IPv4 и IPv6 благодаря новому семейству inet, позволяющему регистрировать цепочки правил, видящие одновременно трафик обоих стеков протоколов.
  • Генерация наборов и карт инфраструктуры. Это новая возможность, позволяет использовать дополнительные конфигурации, такие как словари, карты и интервалы, для достижения ориентированной на производительность классификации пакетов.
  • Поддержка конкатенаций (склеек). Начиная с ядра Linux 4.1, вы можете объединять несколько различных ключей и комбинировать их со словарями и картами. Идея состоит в построении цветка значений, хеширующихся для получения высокой производительности при выполнении правил.
  • Подключения поддержки новых протоколов без обновления ядра. Для обновления nftables практически всегда достаточно обновления самого пакета, без каких-либо лишних действий.

Структуры для хранения правил nftables

В целом всё похоже на iptables:

  • Таблицы - содержат ссылку на контейнеры цепочек правил.
  • Цепочка - содержит наборы правил, выполняемых в порядке очереди
  • Правило - семантическая конструкция, позволяющая выбрать действия, которые нужно осуществить с описываемым правилом набором данных

Семьи nftables (families)

Вся инфраструктура nftables предназначена для работы с различными семействами адресов (families) разных протоколов (IPv4, IPv6, ARP, MAC). Ранее для обработки разных семейств адресов использовались разные утилиты - iptables, ip6tables, arptables, ebtables. Теперь с помощью введения понятия семейства обработка происходит в рамках одного программного продукта. На текущий момент существуют следующие семейства:

  • ip - таблицы этого семейства будут видеть трафик (пакеты) протокола IPv4;
  • ip6 - таблицы этого семейства будут видеть трафик (пакеты) протокола IPv6;
  • inet - в таблицах этого семейства будет обрабатываться трафик (пакеты) протоколов IPv4 и IPv6. Правила для ipv4 не будут влиять на пакеты IPv6. Правила, подходящие под оба протокола, будут влиять на пакеты обоих протоколов;
  • arp - таблицы этого семейства видят трафик arp - протокола;
  • bridge - в таблицах будут видеться пакеты, коммутируемые на уровне L2 OSI. Это семейство аналог ebtables;
  • netdev - это семейство, аналогов которого нет в x_tables. Оно видит все пакеты, которые только были переданы драйвером в стек протоколов.

Установка nftables

В некоторых дистрибутивах nftables уже установлен (RedHat 8, CentOS 8) по умолчанию. В Debian 10.2 установка производится очень просто:

sudo apt-get install nftables


Примеры использования nftables

Теперь рассмотрим примеры nftables. Команда nft – это утилита администрирования фреймворком nftables при управлении потоками данных. Именно с помощью неё выполняется настройка nftables. Использует при работе интерфейс командной строки. Позволяет создавать новые правила nftables, удалять старые и просматривать уже созданные цепочки и таблицы правил.

1. Создание таблицы в nftables

При создании таблицы (table) должно быть определено семейство (family) адресов. Например, давайте создадим таблицу с именем, test_table, которая отрабатывает одновременно пакеты IPv4 и IPv6:

sudo nft add table inet test_table


Создание цепочки в nftables

Цепочки (chain) являются контейнерами для правил. Существуют два типа цепочек:

Базовые цепочки (base chain) - можно использовать в качестве точки входа для пакетов из стека протоколов.

Регулярные цепочки (regular chain) - можно использовать с действием jump цель. Применяют для лучшей организации множества правил. При создании цепочки следует учитывать, что таблица, в которую мы хотим добавить цепочку, должна уже существовать.

sudo nft add chain inet [ таблица ] [ цепочка ]


sudo nft add chain inet test_table test_chain

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

Эта цепочка фильтрует входящие пакеты. Приоритет (priority) задает порядок, в котором nftables обрабатывает цепочки с одинаковым значением hook. Параметр policy устанавливает действие по умолчанию для правил в этой цепочке. В данном случае мы установили действие accept (принимать пакет).

3. Добавление правила

Добавить правило (rule) в настраиваемую конфигурацию можно с помощью следующей синтаксической конструкции:

sudo nft add rule [ family ] [ table ] [ chain ] [ expression ] [ action ]

sudo nft add rule inet table1 chain_input ip saddr 8.8.8.8 drop

Данное правило добавляется в таблицу с именем table1 в цепочку chain_input и отбрасывает пакеты с ip-адресом источника отправления 8.8.8.8.


4. Удаление правила

Для удаления правила nftables используется команда со следующим синтаксисом:

sudo nft delete rule [ family ] [ table ] [ chain ] handle [ number ]

sudo nft delete rule inet table1 chain_input handle 3


5. Удаление цепочки

Цепочка удаляется с помощью следующей команды:

sudo nft delete chain [ family ] [ table ] [ chain ]

sudo nft delete chain inet table1 chain_input


6. Удаление таблицы

Таблицу можно удалить с конструкции со следующим синтаксисом:

sudo nft delete table [ family ] [ table ]

sudo nft delete table inet table1

Выводы

Сегодня мы познакомились с современным инструментом для редактирования правил брандмауэра. А также разобрались как выполняется настройка Nftables в Debian 10. Nftables вводит много новых семантических конструкций для более грамотной организации правил — set, map, family. Также данный пакет содержит много усовершенствований по сравнению с набором утилит для брандмауэра x_tables. В рамках этой статьи мы познакомились с инструментом nft, используемым для управления всем множеством правил межсетевого экрана.

Поскольку по умолчанию nftables не содержит никаких таблиц и цепочек, мы научились создавать наши первые таблицы и цепочки для всего множества правил нашего межсетевого экрана. Теперь мы умеем устанавливать приоритет для обработки подмножеств правил в цепочке, задавать действие по умолчанию для правил в созданной цепочке. Кроме того, мы научились добавлять правила. Так как структура таблиц и цепочек в nftables настраивается произвольно, то мы научились удалять цепочки и таблицы.

Нет похожих записей


Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна.

Читайте также: