Введение: Зачем нужна настройка iptables?
Представь, что твой сервер — это крепость. Без стражей у ворот любой может войти и натворить бед. iptables — это и есть твой главный страж, стандартный межсетевой экран (firewall) в ядре Linux. Его настройка — ключевой навык для любого администратора, будь ты работаешь с Ubuntu, Debian, CentOS или даже специализированными дистрибутивами вроде Astra Linux или Alt Linux.
Архитектура 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 в имена.
# Показать все правила в таблице filter (по умолчанию)
iptables -L -v -n
# Показать правила в таблице nat
iptables -t nat -L -v -n
# Показать правила с номерами строк (удобно для удаления)
iptables -L -v -n --line-numbers
Шаг 2: Сброс всех правил и установка политик по умолчанию
# Очистить все правила во всех цепочках
iptables -F
# Удалить все пользовательские цепочки
iptables -X
# Установить политики по умолчанию: DROP (запретить все)
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT # Разрешаем исходящий трафик
Шаг 3: Базовые правила безопасности
Теперь добавим минимально необходимые правила. Начнем с разрешения loopback-интерфейса и установленных соединений.
# Разрешить весь трафик на 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).
# Разрешить 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. Включение форвардинга пакетов
Сначала активируй пересылку пакетов на уровне ядра. Это глобальная настройка.
# Включить форвардинг временно
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.
# Предположим, внешний интерфейс - 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 для домашнего сервера.
# Пример: Проброс порта 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
# Устанавливаем пакет для сохранения правил (если нет)
apt install iptables-persistent
# Во время установки спросит, сохранить текущие правила IPv4/IPv6.
# Или сохранить вручную:
iptables-save > /etc/iptables/rules.v4
ip6tables-save > /etc/iptables/rules.v6
# Правила загрузятся автоматически при старте системы.
CentOS / RHEL
# Сохраняем правила в стандартный файл
iptables-save > /etc/sysconfig/iptables
# Для применения при загрузке убедись, что служба iptables включена
systemctl enable iptables # В старых версиях: service iptables save
Особенности настройки iptables для Docker
Docker настройка iptables — отдельная тема. Docker сам управляет правилами, создавая цепочку DOCKER и DOCKER-USER. Важно не ломать его логику.
DOCKER-USER в таблице filter.
# Пример: Ограничить доступ к контейнерам 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.
Как удалить конкретное правило?
# 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 для бэкапа и переноса конфигураций между серверами. Удачи в освоении мощного инструмента!