Рубрики: Технологии

Iptables в Ubuntu: полная настройка сетевого экрана с нуля

Системы на базе Linux давно завоевали серверный сегмент благодаря надежности и гибкости. Но любая инфраструктура требует защиты, и здесь на сцену выходит iptables - мощнейший инструмент для управления сетевым трафиком и помощь в построении ИБ https://www.securityvision.ru/blog/kategorirovanie-obektov-kriticheskoy-informatsionnoy-infrastruktury-v-ramkakh-187-fz-chast-1-postano/. Я покажу, как превратить стандартный брандмауэр в настоящую крепость.

Что такое iptables

Iptables представляет собой интерфейс управления для встроенного в ядро Linux механизма Netfilter. Это не просто программа, а целая экосистема фильтрации пакетов. Когда сетевой пакет попадает в систему, он проходит через цепочки правил, где каждое правило решает его судьбу.

Как это работает на практике? Представьте себе контрольно-пропускной пункт с несколькими уровнями досмотра. Iptables проверяет каждый пакет, сверяет его с таблицами маршрутизации и принимает решение: пропустить, отбросить или модифицировать.

Возможности iptables впечатляют:

  • Детальная фильтрация по IP-адресам, портам, протоколам и интерфейсам
  • Отслеживание состояний соединений (stateful inspection)
  • Трансляция сетевых адресов (NAT) для организации доступа в интернет
  • Маркировка пакетов для приоритезации трафика
  • Защита от базовых видов атак

В своей практике я часто использую iptables не только как брандмауэр, но и как инструмент для балансировки нагрузки и перенаправления трафика между серверами.

Установка и подготовка к работе с iptables

В большинстве современных дистрибутивов Ubuntu iptables присутствует по умолчанию. Но если по какой-то причине его нет, установка займет пару минут.

Проверим наличие утилиты:

iptables --version

Если система отвечает сообщением об ошибке, выполняем установку:

sudo apt update
sudo apt install iptables

Теперь самое важное. Правила iptables по умолчанию живут только до перезагрузки. Чтобы не настраивать всё заново после каждого ребута, устанавливаем пакет для сохранения конфигурации:

sudo apt install iptables-persistent

Во время установки система предложит сохранить текущие правила - соглашаемся. В дальнейшем управлять сохранением можно командой:

sudo netfilter-persistent save

Основные концепции iptables

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

Таблицы - это логические группы правил по функциональному назначению. Их пять:

  • filter - базовая фильтрация пакетов, именно здесь разрешают или блокируют трафик
  • nat - трансляция адресов для организации доступа в интернет и проброса портов
  • mangle - изменение заголовков пакетов (TTL, ToS, маркировка)
  • raw - обработка пакетов до отслеживания соединений
  • security - интеграция с SELinux и мандатным доступом

Цепочки определяют момент обработки пакета. В каждой таблице свой набор цепочек, но основные - INPUT (входящие на хост), OUTPUT (исходящие с хоста) и FORWARD (транзитные). Например, пакет для локального процесса проходит через цепочки PREROUTING → INPUT, а транзитный - через PREROUTING → FORWARD → POSTROUTING.

Правила - это условия и действия. Условия могут проверять всё что угодно: IP-адреса, порты, протоколы, временные метки, состояние соединения. Действие определяет судьбу пакета: ACCEPT (пропустить), DROP (молча отбросить), REJECT (отказать с уведомлением), LOG (записать в журнал) или переход в другую цепочку.

Правила проверяются последовательно сверху вниз. Как только пакет соответствует условию, выполняется указанное действие и дальнейшая проверка прекращается. Если пакет дошел до конца цепочки, применяется политика по умолчанию.

Основные цепочки и их назначение
Цепочка Тип трафика Применение Типичные таблицы
INPUT Входящий на хост Защита сервера, доступ к сервисам filter, mangle
OUTPUT Исходящий с хоста Контроль исходящих соединений filter, nat, mangle
FORWARD Транзитный через хост Маршрутизация, прокси filter, mangle
PREROUTING До маршрутизации DNAT, изменение пакетов nat, mangle, raw
POSTROUTING После маршрутизации SNAT, маскарадинг nat, mangle

Синтаксис и основные команды iptables

Структура команды iptables всегда одинакова: сначала указываем таблицу (если не filter), затем операцию, цепочку, условия и действие.

sudo iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT

Здесь мы добавили в таблицу filter (-t filter) цепочку INPUT (-A INPUT) правило, разрешающее (-j ACCEPT) TCP-трафик (-p tcp) на порт 22 (--dport 22).

Для просмотра текущих правил используем:

sudo iptables -L -v -n

Флаги -v и -n делают вывод более информативным: показывают счетчики пакетов и не преобразуют IP-адреса в имена.

Удаление правил выполняется либо по полной спецификации, либо по номеру в цепочке:

sudo iptables -D INPUT 3  # удалить третье правило в INPUT

Сброс всех правил (будьте осторожны!):

sudo iptables -F

Примеры настройки iptables

Перейдем к практическим сценариям. Вот как я обычно настраиваю защиту на новых серверах.

Блокировка и разрешение IP-адресов

