Настройка iptables: пошаговое руководство, правила, примеры конфигурации | AdminWiki

Настройка межсетевого экрана iptables: Полное руководство для DevOps и администраторов

18 декабря 2025 8 мин. чтения #devops #firewall #iptables #linux #безопасность #межсетевой экран #настройка фаервола #сетевая безопасность

Представь, что твой сервер — это крепость. Без надежных стен и ворот любая угроза может проникнуть внутрь. Межсетевой экран iptables — это как раз тот самый современный, гибкий и мощный механизм защиты, который контролирует весь сетевой трафик. Давай разберем, как правильно его настроить, чтобы твоя "крепость" была неприступной.

Основы архитектуры iptables: таблицы и цепочки

Прежде чем переходить к настройке, важно понять базовую структуру. Iptables работает с тремя основными таблицами:

Таблица Назначение Стандартные цепочки
filter Фильтрация пакетов (основная таблица) INPUT, FORWARD, OUTPUT
nat Преобразование сетевых адресов PREROUTING, POSTROUTING, OUTPUT
mangle Модификация заголовков пакетов Все цепочки
Важно: По умолчанию все команды iptables применяются к таблице filter. Для работы с другими таблицами используй ключ -t (например, iptables -t nat).

Практическая настройка межсетевого экрана: пошаговое руководство

Давай настроим типичный конфигурационный файл фаервола для веб-сервера. Сначала очистим все существующие правила и установим политики по умолчанию.

Шаг 1: Базовые настройки и очистка правил

bash
#!/bin/bash
# Сбрасываем все правила и счетчики
iptables -F
iptables -X
iptables -Z

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

# Разрешаем localhost (loopback интерфейс)
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# Разрешаем уже установленные и связанные соединения
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Шаг 2: Настройка правил для веб-сервера

Теперь добавим правила для доступа к сервисам. Это основа конфигурации межсетевого экрана.

bash
# SSH доступ только с определенной сети
iptables -A INPUT -p tcp --dport 22 -s 192.168.1.0/24 -j ACCEPT

# Веб-сервер (HTTP/HTTPS) для всех
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# DNS запросы (если сервер сам делает запросы)
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT

# Ping (ICMP) - разрешаем для диагностики
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

Шаг 3: Защита от атак и дополнительные правила

bash
# Защита от SYN-flood атак
iptables -N SYN_FLOOD
iptables -A SYN_FLOOD -m limit --limit 10/second --limit-burst 20 -j RETURN
iptables -A SYN_FLOOD -j DROP
iptables -A INPUT -p tcp --syn -j SYN_FLOOD

# Блокировка известных плохих IP-адресов (пример)
iptables -A INPUT -s 10.0.0.0/8 -j DROP

# Лимит соединений для SSH (не более 3 попыток в минуту)
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent \
  --set --name SSH
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent \
  --update --seconds 60 --hitcount 4 --name SSH -j DROP
Внимание: При настройке правил SSH убедись, что у тебя есть альтернативный способ доступа к серверу. Ошибка в правиле может заблокировать тебя навсегда!

Работа с NAT и перенаправлением портов

Часто требуется настроить перенаправление портов или маскировку адресов. Для этого используем таблицу nat.

bash
# Маскировка исходящих соединений (MASQUERADE)
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# Перенаправление порта 8080 на внутренний сервер
iptables -t nat -A PREROUTING -p tcp --dport 8080 \
  -j DNAT --to-destination 192.168.1.100:80

# Соответствующее правило в filter таблице для форвардинга
iptables -A FORWARD -p tcp -d 192.168.1.100 --dport 80 -j ACCEPT

Сохранение и восстановление правил iptables

Правила, установленные через командную строку, сбрасываются после перезагрузки. Давай сохраним нашу конфигурацию.

bash
# Сохраняем текущие правила в файл
iptables-save > /etc/iptables/rules.v4

# Для автоматической загрузки при старте системы:
# Ubuntu/Debian:
apt-get install iptables-persistent

# CentOS/RHEL:
yum install iptables-services
systemctl enable iptables

# Восстановление правил из файла
iptables-restore < /etc/iptables/rules.v4

Мониторинг и отладка правил iptables

После настройки важно проверить, что все работает как задумано.

bash
# Просмотр всех правил с номерами строк
iptables -L -n -v --line-numbers

# Просмотр правил в конкретной цепочке
iptables -L INPUT -n -v

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

