Определение простыми словами
iptables — это интерфейс командной строки к встроенному в ядро Linux фильтру netfilter. С его помощью администратор описывает, какой сетевой трафик разрешён, какой запрещён, что нужно перенаправить или преобразовать (NAT). По сути это «движок» большинства Linux-фаерволов, в том числе ufw, firewalld и docker-bridge.
Правила собираются в цепочки: INPUT (входящий трафик к самому хосту), OUTPUT (исходящий), FORWARD (проходящий насквозь), плюс PREROUTING и POSTROUTING для NAT. Цепочки — внутри таблиц filter, nat, mangle, raw.
Сравнение
| Инструмент | Уровень | Сложность | Когда использовать |
|---|---|---|---|
| iptables | Низкий | Высокая | Тонкая настройка, скрипты, legacy |
| nftables | Низкий | Средняя | Современная замена iptables |
| ufw | Высокий | Низкая | Базовая защита одного сервера |
| firewalld | Высокий | Средняя | RHEL/CentOS-семейство |
Кейсы использования
- Закрытие всех портов кроме SSH, HTTP, HTTPS на VPS.
- NAT и port-forwarding на домашнем роутере или шлюзе офиса.
- Ограничение скорости входящих SYN-пакетов для защиты от SYN-флуда.
- Изоляция docker-сетей и проброс портов контейнеров.
- Маркировка трафика для последующего QoS через tc.
Когда iptables неуместен: для прикладной фильтрации HTTP-запросов — нужен WAF. Для управления десятками тысяч правил эффективнее ipset или nftables. Для одноразовой защиты сервера от брутфорса быстрее поднять fail2ban или ufw.
Технические детали
Базовый набор правил для VPS — закрыть всё, кроме нужного, и сохранить:
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
sudo apt install iptables-persistent
sudo netfilter-persistent save
Просмотр действующих правил, статистики и удаление:
sudo iptables -L -n -v --line-numbers
sudo iptables -t nat -L -n -v
sudo iptables -D INPUT 5
sudo iptables -F
Для NAT часто используется такая запись:
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to 10.0.0.5:80
В современных дистрибутивах команды iptables под капотом часто транслируются в nftables через iptables-nft. Подробнее о принципах фильтрации — в статье Firewall.
🔥 Где это применяется
Частые вопросы
iptables ещё актуален или нужно сразу учить nftables?
Актуален. Команды iptables работают на большинстве серверов, скрипты и документация массово на iptables. nftables учить полезно — он официальный преемник, но переход обычно постепенный.
Как сохранить правила между перезагрузками?
Установить пакет iptables-persistent (Debian/Ubuntu) или iptables-services (CentOS). Команды netfilter-persistent save и netfilter-persistent reload закрепят конфигурацию.
Можно ли использовать iptables и ufw одновременно?
Технически — да, ufw это обёртка над iptables. На практике лучше выбрать что-то одно: смешение приводит к конфликтам и трудно отлаживается.
Чем INPUT отличается от FORWARD?
INPUT — пакеты, адресованные самому серверу. FORWARD — пакеты, проходящие через сервер транзитом (актуально для роутеров и шлюзов). OUTPUT — исходящие от сервера наружу.