Гид по технологиям

Как настроить iptables на Linux

8 min read Безопасность Обновлено 01 Dec 2025
Настройка iptables в Linux — базовый файл правил
Настройка iptables в Linux — базовый файл правил

iptables — встроенный файрвол ядра Linux. В статье показано, как собрать файл правил для рабочего стола, импортировать его и сделать правила постоянными. Приведены готовые примеры правил, рекомендации по тестированию и альтернативы для разных задач.

Secure Linux Iptables

Кратко: Linux часто считают безопасной системой, но дефолтные настройки могут быть слишком открытыми. Самый прямой способ контролировать входящий и исходящий трафик — настроить iptables. Этот материал показывает базовый набор правил для рабочего стола, объясняет структуру команд и дает практический SOP для администраторов.

Что такое iptables?

Iptables — это файрвол на уровне ядра Linux. Он присутствует в большинстве дистрибутивов и управляет тем, как система обрабатывает сетевой трафик. Правила iptables применяются к цепочкам и таблицам, чтобы разрешать, отклонять или логировать трафик.

Определения в одну строку:

  • Цепочка — последовательность правил для обработки пакетов, например INPUT, OUTPUT, FORWARD.
  • Таблица — категория правил, например filter для фильтрации, nat для трансляции адресов.
  • Правило — одно условие обработки пакета с действием.

Структура команды iptables

Все правила iptables имеют схожий синтаксис. Каждое правило — это однострочная команда, определяющая действие над трафиком для конкретной цепочки или интерфейса.

Пример из оригинала:

-A INPUT -i eth0 -p tcp -m state --state ESTABLISHED,RELATED --sport80-j ACCEPT

Разбор по частям:

  • -A указывает, что правило будет добавлено (append) в указанную цепочку.
  • -i задает входной интерфейс (в примере eth0). Для правил OUTPUT используется -o для выходного интерфейса.
  • -p задает протокол (tcp, udp, icmp и т.д.).
  • -m включает матч-модуль, здесь state для проверки состояния соединения.
  • –state перечисляет допустимые состояния, например NEW, ESTABLISHED, RELATED.
  • –sport и –dport обозначают исходный и целевой порты соответственно.
  • -j указывает целевое действие, например ACCEPT, REJECT, DROP.

Важно: в тексте встречаются примеры, где в командах нет пробелов в некоторых местах. Эти строки сохранены ниже в исходном виде, а после них приведены корректные варианты с пробелами, которые следует использовать при вводе вручную.

Работа с файлом правил

Вместо ввода правил по одному лучше собрать их в файл и загрузить все сразу. Это упрощает управление и резервное копирование.

Пример файла, используемого в руководстве: /tmp/iptables-ip4. Файл должен содержать шапку таблицы filter, затем правила, затем COMMIT.

*filter  
  
# Your Rules Here  
  
COMMIT

Создайте файл в удобном месте, например в /tmp, затем заполните правилами.

Создание правил: готовые примеры и объяснения

Ниже приведены рекомендуемые блоки правил для типичной настольной системы. Если вы запускаете дополнительные сервисы, адаптируйте или расширяйте правила под свои нужды.

Loopback

Разрешите трафик по локальному интерфейсу lo. Это внутренний трафик между процессами на машине.

-A INPUT -i lo -j ACCEPT  
-A OUTPUT -o lo -j ACCEPT

Ping

Разрешать или запрещать ICMP echo request — вопрос предпочтения. Ping полезен для тестирования сети. Если хотите разрешить, добавьте:

-A INPUT -i eth0 -p icmp -m state --state NEW --icmp-type8-j ACCEPT  
-A INPUT -i eth0 -p icmp -m state --state ESTABLISHED,RELATED -j ACCEPT  
-A OUTPUT -o eth0 -p icmp -j ACCEPT

Корректный вариант с пробелами между опциями:

-A INPUT -i eth0 -p icmp -m state --state NEW --icmp-type 8 -j ACCEPT
-A INPUT -i eth0 -p icmp -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -o eth0 -p icmp -j ACCEPT

Веб (HTTP/HTTPS)

Чтобы иметь доступ к вебу и позволить ответные входящие соединения из интернета, разрешите соответствующие порты.

-A INPUT -i eth0 -p tcp -m state --state ESTABLISHED,RELATED --sport80-j ACCEPT  
-A INPUT -i eth0 -p tcp -m state --state ESTABLISHED,RELATED --sport443-j ACCEPT  
  
-A OUTPUT -o eth0 -p tcp -m tcp --dport80-j ACCEPT  
-A OUTPUT -o eth0 -p tcp -m tcp --dport443-j ACCEPT

