Gymterview
middle

Что такое iptables и как работает фильтрация трафика?

iptables — утилита для управления встроенным в ядро Linux межсетевым экраном (Netfilter), позволяющая задавать правила фильтрации, NAT и модификации сетевых пакетов.

Аналогия: iptables — это охранник на проходной с таблицей правил: кого пускать, кого нет и куда направлять. Каждый пакет проходит проверку по списку правил сверху вниз, и первое совпавшее правило определяет судьбу пакета.

Таблицы (tables)

Таблица Назначение
filter Фильтрация пакетов (разрешить/запретить). Используется по умолчанию
nat Трансляция сетевых адресов (SNAT, DNAT, MASQUERADE)
mangle Модификация заголовков пакетов (TTL, TOS, маркировка)
raw Обработка пакетов до отслеживания соединений (conntrack)

Цепочки (chains) таблицы filter

Цепочка Когда применяется
INPUT Входящие пакеты, адресованные этому серверу
OUTPUT Исходящие пакеты от этого сервера
FORWARD Пакеты, проходящие через сервер транзитом (маршрутизация)

Основные команды

Пример
# Просмотр всех правил
sudo iptables -L -n -v

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

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

Примеры правил фильтрации

Пример
# Разрешить входящие SSH-подключения
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# Разрешить входящий трафик на порт 8080 (Java-приложение)
sudo iptables -A INPUT -p tcp --dport 8080 -j ACCEPT

# Разрешить подключения только из определённой подсети
sudo iptables -A INPUT -s 10.10.0.0/16 -p tcp --dport 5432 -j ACCEPT

# Запретить все остальные подключения к PostgreSQL
sudo iptables -A INPUT -p tcp --dport 5432 -j DROP

# Разрешить loopback-трафик
sudo iptables -A INPUT -i lo -j ACCEPT

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

Пример базовой конфигурации для сервера приложений

Полный набор правил iptables
# Сброс всех правил
sudo iptables -F
sudo iptables -X

# Политики по умолчанию: всё запретить
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT

# Разрешить loopback
sudo iptables -A INPUT -i lo -j ACCEPT

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

# SSH только из управляющей подсети
sudo iptables -A INPUT -s 10.0.1.0/24 -p tcp --dport 22 -j ACCEPT

# HTTP/HTTPS от балансировщика нагрузки
sudo iptables -A INPUT -s 10.0.10.0/24 -p tcp --dport 8080 -j ACCEPT

# Мониторинг (Prometheus metrics)
sudo iptables -A INPUT -s 10.0.20.0/24 -p tcp --dport 9090 -j ACCEPT

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

NAT — трансляция адресов

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

# Маскарадинг для выхода в интернет через NAT
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Сохранение правил

Пример
# Установить пакет для сохранения
sudo apt install iptables-persistent

# Сохранить текущие правила
sudo netfilter-persistent save

# Файлы правил: /etc/iptables/rules.v4, /etc/iptables/rules.v6

На собеседовании: интервьюер ожидает понимание таблиц (filter, nat) и цепочек (INPUT, OUTPUT, FORWARD), а также умение составить базовый набор правил. Частая ошибка — не упомянуть порядок обработки правил (сверху вниз) и правило для ESTABLISHED-соединений.