Настройка netfilter с помощью iptables: шпаргалка и примеры
iptables настраивает брандмауэр netfilter в ядре Linux. Статья подойдёт и новичкам для понимания принципов, и опытным администраторам как шпаргалка.
В новых дистрибутивах
iptablesчасто является фронтендом надnftables. Синтаксис сохраняется, но проверяйте актуальный бэкенд командойiptables -Vиnft list ruleset.
Принцип настройки
Общий синтаксис:
iptables -t <таблица> <команда> <цепочка> [номер] <условие> -j <действие>
<таблица>— указывается ключом-t; по умолчаниюfilter.<команда>— действие над правилом (создать, удалить и т. д.).<цепочка>— например,INPUT,OUTPUT,FORWARD.[номер]— для команд, работающих с конкретным правилом.<условие>— критерии срабатывания.<действие>— что делать с пакетом.
Ключ действия не обязан быть в конце, но такой порядок читаемее.
Ключи iptables
Таблицы (-t)
| Ключ | Описание |
|---|---|
-t filter |
Таблица по умолчанию. Цепочки: INPUT (входящие), OUTPUT (исходящие), FORWARD (транзитные) |
-t nat |
Для устанавливающих новое соединение пакетов. Цепочки: PREROUTING, OUTPUT, POSTROUTING |
-t mangle |
Для изменения пакетов. Цепочки: INPUT, OUTPUT, FORWARD, PREROUTING, POSTROUTING |
-t raw |
Исключения в отслеживании соединений. Цепочки: PREROUTING, OUTPUT |
Команды
| Ключ | Описание и пример |
|---|---|
-A |
Добавить правило в конец: iptables -A INPUT -s 192.168.0.15 -j DROP |
-D |
Удалить правило: iptables -D INPUT 10 |
-I |
Вставить правило: iptables -I INPUT 5 -s 192.168.0.15 -j DROP |
-R |
Заменить правило: iptables -R OUTPUT 5 -s 192.168.0.15 -j ACCEPT |
-F |
Сбросить правила цепочки: iptables -F INPUT |
-Z |
Обнулить статистику: iptables -Z INPUT |
-N |
Создать цепочку: iptables -N CHAINNEW |
-X |
Удалить цепочку: iptables -X CHAINNEW |
-P |
Политика по умолчанию: iptables -P INPUT DROP |
-E |
Переименовать цепочку: iptables -E CHAINNEW CHAINOLD |
Условия
| Ключ | Описание и пример |
|---|---|
-p |
Протокол (tcp, udp, icmp, all): iptables -A INPUT -p tcp -j ACCEPT |
-s |
Источник (хост, IP, CIDR): iptables -A INPUT -s 192.168.0.50 -j DROP |
-d |
Назначение: iptables -A OUTPUT -d 192.168.0.50 -j DROP |
-i |
Входящий интерфейс: iptables -A INPUT -i eth2 -j DROP |
-o |
Исходящий интерфейс: iptables -A OUTPUT -o eth3 -j ACCEPT |
--dport |
Порт назначения: iptables -A INPUT -p tcp --dport 80 -j ACCEPT |
--sport |
Порт источника: iptables -A INPUT -p tcp --sport 1023 -j DROP |
Инверсия через !:
iptables -A INPUT -s ! 192.168.0.50 -j DROP
Запретит всех, кроме 192.168.0.50.
Действия (-j)
| Таблица | Действие | Описание |
|---|---|---|
| filter | ACCEPT |
Разрешить пакет |
| filter | DROP |
Запретить пакет |
| filter | REJECT |
Запретить с уведомлением источника |
| nat | MASQUERADE |
Замена адреса источника на адрес уходящего интерфейса |
| nat | SNAT |
Как MASQUERADE, но с указанием интерфейса |
| nat | DNAT |
Подмена адреса для входящих |
| nat | REDIRECT |
Перенаправление на другой порт той же системы |
| mangle | TOS / DSCP |
Приоритезация трафика |
| mangle | TTL / HL |
Изменение времени жизни (IPv4/IPv6) |
| mangle | MARK / CONNMARK |
Маркировка пакета/соединения |
| mangle | TCPMSS |
Изменение MTU |
Часто используемые команды
Общие
iptables -L --line-numbers # правила с номерами
iptables -t nat -L --line-numbers # правила таблицы nat
iptables -L -v # подробный вывод
iptables -F # удалить все правила
iptables -P INPUT DROP # политика: запрет входящих
iptables -P OUTPUT DROP # политика: запрет исходящих
Разрешить всё
Способ 1 — правилами:
iptables -I INPUT 1 -j ACCEPT
iptables -I OUTPUT 1 -j ACCEPT
iptables -I FORWARD 1 -j ACCEPT
Способ 2 — очисткой:
iptables -F
iptables -S
Способ 3 — отключение сервиса (для диагностики):
service iptables stop
Работа с правилами
# добавить в конец
iptables -A INPUT -p tcp --dport 25 -j ACCEPT
iptables -A INPUT -p tcp -s ! 192.168.0.25 --dport 993 -i eth0 -j ACCEPT
# диапазон портов
iptables -A INPUT -p tcp --dport 3000:4000 -j ACCEPT
# вставить правило
iptables -I FORWARD 15 -p udp -d 8.8.8.8 --dport 53 -i eth1 -j ACCEPT
# заблокировать IP на порту 25
iptables -I INPUT 1 -s 1.1.1.1 -p tcp --dport 25 -j DROP
# несколько портов
iptables -A INPUT -p tcp --match multiport --dports 20,21,25,80,8080,3000:4000 -j ACCEPT
Проброс портов (port forwarding)
Один порт, одинаковые порты — PREROUTING + POSTROUTING:
iptables -t nat -A PREROUTING -p tcp -m tcp -d 19.8.232.80 --dport 22 -j DNAT --to-destination 192.168.1.15:22
iptables -t nat -A POSTROUTING -p tcp -m tcp -s 192.168.1.15 --sport 22 -j SNAT --to-source 19.8.232.80:22
где 19.8.232.80 — адрес прослушивания, 22 — порт, 192.168.1.15 — внутренний адрес.
PREROUTING + FORWARD:
iptables -t nat -A PREROUTING -p tcp -i eth1 --dport 22 -j DNAT --to-destination 192.168.1.15:22
iptables -A FORWARD -p tcp -d 192.168.1.15 --dport 22 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
Разные порты:
iptables -t nat -A PREROUTING -p tcp -i eth1 --dport 8022 -j DNAT --to-destination 192.168.1.15:22
iptables -A FORWARD -p tcp -d 192.168.1.15 --dport 22 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
Диапазон портов:
iptables -t nat -I PREROUTING -p tcp -m tcp --dport 1000:5000 -j DNAT --to-destination 192.168.1.15:1000-5000
iptables -A FORWARD -d 192.168.1.15 -i eth1 -p tcp -m tcp --dport 1000:5000 -j ACCEPT
Стартовая настройка
iptables -I INPUT -p tcp --dport 22 -j ACCEPT
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -I INPUT -p icmp -j ACCEPT
iptables -I INPUT -i lo -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
Сброс к значениям по умолчанию
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
Сохранение правил
По умолчанию правила теряются после перезагрузки.
Способ 1. iptables-save (универсальный)
iptables-save > /etc/iptables.rules
iptables-restore < /etc/iptables.rules
В старых системах добавляли в /etc/network/interfaces строку pre-up iptables-restore.
Способ 2. iptables-persistent (Debian/Ubuntu)
apt install iptables-persistent
netfilter-persistent save
Способ 3. service iptables (CentOS)
yum install iptables-services
service iptables save # сохранит в /etc/sysconfig/iptables
systemctl enable iptables
В старых системах: chkconfig iptables on (CentOS), update-rc.d iptables defaults (Ubuntu).
Ubuntu и CentOS
В современных системах штатно используется не iptables, а ufw (Ubuntu) и firewalld (RPM).
CentOS / Rocky
yum install iptables-services
systemctl stop firewalld
systemctl disable firewalld
systemctl enable iptables
systemctl start iptables
Ubuntu
apt install iptables-persistent
ufw disable
Тонкости и подводные камни
-Ivs-A—-Iвставляет в начало,-A— в конец; при запрещающих правилах выше разрешающее может не сработать.DROPvsREJECT—DROPмолча отбрасывает,REJECTуведомляет источник.- Порядок обработки — PREROUTING/POSTROUTING (nat) до FORWARD (filter); при пробросе открывайте порт назначения.
- Сохранение обязательно — без
netfilter-persistent/iptables-servicesправила исчезнут. iptables -Svs-L—-Sвыводит правила в формате команд (удобно для скриптов).- nftables — проверяйте бэкенд;
iptables-legacyиiptables-nftмогут сосуществовать. - Блокировка SSH — перед
iptables -P INPUT DROPубедитесь, что правило для SSH добавлено. - Совместимость с Docker — Docker управляет своими цепочками; не очищайте их через
-F.
Шпаргалка
iptables -L --line-numbers
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -I INPUT 1 -s 1.1.1.1 -j DROP
iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to-destination 192.168.1.10:443
iptables-save > /etc/iptables.rules
netfilter-persistent save
Проверено на: Ubuntu 22.04/24.04/26.04, Rocky Linux 9 + iptables/nftables.
Дата: Сентябрь 2026.