Корректный вариант с пробелами:

-A INPUT -i eth0 -p tcp -m state --state ESTABLISHED,RELATED --sport 80 -j ACCEPT
-A INPUT -i eth0 -p tcp -m state --state ESTABLISHED,RELATED --sport 443 -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m tcp --dport 80 -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m tcp --dport 443 -j ACCEPT

DNS

Для резолвинга доменных имён нужен доступ к DNS серверу. В примере указан адрес маршрутизатора 192.168.1.1 — замените его на адрес вашего шлюза или DNS.

-A INPUT -i ens3 -s 192.168.1.1 -p udp --sport53-m state --state ESTABLISHED,RELATED -j ACCEPT  
-A OUTPUT -o ens3 -d 192.168.1.1 -p udp --dport53-m udp -j ACCEPT

Корректный и более общий вариант:

-A INPUT -i ens3 -s 192.168.1.1 -p udp --sport 53 -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -o ens3 -d 192.168.1.1 -p udp --dport 53 -j ACCEPT

Если вы используете публичные DNS, укажите соответствующие IP или разрешите исходящие UDP/TCP на порт 53.

Время (NTP)

Синхронизация времени через NTP обычно использует UDP порт 123.

-A INPUT -i eth0 -p udp -m state --state ESTABLISHED,RELATED --dport123-j ACCEPT  
-A OUTPUT -o eth0 -p udp -m udp --sport123-j ACCEPT

Корректный вариант:

-A INPUT -i eth0 -p udp -m state --state ESTABLISHED,RELATED --dport 123 -j ACCEPT
-A OUTPUT -o eth0 -p udp -m udp --sport 123 -j ACCEPT

Печать (CUPS)

Если вы используете сетевой принтер или CUPS, откройте порт 631 для TCP и UDP.

-A INPUT -p udp -m udp --dport631-j ACCEPT  
-A INPUT -p tcp -m tcp --dport631-j ACCEPT  
-A OUTPUT -p udp -m udp --sport631-j ACCEPT  
-A OUTPUT -p tcp -m tcp --sport631-j ACCEPT

Корректный вариант:

-A INPUT -p udp -m udp --dport 631 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A OUTPUT -p udp -m udp --sport 631 -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 631 -j ACCEPT

Электронная почта (SSL)

Пример разрешает защищенные порты IMAP/POP3/SMTP через SSL. Если вы используете незашифрованные порты, замените номера портов.

# IMAP  
-A INPUT -i eth0 -p tcp -m state --state ESTABLISHED,RELATED --sport993-j ACCEPT  
-A OUTPUT -o eth0 -p tcp -m tcp --dport993-j ACCEPT  
  
# POP3  
-A INPUT -i eth0 -p tcp -m state --state ESTABLISHED,RELATED --sport995-j ACCEPT  
-A OUTPUT -o eth0 -p tcp -m tcp --dport995-j ACCEPT  
  
# SMTP  
-A INPUT -i eth0 -p tcp -m state --state ESTABLISHED,RELATED --sport465-j ACCEPT  
-A OUTPUT -o eth0 -p tcp -m tcp --dport465-j ACCEPT

Корректный вариант:

# IMAP
-A INPUT -i eth0 -p tcp -m state --state ESTABLISHED,RELATED --sport 993 -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m tcp --dport 993 -j ACCEPT
# POP3
-A INPUT -i eth0 -p tcp -m state --state ESTABLISHED,RELATED --sport 995 -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m tcp --dport 995 -j ACCEPT
# SMTP
-A INPUT -i eth0 -p tcp -m state --state ESTABLISHED,RELATED --sport 465 -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m tcp --dport 465 -j ACCEPT

SSH

SSH нужен и для входящих, и для исходящих соединений. Приведенные правила позволяют как входящие подключения на порт 22, так и исходящие соединения.

# Input  
-A INPUT -i ens3 -p tcp -m state --state NEW,ESTABLISHED --dport22-j ACCEPT  
-A OUTPUT -o ens3 -p tcp -m state --state ESTABLISHED --sport22-j ACCEPT  
# Output  
-A OUTPUT -o ens3 -p tcp -m state --state NEW,ESTABLISHED --dport22-j ACCEPT  
-A INPUT -i ens3 -p tcp -m state --state ESTABLISHED --sport22-j ACCEPT

Корректный вариант:

