Настройка iptables в Linux: правила, NAT, Docker (Ubuntu, Debian, CentOS) | AdminWiki

Полное руководство по настройке iptables для Linux: от основ до NAT и Docker

17 декабря 2025 8 мин. чтения #centos #debian #docker #firewall #iptables #linux #nat #ubuntu #сетевая безопасность

Введение: Зачем нужна настройка iptables?

Представь, что твой сервер — это крепость. Без стражей у ворот любой может войти и натворить бед. iptables — это и есть твой главный страж, стандартный межсетевой экран (firewall) в ядре Linux. Его настройка — ключевой навык для любого администратора, будь ты работаешь с Ubuntu, Debian, CentOS или даже специализированными дистрибутивами вроде Astra Linux или Alt Linux.

Эта статья — твой менторский гид. Мы разберем iptables с нуля, от базовых понятий до сложных сценариев, включая настройку NAT iptables и интеграцию с Docker.

Архитектура iptables: Цепочки, таблицы и правила

Давай разберем, как устроен iptables. Это не просто список запретов, а система таблиц с цепочками правил.

Основные таблицы

  • filter (по умолчанию): Отвечает за фильтрацию пакетов (разрешить/запретить). Содержит цепочки INPUT, FORWARD, OUTPUT.
  • nat: Для трансляции сетевых адресов (NAT). Содержит цепочки PREROUTING, POSTROUTING, OUTPUT.
  • mangle: Для модификации заголовков пакетов (TTL, TOS).
  • raw: Для работы с пакетами до начала отслеживания состояний.

Ключевые цепочки (Chains)

Цепочка Назначение Таблица
INPUT Пакеты, предназначенные этому серверу filter
OUTPUT Пакеты, исходящие с этого сервера filter, nat
FORWARD Пакеты, которые сервер пересылает (роутер) filter
PREROUTING Изменение адреса перед маршрутизацией (DNAT) nat, mangle

Практика: Базовая настройка правил iptables

Перейдем к практике. Вот пошаговый алгоритм начальной настройки iptables сервера.

Шаг 1: Просмотр текущих правил

Всегда смотри, что уже настроено. Используй ключ -v для подробного вывода и -n, чтобы не резолвить IP в имена.

bash
# Показать все правила в таблице filter (по умолчанию)
iptables -L -v -n

# Показать правила в таблице nat
iptables -t nat -L -v -n

# Показать правила с номерами строк (удобно для удаления)
iptables -L -v -n --line-numbers

Шаг 2: Сброс всех правил и установка политик по умолчанию

Внимание! Выполняй эти команды только при прямом подключении к серверу (не через SSH), иначе потеряешь доступ. Или настрой правила для SSH до сброса.
bash
# Очистить все правила во всех цепочках
iptables -F

# Удалить все пользовательские цепочки
iptables -X

# Установить политики по умолчанию: DROP (запретить все)
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT  # Разрешаем исходящий трафик

Шаг 3: Базовые правила безопасности

Теперь добавим минимально необходимые правила. Начнем с разрешения loopback-интерфейса и установленных соединений.

bash
# Разрешить весь трафик на loopback-интерфейс (lo)
iptables -A INPUT -i lo -j ACCEPT

# Разрешить ответы на исходящие соединения (состояние ESTABLISHED, RELATED)
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# Разрешить ICMP (ping) для диагностики
iptables -A INPUT -p icmp -j ACCEPT

Шаг 4: Открываем необходимые порты

Ключевой момент настройки iptables сервера — открытие портов для служб. Пример для SSH (22), HTTP (80), HTTPS (443).

bash
# Разрешить SSH (TCP порт 22) с любого адреса
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# Разрешить HTTP и HTTPS
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# Пример: разрешить доступ к порту 5432 только с конкретной подсети
iptables -A INPUT -p tcp --dport 5432 -s 192.168.1.0/24 -j ACCEPT

Настройка NAT в iptables: Маскировка и проброс портов

Настройка NAT iptables превращает твой Linux-сервер в роутер или шлюз. Это часто требуется в Debian Linux настройке nat iptables для домашней сети или в облаке.

1. Включение форвардинга пакетов

Сначала активируй пересылку пакетов на уровне ядра. Это глобальная настройка.

bash
# Включить форвардинг временно
echo 1 > /proc/sys/net/ipv4/ip_forward

# Для сохранения после перезагрузки (Debian/Ubuntu)
echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf
sysctl -p

# Для CentOS / RHEL
# Файл /etc/sysctl.d/99-ip-forward.conf

2. Маскировка исходящего трафика (MASQUERADE)

