Iptables: Управление / конфигурирование

Материал из КРАТКАЯ СПРАВОЧНАЯ DIGITAL-ORGY
Версия от 07:13, 29 мая 2026; Ross (обсуждение | вклад)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигации Перейти к поиску

Межсетевой экран iptables (Основы)

📌 Что такое iptables?

iptables — это классическая утилита командной строки, которая является стандартным интерфейсом для управления межсетевым экраном (брандмауэром) в Linux. Она управляет правилами фильтрации и маршрутизации сетевых пакетов на уровне ядра (подсистема netfilter).

Примечание: В современных дистрибутивах (например, Ubuntu 22.04+) под капотом часто работает более новый движок nftables, но iptables сохраняется как удобная, стабильная и самая популярная оболочка для управления сетью.

🏗 Архитектура: Таблицы, Цепочки и Действия

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

Основные Таблицы (Tables)

Таблицы определяют глобальную цель обработки пакета:

  • filter (используется по умолчанию): Отвечает за безопасность — разрешить или заблокировать трафик.
  • nat: Отвечает за маршрутизацию и трансляцию адресов (проброс портов, маскарад IP). Критически важна для работы VPN и Docker-контейнеров.
  • mangle: Используется для специфического изменения заголовков пакетов (применяется редко в базовой настройке).

Основные Цепочки (Chains)

Внутри таблиц находятся цепочки. Они указывают, на каком этапе пути находится пакет:

  • INPUT — входящие пакеты, конечной целью которых является сам сервер (например, подключение по SSH к серверу).
  • OUTPUT — исходящие пакеты, сгенерированные самим сервером и уходящие в сеть.
  • FORWARD — транзитные пакеты, проходящие через сервер (например, трафик из VPN-туннеля, идущий в интернет, или трафик Docker-сети).

Действия (Targets)

Действие указывает, что сделать с пакетом, если он подошел под правило:

  • ACCEPT — пропустить пакет дальше.
  • DROP — молча уничтожить пакет (рекомендуется для защиты от сканеров, так как атакующий не получает никакого ответа).
  • REJECT — отбросить пакет, но отправить отправителю уведомление об ошибке (Connection refused).

🚀 Шпаргалка по командам

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

# Показать правила основной таблицы (filter) с подробной статистикой пакетов. 
# Ключ -n запрещает DNS-резолвинг, показывая чистые IP-адреса, что сильно ускоряет вывод.
sudo iptables -L -n -v

# Показать правила маршрутизации и проброса портов (таблица NAT)
sudo iptables -t nat -L -n -v

Управление правилами

# Разрешить входящий трафик на порт 22 (SSH) из любого места
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# Разрешить весь трафик с определенного IP-адреса
sudo iptables -A INPUT -s 192.168.1.50 -j ACCEPT

# Заблокировать конкретный IP-адрес
sudo iptables -A INPUT -s 10.10.10.10 -j DROP

# Разрешить весь трафик на локальном интерфейсе (loopback) - необходимо для работы внутренних служб
sudo iptables -A INPUT -i lo -j ACCEPT

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

Удаление правил

# Удалить правило из цепочки INPUT по его порядковому номеру (например, правило №2)
sudo iptables -D INPUT 2

# ОСТОРОЖНО: Полностью очистить (удалить) все правила в таблице filter!
sudo iptables -F

⚠️ Важные особенности

  1. Порядок чтения: iptables читает правила в цепочке строго сверху вниз. Как только пакет совпадает с условием правила, применяется действие (ACCEPT или DROP), и дальнейшие правила для этого пакета не проверяются. Поэтому более узкие разрешающие правила всегда должны стоять выше общих запрещающих (DROP).
  2. Энергозависимость: Все правила, введенные через терминал, живут только в оперативной памяти и исчезают при перезагрузке ОС. Для их сохранения обязательно использование утилиты iptables-persistent (см. соответствующую статью базы знаний).
  3. Скрытые правила Docker: Демон Docker активно вмешивается в работу iptables (в цепочки FORWARD и DOCKER-USER), создавая собственные правила для проброса портов к контейнерам. Если вы используете UFW или простые правила в INPUT, учтите, что проброшенные порты Docker могут быть доступны извне в обход ваших блокировок.