Самый простой случай - блокировка подозрительного источника:

sudo iptables -A INPUT -s 185.230.63.171 -j DROP

Если нужно разрешить доступ только конкретному узлу к определенному сервису:

sudo iptables -A INPUT -s 192.168.1.100 -p tcp --dport 3306 -j ACCEPT

Для блокировки целой подсети используется запись с маской:

sudo iptables -A INPUT -s 10.0.0.0/8 -j DROP

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

Базовый принцип безопасности - запретить всё, разрешить необходимое. Сначала устанавливаем политику по умолчанию на DROP:

sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP

Затем открываем нужные порты:

sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT   # HTTP
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT  # HTTPS
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT   # SSH

Важный нюанс: после установки политики DROP доступ по SSH может прерваться, если правило разрешения еще не добавлено. Поэтому сначала добавляем правило для SSH, потом меняем политику.

Управление ICMP-трафиком

Ping полезен для диагностики, но злоумышленники используют его для разведки. Я рекомендую разрешить ICMP только из доверенных сетей:

sudo iptables -A INPUT -p icmp --icmp-type echo-request -s 192.168.1.0/24 -j ACCEPT
sudo iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

Первое правило пропускает пинги из локальной сети, второе - блокирует все остальные.

MAC-фильтрация

В локальных сетях можно фильтровать трафик по MAC-адресам:

sudo iptables -A INPUT -m mac --mac-source AA:BB:CC:DD:EE:FF -j ACCEPT
sudo iptables -A INPUT -m mac --mac-source 11:22:33:44:55:66 -j DROP

Но помните: MAC-адрес легко подделать, поэтому такая защита работает только в связке с другими механизмами.

Настройка NAT

Маскарадинг позволяет организовать доступ в интернет для устройств локальной сети:

sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
sudo iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT

Здесь eth0 смотрит в интернет, eth1 - в локальную сеть.

Для проброса портов используем DNAT:

sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.10:80

Теперь запросы на внешний порт 8080 попадают на внутренний веб-сервер.

Расширенные настройки и советы по безопасности

хакер в пенетрест ИБ

Базовой фильтрации часто недостаточно. Рассмотрим продвинутые техники защиты.

Логирование подозрительной активности

Логи помогают выявлять атаки и отлаживать правила. Добавим логирование перед блокировкой:

sudo iptables -A INPUT -p tcp --dport 22 -j LOG --log-prefix "SSH_ATTEMPT: " --log-level 4
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

Логи попадают в /var/log/syslog или /var/log/kern.log. Просмотреть записи по SSH можно так:

grep "SSH_ATTEMPT" /var/log/syslog

Отслеживание состояний соединений

Модуль conntrack позволяет различать новые и установленные соединения:

sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -m state --state INVALID -j DROP
sudo iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT

Первое правило пропускает все ответы на наши запросы. Второе отбрасывает битые пакеты. Третье разрешает новые подключения к веб-серверу.

Защита от DDoS и брутфорса

Модуль limit помогает ограничить частоту подключений:

sudo iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m limit --limit 3/minute --limit-burst 5 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j DROP

Это правило разрешает не более трех новых SSH-соединений в минуту со всплеском до пяти. Все остальные попытки блокируются - эффективно против брутфорса.

Для защиты от SYN-флуда используем:

sudo iptables -A INPUT -p tcp --syn -m limit --limit 1/second -j ACCEPT
sudo iptables -A INPUT -p tcp --syn -j DROP

Создание пользовательских цепочек

При большом количестве правил удобно группировать их в собственные цепочки:

sudo iptables -N SSH_PROTECTION
sudo iptables -A SSH_PROTECTION -m limit --limit 3/minute -j RETURN
sudo iptables -A SSH_PROTECTION -j DROP

sudo iptables -A INPUT -p tcp --dport 22 -j SSH_PROTECTION
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

Здесь все правила защиты SSH собраны в отдельной цепочке, что упрощает управление.

Сравнение основных действий iptables
Действие Поведение пакета Ответ отправителю Нагрузка на систему Когда использовать
ACCEPT Пропускается Нормальный ответ Минимальная Для разрешенного трафика
DROP Уничтожается Нет Минимальная При скрытом отклонении атак
REJECT Уничтожается ICMP ошибка Средняя Для явного отказа клиенту
LOG Передается дальше Зависит от следующих правил Высокая (запись в лог) Для отладки и мониторинга
RETURN Возврат в предыдущую цепочку Зависит от вызывающей цепочки Минимальная В пользовательских цепочках

iptables VS ifrwt

Iptables - незаменимый инструмент для администрирования Linux-серверов. Он дает полный контроль над сетевым трафиком при минимальных затратах ресурсов. Я показал базовые конструкции и продвинутые приемы, которых достаточно для построения надежной защиты в большинстве сценариев.

Но важно понимать границы применимости iptables. При мощных DDoS-атаках трафик все равно достигает сервера, загружая канал и процессор. Для защиты на уровне провайдера нужны специализированные решения. Однако правильно настроенный iptables отсекает до 90% угроз, делая вашу инфраструктуру действительно безопасной.

Похожие записи

Вам также может понравиться