Системы на базе 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 собраны в отдельной цепочке, что упрощает управление.
| Действие | Поведение пакета | Ответ отправителю | Нагрузка на систему | Когда использовать |
|---|---|---|---|---|
| ACCEPT | Пропускается | Нормальный ответ | Минимальная | Для разрешенного трафика |
| DROP | Уничтожается | Нет | Минимальная | При скрытом отклонении атак |
| REJECT | Уничтожается | ICMP ошибка | Средняя | Для явного отказа клиенту |
| LOG | Передается дальше | Зависит от следующих правил | Высокая (запись в лог) | Для отладки и мониторинга |
| RETURN | Возврат в предыдущую цепочку | Зависит от вызывающей цепочки | Минимальная | В пользовательских цепочках |
iptables VS ifrwt
Iptables - незаменимый инструмент для администрирования Linux-серверов. Он дает полный контроль над сетевым трафиком при минимальных затратах ресурсов. Я показал базовые конструкции и продвинутые приемы, которых достаточно для построения надежной защиты в большинстве сценариев.
Но важно понимать границы применимости iptables. При мощных DDoS-атаках трафик все равно достигает сервера, загружая канал и процессор. Для защиты на уровне провайдера нужны специализированные решения. Однако правильно настроенный iptables отсекает до 90% угроз, делая вашу инфраструктуру действительно безопасной.