# Мониторинг трафика в реальном времени (счетчики пакетов)
watch -n 1 'iptables -L INPUT -n -v'

# Логирование отклоненных пакетов
iptables -A INPUT -j LOG --log-prefix "IPTABLES-DROP: "

Часто задаваемые вопросы (FAQ)

Чем iptables отличается от firewalld и ufw?

Iptables — это низкоуровневый инструмент, который напрямую работает с ядром Linux. Firewalld и UFW — это фронтенды (обертки) над iptables/nftables, которые упрощают настройку через свои конфиги и команды. Для сложных сценариев iptables дает полный контроль.

Как разрешить диапазон портов в iptables?

Используй параметр --dport с указанием диапазона: iptables -A INPUT -p tcp --dport 8000:8010 -j ACCEPT. Это разрешит порты с 8000 по 8010 включительно.

Почему не сохраняются правила после перезагрузки?

Правила хранятся в памяти ядра. Для сохранения используй iptables-save и службу iptables-persistent (на Debian/Ubuntu) или iptables-services (на RHEL/CentOS).

Как полностью отключить iptables?

Выполни: iptables -F (очистка правил), iptables -X (удаление пользовательских цепочек), iptables -P INPUT ACCEPT, iptables -P FORWARD ACCEPT, iptables -P OUTPUT ACCEPT. Но лучше не отключать, а правильно настроить!

Лучшие практики настройки межсетевого экрана

  • Принцип минимальных привилегий: Разрешай только то, что действительно необходимо
  • Логирование: Настрой логирование для критических правил для последующего анализа
  • Регулярный аудит: Периодически проверяй актуальность правил
  • Тестирование в staging: Всегда тестируй новые правила на тестовом окружении
  • Документация: Веди документацию по всем правилам и их назначению
  • Резервные копии: Сохраняй рабочие конфигурации в системе контроля версий
Совет от ментора: Для production-серверов рассмотри использование более современных аналогов — nftables (преемник iptables) или облачных фаерволов провайдера. Но понимание iptables — это фундамент, который пригодится в любой ситуации.

Готовые примеры конфигураций

Приведу несколько типовых сценариев, которые часто встречаются на практике.

Базовая конфигурация для веб-сервера

bash
#!/bin/bash
# /etc/iptables/web-server.sh

IPT="/sbin/iptables"

# Сброс
$IPT -F
$IPT -X
$IPT -Z

# Политики по умолчанию
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT ACCEPT

# Localhost и установленные соединения
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# Веб-сервисы
$IPT -A INPUT -p tcp --dport 80 -j ACCEPT      # HTTP
$IPT -A INPUT -p tcp --dport 443 -j ACCEPT     # HTTPS
$IPT -A INPUT -p tcp --dport 22 -j ACCEPT      # SSH

# ICMP (ping)
$IPT -A INPUT -p icmp -j ACCEPT

# Сохраняем правила
$IPT-save > /etc/iptables/rules.v4
echo "Правила iptables применены и сохранены"

Конфигурация для шлюза (роутера)

bash
#!/bin/bash
# Шлюз между eth0 (WAN) и eth1 (LAN)

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

# Очистка правил
iptables -F
iptables -t nat -F
iptables -X

# Маскировка исходящего трафика с LAN
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# Разрешаем форвардинг для LAN
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -m conntrack \
  --ctstate ESTABLISHED,RELATED -j ACCEPT

# Базовые правила для самого шлюза
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i eth1 -j ACCEPT  # Принимаем с LAN

# Защита WAN интерфейса
iptables -A INPUT -i eth0 -p tcp --dport 22 -j DROP  # SSH только из LAN

Заключение

Настройка межсетевого экрана iptables — это не разовая задача, а процесс. Начни с простой, но безопасной конфигурации, постепенно добавляя правила по мере необходимости. Помни про принцип «запрещено все, что не разрешено явно» — это основа безопасности.

Ключевые моменты, которые нужно запомнить:

  • Всегда настраивай политики по умолчанию перед добавлением правил
  • Разрешай loopback и установленные соединения в первую очередь
  • Используй конкретные адреса и порты вместо широких разрешений
  • Не забывай сохранять правила и настраивать автозагрузку
  • Тестируй каждое новое правило перед применением на production

С опытом ты научишься создавать сложные конфигурации, но даже базовые знания iptables значительно повысят безопасность твоих серверов. Удачи в настройке!

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