# Входящие на SSH
-A INPUT -i ens3 -p tcp -m state --state NEW,ESTABLISHED --dport 22 -j ACCEPT
-A OUTPUT -o ens3 -p tcp -m state --state ESTABLISHED --sport 22 -j ACCEPT
# Исходящие SSH
-A OUTPUT -o ens3 -p tcp -m state --state NEW,ESTABLISHED --dport 22 -j ACCEPT
-A INPUT -i ens3 -p tcp -m state --state ESTABLISHED --sport 22 -j ACCEPT

Рекомендация: по возможности ограничьте доступ по IP, используйте ключи и не оставляйте SSH доступ с паролем открытым для всего интернета.

DHCP

Если система получает адрес по DHCP, разрешите нужные порты. Для статического IP эти правила не нужны.

-A INPUT -i eth0 -p udp -m state --state ESTABLISHED,RELATED --sport67:68-j ACCEPT  
-A OUTPUT -o eth0 -p udp -m udp --dport67:68-j ACCEPT

Корректный вариант:

-A INPUT -i eth0 -p udp -m state --state ESTABLISHED,RELATED --sport 67:68 -j ACCEPT
-A OUTPUT -o eth0 -p udp -m udp --dport 67:68 -j ACCEPT

Отклонять все остальное

После перечисления разрешенных правил добавьте строгие правила по умолчанию, чтобы запретить всё, что не описано явно.

-A INPUT -j REJECT  
-A FORWARD -j REJECT  
-A OUTPUT -j REJECT

Ниже примерный итоговый набор файлов правил. Сохраните его в ваш файл /tmp/iptables-ip4 и переходите к импорту.

iptables rules

Импорт правил в iptables

Перед импортом имеет смысл очистить текущие правила, чтобы не было конфликта. Команда очистки, сохраненная в оригинальном тексте:

sudo iptables -F&&sudo iptables -X

Корректная версия с пробелом между командами:

sudo iptables -F && sudo iptables -X

После очистки можно загрузить правила из файла:

sudo iptables-restore 

Обратите внимание: в оригинале имя файла написано как itpables-ip4. Проверьте правильное имя файла, например /tmp/iptables-ip4. Правильный пример команды:

sudo iptables-restore < /tmp/iptables-ip4

Проверить текущие правила можно так:

sudo iptables -S

Iptables Rules List

Важно: после перезагрузки правила не сохранятся, если вы явно не настроите их сохранение.

Сохранение правил навсегда (для Debian/Ubuntu)

Разные дистрибутивы используют разные механизмы сохранения правил. Для систем на базе Debian и Ubuntu удобно использовать пакет iptables-persistent.

Установка:

sudo apt install iptables-persistent

При установке пакет предложит сохранить текущие правила. Выберите Да. После установки для сохранения изменений можно использовать службу netfilter-persistent:

sudo service netfilter-persistent save

Save Iptables Rules

Альтернативы для других дистрибутивов:

  • systemd-прослойки, которые применяют скрипты при загрузке
  • собственные сервисы поставщика дистрибутива

Проверка и критерии приёмки

Краткие тесты, которые должен пройти набор правил:

  • Просмотр правил: sudo iptables -S. Правила должны содержать ожидаемые ACCEPT/REJECT.
  • Тест SSH: подключиться к машине извне и внутри сети.
  • Тест веба: открыть сайты по HTTP/HTTPS.
  • Тест DNS: выполнить nslookup или dig и убедиться, что резолв работает.
  • Тест NTP: проверить синхронизацию времени с помощью timedatectl или ntpdate.
  • Тест печати: отправить задание на принтер, если используется сеть.

Если любой из тестов не проходит, проверьте последовательность правил и интерфейсы в правилах.

Когда такой подход не подходит

  • На крупных серверах и в дата-центрах чаще используют централизованные контрольные точки, балансировщики и аппаратные файрволы.
  • Если вам нужна поддержка сложной NAT логики, предпочтительнее использовать таблицу nat и отдельные политики, или nftables.
  • Для динамически масштабируемых сред и контейнеров бывает удобнее использовать оркестрационные сетевые политики.

Альтернативные подходы

  • nftables — современная замена iptables с более простой моделью таблиц и лучшей производительностью.
  • UFW — упрощенный интерфейс для iptables, удобен для настольных систем и начинающих.
  • firewalld — динамический менеджер правил, распространен в CentOS/RHEL/Fedora.
  • Аппаратные фаерволы и сетевые ACL в облаках — для облачных инфраструктур часто безопаснее использовать сетевые уровни провайдера.

