Делимся записью вебианра с Николаем Лавлинским, который посвящен переходу со старой системы фильтрации IPTables (семейства X-tables) на современный инструмент ядра Linux — Nftables.
↘️ Смотреть в YouTube
↘️ Смотреть в ВК
Краткий конспект
1. Архитектура
Netfilter обрабатывает трафик в ядре Linux до 4-го уровня OSI. X-tables (iptables, ip6tables, arptables, ebtables) — разные утилиты и конфиги под каждый протокол. NFTables — одна утилита nft, один модуль ядра, общий конфиг для всех протоколов.
2. Почему NFTables лучше
— sets работают за O(1) вместо линейного роста времени как в iptables (нужен был отдельный ipset)
— таблиц и цепочек по умолчанию нет — создаёшь только нужное, а не предзаданный filter/nat/mangle
— семейство inet объединяет IPv4 и IPv6 в одном наборе правил
— одно правило может выполнять сразу несколько действий, конфиг применяется атомарно целиком
3. Проверка и миграция
iptables -V
nf_tables в выводе — бэкенд уже новый.
iptables-translate -A INPUT -p tcp --dport 22 -j ACCEPT
iptables-restore-translate -f ipt.rules > nft.rules
4. Базовая настройка
nft add table ip filter
nft add chain ip filter input { type filter hook input priority 0 \; policy accept \; }
nft add rule ip filter input tcp dport 22 counter accept
nft add rule ip filter input iifname "lo" accept
nft add rule ip filter input ct state vmap { established : accept, related : accept, invalid : drop }
nft chain ip filter input { policy drop \; }
Политику на drop переключаем после проверки разрешающих правил.
5. Handle вместо номеров правил
nft --handle list ruleset
nft delete rule ip filter input handle 2
nft insert rule ip filter input tcp dport 22 accept
nft replace rule ip filter input handle 2 tcp dport 22 ct state new accept
6. Sets — замена ipset
nft add set ip filter blackhole { type ipv4_addr \; flags interval \; }
nft add element ip filter blackhole { 1.1.1.1, 192.168.0.0/24 }
nft add rule ip filter input ip saddr @blackhole drop
7. NAT
nft add table ip nat
nft add chain ip nat postrouting { type filter hook postrouting priority 100 \; }
nft add rule ip nat postrouting oifname "enp1s0" masquerade
nft add rule ip nat prerouting iifname "enp1s0" tcp dport 80 dnat to 192.168.1.100
8. Персистентность
nft -s list ruleset > /etc/nftables.conf
systemctl enable nftables
Итог
Nftables заменяет весь стек x-tables (iptables, ip6tables, arptables, ebtables, ipset) одной утилитой и одним модулем ядра, даёт sets за O(1) и правила по handle вместо номеров.
Если хочешь узнать больше, начни с бесплатного демодоступа к практикумам:
🔥Начать Linux Basics
🔥Начать Linux: Анализ производительности и тюнинг
🔥Начать Повышение привилегий в Linux