Linux

Основы iptables: настройка файрвола Linux для защиты сервера

В этом руководстве вы освоите базовые принципы работы с iptables, научитесь создавать правила фильтрации трафика и безопасно настраивать сетевой доступ. К концу статьи ваш сервер будет защищён от нежелательных подключений.

Обновлено 4 апреля 2026 г.
15-20 мин
Средняя
FixPedia Team
Применимо к:Ubuntu 22.04/24.04 LTSDebian 12+RHEL 9 / AlmaLinux 9openSUSE Leap 15.5+

Введение / Зачем это нужно

iptables — это стандартный инструмент фильтрации сетевого трафика в ядре Linux. Несмотря на постепенный переход экосистемы на nftables, он остаётся рабочим стандартом для управления пакетами на серверах и рабочих станциях. Правильная настройка файрвола блокирует несанкционированный доступ, скрывает неиспользуемые сервисы и снижает нагрузку на сеть. После выполнения этого руководства вы сможете вручную управлять цепочками правил, открывать нужные порты и применять политику «запрещено всё, кроме разрешённого».

Требования / Подготовка

Перед началом убедитесь, что у вас есть root-доступ или привилегии sudo. Все команды выполняются в терминале. Рекомендуется подключиться через SSH и проверить наличие утилиты:

iptables --version

Если команда не найдена, установите пакет через менеджер пакетов вашего дистрибутива (например, sudo apt install iptables или sudo dnf install iptables). Убедитесь, что вы не блокируете себя: держите под рукой доступ к веб-консоли хостинг-провайдера на случай потери соединения.

Шаг 1: Очистка текущей конфигурации

Начните с чистого состояния, чтобы старые правила не конфликтовали с новой политикой. Выполните команду для удаления всех правил из всех цепочек:

sudo iptables -F
sudo iptables -X
sudo iptables -t nat -F

Опция -F очищает правила, а -X удаляет пользовательские цепочки. Команда с -t nat сбрасывает правила трансляции адресов. Это безопасный этап, так как по умолчанию политика обычно установлена в ACCEPT, и активные сессии не разорвутся.

Шаг 2: Установка политик по умолчанию

Задайте строгие правила для всего входящего трафика. Сервер будет отклонять пакеты, если для них нет явного разрешения.

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

Здесь DROP означает молчаливое отбрасывание пакетов, что усложняет сканирование портов злоумышленниками. ACCEPT для исходящего трафика позволяет серверу скачивать обновления и обращаться к внешним API без дополнительных правил.

Шаг 3: Разрешение установленных и SSH-подключений

Чтобы текущая SSH-сессия не прервалась, разрешите трафик для уже установленных соединений и явно откройте порт удалённого доступа.

sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

Параметр -m conntrack отслеживает состояние пакетов. Если соединение уже инициировано, оно пропустится. Вторая команда разрешает входящие TCP-запросы на порт 22. Если вы используете нестандартный порт SSH, замените 22 на ваш номер.

Шаг 4: Открытие веб-портов и локального доступа

Если на сервере работает веб-сервер или базу данных, добавьте соответствующие правила. Также важно разрешить трафик на локальном интерфейсе, чтобы системные утилиты могли взаимодействовать друг с другом.

sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

Флаг -i lo разрешает весь трафик на интерфейсе 127.0.0.1. Правила для 80 и 443 портов делают сайты доступными для посетителей. Для других сервисов (например, MySQL на порту 3306) используйте аналогичный синтаксис, но ограничьте доступ доверенными IP через -s 192.168.1.0/24.

Проверка результата

Убедитесь, что правила применились корректно, выведя текущую конфигурацию с номерами пакетов и объёмом трафика:

sudo iptables -L -n -v

Ключ -n ускоряет вывод, отключая обратное DNS-резолвинг, а -v показывает статистику прохождения пакетов. Вы должны увидеть цепочку INPUT с политикой DROP и строки ACCEPT для SSH, loopback и веб-портов. Попробуйте открыть сайт на сервере из браузера и подключиться по SSH с другого устройства. Оба действия должны пройти без задержек.

Возможные проблемы

Ошибка iptables v1.8.x: command not found или конфликты версий В современных дистрибутивах iptables может быть симлинком на iptables-nft или iptables-legacy. Используйте sudo update-alternatives --config iptables для выбора нужной реализации, если сталкиваетесь с ошибками совместимости.

Потеря доступа после применения политик Если политика INPUT DROP активирована до разрешения SSH, вы окажетесь вне сессии. Восстановите доступ через VNC-консоль и выполните sudo iptables -F. В будущем используйте утилиту iptables-apply с автоматическим таймаутом, которая откатит изменения при потере соединения.

Правила исчезают после перезагрузкиiptables хранит правила только в оперативной памяти. Для сохранения установите iptables-persistent:

sudo apt install iptables-persistent
sudo netfilter-persistent save

На системах с systemd сервис автоматически загружает правила из /etc/iptables/rules.v4 при старте операционной системы. Регулярно обновляйте этот файл после внесения изменений в работу сети.

Часто задаваемые вопросы

Сохраняются ли правила iptables после перезагрузки сервера?
Можно ли использовать iptables на современных дистрибутивах?
Что делать, если я случайно заблокировал себе доступ по SSH?

Полезное

Проверка статуса и очистка старых правил
Настройка политик по умолчанию
Разрешение установленных и SSH-подключений
Разрешение HTTP/HTTPS и локального трафика
Сохранение конфигурации

Эта статья помогла вам решить проблему?