Ментальные модели и эвристики

  • Политика по умолчанию — deny by default: разрешай только то, что необходимо.
  • Минимальные привилегии для сервисов: откройте только порты нужных сервисов.
  • Разделение входящего и исходящего трафика: контролируйте оба направления.
  • Логируй отклоненный трафик для последующей диагностики.

Безопасное ужесточение (hardening)

  • Используйте REJECT для быстрых ответов в локальной сети, DROP для скрытности в публичных сценариях.
  • Ограничьте попытки входа по SSH с помощью rate limiting и fail2ban.
  • Включите логирование подозрительных пакетов и анализируйте логи.
  • Изолируйте критичные сервисы в отдельных сетевых пространствах и VLAN.
  • Регулярно поддерживайте список разрешенных адресов и портов.

Руководство действий для администратора (SOP)

  1. Подготовьте файл /tmp/iptables-ip4 с требуемыми правилами.
  2. Очистите текущие правила: sudo iptables -F && sudo iptables -X.
  3. Примените правила: sudo iptables-restore < /tmp/iptables-ip4.
  4. Проверьте список: sudo iptables -S.
  5. Выполните критические тесты: SSH, HTTP/HTTPS, DNS, NTP, печать.
  6. Сохраните правила для перезагрузки: установить iptables-persistent или настроить системный сервис.
  7. Настройте мониторинг и логирование отклоненных соединений.

Ролейные чек-листы

Для домашнего пользователя:

  • Ограничьте исходящие порты только необходимыми (80, 443, 53, 123).
  • Отключите входящие сервисы, если они не нужны.
  • Используйте UFW, если не хотите писать правила вручную.

Для системного администратора:

  • Управляйте правилами через файлы конфигурации и систему контроля версий.
  • Настройте аварийный откат конфигурации и план восстановления.
  • Логируйте аномалии и интегрируйте с SIEM.

Для инженера по безопасности:

  • Проводите регулярные аудиты правил и тесты атак.
  • Ограничьте доступ к SSH управляющими адресами.
  • Настройте VLAN и сегментацию для критичных сервисов.

Совместимость и миграция

  • Debian/Ubuntu: iptables и iptables-persistent удобны для сохранения правил.
  • RHEL/CentOS/Fedora: чаще используется firewalld, при необходимости можно работать с iptables напрямую или перейти на nftables.
  • nftables предлагает единый синтаксис для новых развёртываний; планируйте миграцию и тестируйте правила.

Примеры тест-кейсов и приёмка

  1. Применить правила и убедиться, что команда sudo iptables -S возвращает ожидаемые записи.
  2. Отключить интернет-кабель, подключиться к локальной сети и протестировать ping и SSH.
  3. Проверить, что веб-браузер открывает страницы по HTTPS.
  4. Проверить, что DNS-запросы проходят, выполнив dig google.com.
  5. Перезагрузить систему и убедиться, что правила сохранились и применились автоматически.

Краткое заключение

iptables остаётся мощным инструментом для контроля сетевого трафика на уровне хоста. Для настольных систем достаточно набора правил, описанного выше: loopback, разрешения для веба, DNS, NTP, SSH, печати и почты. Всегда тестируйте конфигурацию перед развёртыванием и сохраняйте правила для восстановления после перезагрузки. Рассмотрите nftables или менеджеры вроде UFW/firewalld, если вам нужна упрощённая или более современная модель управления.

Ключевые ссылки для дальнейшего чтения: документация iptables, руководство по nftables, мануалы по iptables-persistent.

Итоговые советы:

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

Краткое резюме

  • Iptables фильтрует трафик на уровне ядра.
  • Собирайте правила в файл и загружайте через iptables-restore.
  • Сделайте правила постоянными через iptables-persistent на Debian/Ubuntu.
  • Тестируйте SSH, DNS, HTTP/HTTPS и NTP после применения правил.

Iptables clear rules

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Google Meet в Документах, Таблицах и Презентациях
Коммуникации

Google Meet в Документах, Таблицах и Презентациях

Сброс клавиатуры Samsung — быстрое восстановление
Инструкции

Сброс клавиатуры Samsung — быстрое восстановление

Автоматическое включение режима «Театр» на Apple Watch
Гайд

Автоматическое включение режима «Театр» на Apple Watch

Удалить Unity и перейти на GNOME в Ubuntu 17.10
Ubuntu

Удалить Unity и перейти на GNOME в Ubuntu 17.10

Удалить скрытый текст в Word — быстро и безопасно
Office

Удалить скрытый текст в Word — быстро и безопасно

Восстановление повреждённого файла PowerPoint
Инструкции

Восстановление повреждённого файла PowerPoint