March 1

Практическое руководство по IPTABLES: правила, примеры и лучшие практики безопасности

Это перевод оригинальной статьи Linux IPTABLES Firewall Practical Guide: Rules, Examples & Security Best Practices (Linux Firewall).

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

Брандмауэр на уровне ядра с объяснением правил, кейсов и шпаргалкой для админов

📖 Что такое IPTables?

IPTables — это брандмауэр на уровне ядра в Linux, построенный на фреймворке Netfilter. Он фильтрует, модифицирует, разрешает или блокирует сетевой трафик на уровне ОС, что делает его одним из самых мощных и гибких инструментов для защиты Linux.

⚠️ Примечание: IPTables — это программный брандмауэр, а не аппаратный (хотя он выполняет аналогичные функции безопасности).

🎯 Какую проблему решает IPTables?

Без брандмауэра:

  • Любой хост может получить доступ к вашему серверу.
  • Сервисы открыты в интернет
  • Системы уязвимы к brute-force и DoS-атакам.
  • Отсутствует контроль над входящим/исходящим трафиком.

IPTables позволяет:

  • Блокировать неавторизованный доступ
  • Контролировать порты входящего и исходящего трафика
  • Предотвращать подмену IP-адреса
  • Защищать от DoS-атак
  • Обеспечивать безопасность Linux-серверов (физических, виртуальных, облачных)

🧠 Основные понятия (важно для администраторов и DevOps)

Основы работы с IPTables

  • iptables → Команда / утилита / инструмент
  • Rules → Хранятся в оперативной памяти (временно, если не сохранены).
  • Chains → INPUT, OUTPUT, FORWARD
  • Tables → filter, nat, mangle, raw
  • Targets → ACCEPT, DROP, REJECT, LOG, DNAT, SNAT

📦 Проверка установки и состояния IPTables

rpm -qa | grep -i iptables
/etc/init.d/iptables status
which iptables

🧩 IPTables работает на 3-4 уровнях модели OSI

  • Сетевой уровень (уровень 3) — IP
  • Транспортный уровень (уровень 4) — TCP / UDP / ICMP

🔗 Таблицы IPTables

1️⃣ filter (по умолчанию)

  • INPUT → Входящий трафик
  • OUTPUT → Исходящий трафик
  • FORWARD → Маршрутизированный трафик

2️⃣ nat

  • PREROUTING → Переадресация портов (DNAT)
  • POSTROUTING → SNAT / MASQUERADE
  • OUTPUT → Локальный NAT

3️⃣ mangle

  • Модификация заголовков пакетов
  • Изменения QoS, TTL, TOS

4️⃣ raw

  • Отключение отслеживания соединений (NOTRACK)

🔁 Общие действия

🧪 Базовые команды IPTables

Просмотр правил

iptables -L
iptables -L -n -v
iptables -n -L -v --line-numbers

Очистка правил (временно):

iptables -F
iptables -X

Сохранение правил (постоянно)

service iptables save

🚫 Блокировка всего трафика (аварийная ситуация)

iptables -A INPUT -s 0.0.0.0/0 -j REJECT

⚠️ Временно (только в оперативной памяти) — сохраните, чтобы изменения сохранились.

🔐 Блокировка конкретного IP

iptables -A INPUT -s 192.168.1.94 -j DROP

🌐 Блокировка подсети

iptables -A INPUT -s 192.168.8.0/24 -j DROP

🚪 Блокировка порта

iptables -A INPUT -p tcp --dport 80 -j DROP

🎯 Блокировка порта для конкретного IP-адреса

iptables -A INPUT -s 192.168.1.10 -p tcp --dport 80 -j DROP

🔄 Разрешение SSH (безопасное правило)

iptables -A INPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

🛑 Политика по умолчанию Drop (рекомендации для продакшена)

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

📡 Контроль ICMP (Ping)

Блокировка Ping

iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

Разрешение Ping из внутренней сети

iptables -A INPUT -s 192.168.1.0/24 -p icmp -j ACCEPT

🧯 Предотвращение подмены IP

iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP
iptables -A INPUT -i eth1 -s 192.168.0.0/16 -j DROP

📝 Логирование и блокировка пакетов

iptables -A INPUT -s 10.0.0.0/8 -j LOG --log-prefix "IP_SPOOF: "
iptables -A INPUT -s 10.0.0.0/8 -j DROP

Логи отображаются в:

/var/log/messages

⏱️ Ограничение скорости (защита от DoS-атак)

iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT

🔁 Диапазон разрешенных портов

iptables -A INPUT -p tcp --dport 7000:7010 -j ACCEPT

🔀 Порт-форвардинг (DNAT)

iptables -t nat -A PREROUTING -p tcp --dport 422 -j DNAT --to 192.168.1.10:22

🧠 Реальные сценарии использования (Admin & DevOps)

📌 Рекомендации по использованию IPTables

✔ Всегда разрешайте SSH перед DROP
✔ Сохраняйте правила после тестирования
✔ Используйте stateful правила
✔ Ведите логирование перед DROP
✔ Документируйте правила
✔ Предпочитайте nftables на новых дистрибутивах

⚠️ Важное примечание (для современных версий Linux)

  • IPTables устарел на новых системах.
  • nftables — это будущее
  • IPTables всё ещё широко используется в RHEL 6/7, в legacy-системах и на интервью

IPTables — это мощный, низкоуровневый фаервол, который должен глубоко понимать каждый:

  • Администратор Linux
  • DevOps-инженер
  • Cloud инженер

Освоение IPTables даст вам:

  • Надёжные основы безопасности
  • Уверенность при инцидентах в продакшене
  • Более глубокое понимание понимание облачных фаерволов

На этом все! Спасибо за внимание! Если статья была интересна, подпишитесь на телеграм-канал usr_bin, где будет еще больше полезной информации.