nftables заменяет фреймворк iptables
В некоторых дистрибутивах уже установлен, но отключен
apt install nftables
systemctl enable nftables.service
По умолчанию, правила находятся в
/etc/nftables.conf
Содержание:
#!/usr/sbin/nft -f flush ruleset table inet filter { chain input { type filter hook input priority filter; } chain forward { type filter hook forward priority filter; } chain output { type filter hook output priority filter; } }
nft list ruleset
Каждое правило при добавлении получает свой номер (handle).
Чтобы посмотреть эти номера нужно использовать ключ -a
nft -a list ruleset
И затем можно удалить правило по его номеру, указав путь до цепочки (inet filter input)
nft delete rule inet filter input handle 2
echo '#!/usr/sbin/nft -f' > /etc/nftables.conf echo 'flush ruleset' >> /etc/nftables.conf nft list ruleset >> /etc/nftables.conf
После сохранения перезапустить nftables
systemctl restart nftables
nft flush ruleset
systemctl mask nftables.service
apt purge nftables
nft <команда> <объект> <путь к объекту> <параметры>
Команда — add, insert, delete, replace, rename, list, flush…
Объект — table, chain, rule, set, ruleset…
Путь к объекту зависит от типа. Например, у таблицы это <семейство> <название>.
У правила — гораздо длиннее: <семейство таблицы> <название таблицы> <название цепочки>. А иногда ещё добавляются handle или index.
Параметры зависят от типа объекта. Для правила это условие отбора пакетов и действие, применяемое к отобранным пакетам.
Создать базовую таблицу IPv4
nft add table inet filter
Создать цепочку для исходящего трафика IPv4
nft add chain inet filter input { type filter hook input priority 0\; }
Правило, для подсчета входящих пакетов (IPv4)
nft add rule inet filter input counter accept
Показать результат предыдущих команд:
nft list table inet filter
Сбросить правила для цепочки filter input
nft flush chain inet filter input
Удалить цепочки filter input
nft delete chain inet filter input
Удалить таблицу filter
nft delete table inet filter
Семейство не обязательных параметров. По умолчанию используется 'ip'
nft add table ip6 filter nft add chain ip6 filter input nft add rule ip6 filter input counter accept
Директория с примерами конфигураций в Debian
/usr/share/doc/nftables/examples/
Подсчет входящего трафика на порт tcp/22
nft add rule inet filter input tcp dport 22 counter
Подсчет и прием трафика на 80/tcp и 443/tcp для новых и существующих соединений
nft add rule inet filter input tcp dport {80, 443} ct state new,established counter accept
Таблицы могут быть одного из 6-ти семейств (families):
Пакет, попавший в цепочку, начинает проходить правила указанные в ней сверху вниз. Фаервол сравнивает пакет с первым правилом, затем со вторым и так далее. Если фаервол определит правило для этого пакета, то с пакетом будет выполнено действие:
А если фаервол не найдет в данной цепочке подходящего правила для пакета, то фаервол выполнит действие с пакетом, которое указано в политике (policy accept или policy drop).
Connection tracking — это модуль, который определяет состояния соединений. Соединения могут быть:
Смена политик
Интерфейс lo
nft add rule inet filter input iifname lo counter accept
Интерфейс eth0
nft add rule inet filter input iifname eth0 ip saddr 192.168.0.2 tcp dport 22 counter accept
nft add rule inet filter input ip saddr 192.168.0.0/24 icmp type echo-request counter accept
nft add rule inet filter input ct state established,related counter accept
nft add rule inet filter input tcp dport {80, 443} counter accept
nft chain inet filter input { policy drop \; }