Самый частый сценарий: внутренняя сеть выходит в интернет через твой сервер. Нужно правило MASQUERADE в таблице nat.

bash
# Предположим, внешний интерфейс - eth0
# Маскируем трафик, идущий с внутренней сети 192.168.1.0/24 вовне
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

# Разрешаем форвардинг для этой внутренней сети в таблице filter
iptables -A FORWARD -s 192.168.1.0/24 -j ACCEPT
iptables -A FORWARD -d 192.168.1.0/24 -j ACCEPT

3. Проброс портов (Port Forwarding / DNAT)

Нужно перенаправить порт с внешнего IP сервера на порт внутренней машины. Это и есть Alt Linux iptables настройка nat для домашнего сервера.

bash
# Пример: Проброс порта 2222 внешнего интерфейса на порт 22 внутренней машины 192.168.1.100
iptables -t nat -A PREROUTING -p tcp --dport 2222 -i eth0 -j DNAT --to-destination 192.168.1.100:22

# Обязательно разрешаем форвардинг этого соединения
iptables -A FORWARD -p tcp -d 192.168.1.100 --dport 22 -j ACCEPT

Сохраняем настройки iptables

Правила, добавленные через командную строку, сбрасываются после перезагрузки. Вот как сделать настройки iptables постоянными.

Debian / Ubuntu

bash
# Устанавливаем пакет для сохранения правил (если нет)
apt install iptables-persistent

# Во время установки спросит, сохранить текущие правила IPv4/IPv6.
# Или сохранить вручную:
iptables-save > /etc/iptables/rules.v4
ip6tables-save > /etc/iptables/rules.v6

# Правила загрузятся автоматически при старте системы.

CentOS / RHEL

bash
# Сохраняем правила в стандартный файл
iptables-save > /etc/sysconfig/iptables

# Для применения при загрузке убедись, что служба iptables включена
systemctl enable iptables  # В старых версиях: service iptables save

Особенности настройки iptables для Docker

Docker настройка iptables — отдельная тема. Docker сам управляет правилами, создавая цепочку DOCKER и DOCKER-USER. Важно не ломать его логику.

Docker вносит свои правила в начало цепочек. Чтобы добавить свои правила, которые будут проверяться до правил Docker, используй цепочку DOCKER-USER в таблице filter.
bash
# Пример: Ограничить доступ к контейнерам Docker только с определенной подсети
# Правило в цепочке DOCKER-USER будет применено ДО перехода в цепочку DOCKER
iptables -I DOCKER-USER -i eth0 ! -s 10.0.0.0/24 -j DROP

# Разрешить доступ к порту 8080 на хосте (проброшенному в контейнер) только из локальной сети
iptables -I DOCKER-USER -i eth0 -p tcp --dport 8080 ! -s 192.168.1.0/24 -j DROP

Частые вопросы (FAQ) по настройке iptables

Где хранится файл настроек iptables?

Сами правила — в ядре. Для сохранения их сбрасывают в текстовый файл. В Debian/Ubuntu/etc/iptables/rules.v4. В CentOS/RHEL/etc/sysconfig/iptables. В Astra Linux и Alt Linux подход аналогичен Debian.

Как настроить iptables в Debian 12?

Debian 12 настройка iptables не отличается от более ранних версий. Установи пакет iptables-persistent, настрой правила через командную строку и сохрани командой iptables-save > /etc/iptables/rules.v4.

Как удалить конкретное правило?

bash
# 1. Найди номер правила в цепочке
iptables -L INPUT --line-numbers
# 2. Удали правило по номеру цепочки и номеру правила
iptables -D INPUT 3  # Удалит правило №3 из цепочки INPUT

Почему не работает NAT или форвардинг?

Проверь три вещи: 1) Включен ли ip_forward (cat /proc/sys/net/ipv4/ip_forward). 2) Есть ли правила в таблице nat (iptables -t nat -L -v). 3) Разрешён ли FORWARD для нужных подсетей в таблице filter.

Заключение

Настройка iptables — фундаментальный навык. Начни с простой политики: DROP на INPUT, ACCEPT на OUTPUT, открой только нужные порты. Освой настройку NAT iptables для шлюза. Помни про цепочку DOCKER-USER при работе с контейнерами. Экспериментируй на тестовом стенде, всегда имей запасной способ доступа к серверу, и твоя сетевая безопасность будет на высоте.

Используй команды iptables-save и iptables-restore для бэкапа и переноса конфигураций между серверами. Удачи в освоении мощного инструмента!

Поделиться:
Сохранить гайд? В закладки браузера