iptables vs nftables: сравнение и руководство по миграции
Подробное сравнение iptables и nftables, синтаксис nftables, руководство по миграции, эквиваленты распространённых правил и когда использовать какой инструмент.
Содержание
iptables vs nftables: сравнение и руководство по миграции
Многие годы iptables был стандартным инструментом фильтрации пакетов в Linux. Однако nftables включён в ядро Linux с 2014 года и заменяет iptables в современных дистрибутивах. Это руководство сравнивает оба инструмента, объясняет синтаксис nftables и проводит вас через миграцию.
Таблица сравнения
| Характеристика | iptables | nftables |
|---|---|---|
| Первый выпуск | 1998 | 2014 |
| Синтаксис | Сложный, непоследовательный | Последовательный, читаемый |
| IPv4/IPv6 | Отдельные инструменты | Единый инструмент |
| Производительность | Оценка по правилам | Оптимизированная |
| Атомарные обновления | Нет | Да |
| По умолчанию (Ubuntu 20.04+) | Нет | Да |
| По умолчанию (Debian 10+) | Нет | Да |
Основные концепции iptables
# Просмотр текущих правил iptables
sudo iptables -L -n -v
sudo iptables -L -n -v --line-numbers
# Базовые правила
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
sudo iptables -P INPUT DROP
# Сохранить правила
sudo iptables-save > /etc/iptables/rules.v4
Основные концепции nftables
В nftables структура: таблица → цепочка → правило
# Установить nftables
sudo apt install nftables -y
sudo systemctl enable nftables
sudo systemctl start nftables
# Просмотр текущих правил
sudo nft list ruleset
Файл конфигурации nftables
sudo nano /etc/nftables.conf
#!/usr/sbin/nft -f
# Очистить существующие правила
flush ruleset
# Семейство inet охватывает IPv4 и IPv6
table inet filter {
chain input {
type filter hook input priority 0; policy drop;
# Разрешить loopback
iif lo accept
# Разрешить установленные соединения
ct state established,related accept
# ICMP (ping)
ip protocol icmp accept
ip6 nexthdr icmpv6 accept
# SSH
tcp dport 22 accept
# HTTP/HTTPS
tcp dport { 80, 443 } accept
# Логировать и отклонять
log prefix "nftables-drop: " drop
}
chain forward {
type filter hook forward priority 0; policy drop;
}
chain output {
type filter hook output priority 0; policy accept;
}
}
# Применить конфигурацию
sudo nft -f /etc/nftables.conf
# Проверить синтаксис (без применения)
sudo nft -c -f /etc/nftables.conf
Эквиваленты правил
Правила NAT
# iptables NAT
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.10:80
# Эквивалент nftables NAT
table ip nat {
chain prerouting {
type nat hook prerouting priority -100;
tcp dport 80 dnat to 192.168.1.10:80
tcp dport 443 dnat to 192.168.1.10:443
}
chain postrouting {
type nat hook postrouting priority 100;
oif eth0 masquerade
}
}
Ограничение скорости
# Ограничение скорости nftables
chain input {
tcp dport 22 limit rate 3/minute burst 5 packets accept
tcp dport 22 drop
}
IP-наборы
# Наборы nftables (встроенные)
table inet filter {
set blocked_ips {
type ipv4_addr
elements = { 1.2.3.4, 5.6.7.8 }
}
chain input {
type filter hook input priority 0; policy drop;
ip saddr @blocked_ips drop
tcp dport 22 accept
}
}
Миграция с iptables на nftables
Автоматическое преобразование
# Установить инструмент преобразования
sudo apt install iptables-nftables-compat -y
# Преобразовать существующие правила iptables
iptables-save | iptables-restore-translate -f /etc/nftables.conf
ip6tables-save | ip6tables-restore-translate >> /etc/nftables.conf
Ручные шаги миграции
# 1. Резервное копирование правил iptables
sudo iptables-save > /root/iptables-backup.txt
# 2. Создать конфигурацию nftables
sudo nano /etc/nftables.conf
# 3. Проверить конфигурацию
sudo nft -c -f /etc/nftables.conf
# 4. Включить nftables
sudo systemctl enable nftables
sudo nft -f /etc/nftables.conf
# 5. Отключить iptables
sudo systemctl disable iptables
sudo systemctl stop iptables
# 6. Проверить правила
sudo nft list ruleset
Когда что использовать?
Используйте iptables:
- Устаревшие системы (CentOS 7, Ubuntu 18.04)
- Существующие скрипты iptables
- Команда знакома с iptables
Используйте nftables:
- Новые установки (Ubuntu 20.04+, Debian 10+)
- Совместное управление IPv4 и IPv6
- Более чистый синтаксис
- Атомарные обновления правил
Начиная с Ubuntu 20.04 и Debian 10, команда iptables фактически запускает обёртку iptables-nft — то есть использует nftables под капотом. Используйте iptables-legacy для настоящего iptables.
Заключение
nftables заменяет iptables в современных Linux-системах. Он предлагает более последовательный синтаксис, унифицированное управление IPv4/IPv6 и лучшую производительность. Выбирайте nftables для новых установок; планируйте миграцию для существующей инфраструктуры iptables.
Связанные статьи
Сканирование на вредоносное ПО и руткиты: rkhunter и ClamAV
Защитите Linux-сервер от вредоносного ПО и руткитов. Установка rkhunter и ClamAV, настройка сканирования, интерпретация результатов, планирование сканирований и реагирование на инциденты.
Настройка Fail2Ban: Защита SSH от брутфорс-атак
Защитите сервер от SSH брутфорс-атак с помощью Fail2Ban. Установка, настройка jail.local, джейлы для Nginx/Apache, белый список IP, мониторинг блокировок и email-уведомления.
Настройка VPN-сервера WireGuard: пошаговое руководство
Настройте VPN-сервер WireGuard: генерация ключей, конфигурация сервера и клиента, IP-пересылка, правила брандмауэра и настройка клиентов Windows/Linux/Android.