2026-09-18
Настройка netfilter с помощью iptables: шпаргалка и примеры

Настройка 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

Тонкости и подводные камни

  • -I vs -A-I вставляет в начало, -A — в конец; при запрещающих правилах выше разрешающее может не сработать.
  • DROP vs REJECTDROP молча отбрасывает, REJECT уведомляет источник.
  • Порядок обработки — PREROUTING/POSTROUTING (nat) до FORWARD (filter); при пробросе открывайте порт назначения.
  • Сохранение обязательно — без netfilter-persistent/iptables-services правила исчезнут.
  • iptables -S vs -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.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *