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

Кратко: 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 ACCEPTPing
Разрешать или запрещать 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 ACCEPTDNS
Для резолвинга доменных имён нужен доступ к 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 ACCEPTSSH
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
Перед импортом имеет смысл очистить текущие правила, чтобы не было конфликта. Команда очистки, сохраненная в оригинальном тексте:
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
Важно: после перезагрузки правила не сохранятся, если вы явно не настроите их сохранение.
Сохранение правил навсегда (для Debian/Ubuntu)
Разные дистрибутивы используют разные механизмы сохранения правил. Для систем на базе Debian и Ubuntu удобно использовать пакет iptables-persistent.
Установка:
sudo apt install iptables-persistentПри установке пакет предложит сохранить текущие правила. Выберите Да. После установки для сохранения изменений можно использовать службу netfilter-persistent:
sudo service netfilter-persistent save
Альтернативы для других дистрибутивов:
- 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)
- Подготовьте файл /tmp/iptables-ip4 с требуемыми правилами.
- Очистите текущие правила: sudo iptables -F && sudo iptables -X.
- Примените правила: sudo iptables-restore < /tmp/iptables-ip4.
- Проверьте список: sudo iptables -S.
- Выполните критические тесты: SSH, HTTP/HTTPS, DNS, NTP, печать.
- Сохраните правила для перезагрузки: установить iptables-persistent или настроить системный сервис.
- Настройте мониторинг и логирование отклоненных соединений.
Ролейные чек-листы
Для домашнего пользователя:
- Ограничьте исходящие порты только необходимыми (80, 443, 53, 123).
- Отключите входящие сервисы, если они не нужны.
- Используйте UFW, если не хотите писать правила вручную.
Для системного администратора:
- Управляйте правилами через файлы конфигурации и систему контроля версий.
- Настройте аварийный откат конфигурации и план восстановления.
- Логируйте аномалии и интегрируйте с SIEM.
Для инженера по безопасности:
- Проводите регулярные аудиты правил и тесты атак.
- Ограничьте доступ к SSH управляющими адресами.
- Настройте VLAN и сегментацию для критичных сервисов.
Совместимость и миграция
- Debian/Ubuntu: iptables и iptables-persistent удобны для сохранения правил.
- RHEL/CentOS/Fedora: чаще используется firewalld, при необходимости можно работать с iptables напрямую или перейти на nftables.
- nftables предлагает единый синтаксис для новых развёртываний; планируйте миграцию и тестируйте правила.
Примеры тест-кейсов и приёмка
- Применить правила и убедиться, что команда sudo iptables -S возвращает ожидаемые записи.
- Отключить интернет-кабель, подключиться к локальной сети и протестировать ping и SSH.
- Проверить, что веб-браузер открывает страницы по HTTPS.
- Проверить, что DNS-запросы проходят, выполнив dig google.com.
- Перезагрузить систему и убедиться, что правила сохранились и применились автоматически.
Краткое заключение
iptables остаётся мощным инструментом для контроля сетевого трафика на уровне хоста. Для настольных систем достаточно набора правил, описанного выше: loopback, разрешения для веба, DNS, NTP, SSH, печати и почты. Всегда тестируйте конфигурацию перед развёртыванием и сохраняйте правила для восстановления после перезагрузки. Рассмотрите nftables или менеджеры вроде UFW/firewalld, если вам нужна упрощённая или более современная модель управления.
Ключевые ссылки для дальнейшего чтения: документация iptables, руководство по nftables, мануалы по iptables-persistent.
Итоговые советы:
- Всегда делайте резервную копию текущих правил перед изменениями.
- Тестируйте на тестовой машине или в консоли с удалённым доступом, чтобы избежать блокировки себя.
- Ведите правила в системе контроля версий и документируйте все изменения.
Краткое резюме
- Iptables фильтрует трафик на уровне ядра.
- Собирайте правила в файл и загружайте через iptables-restore.
- Сделайте правила постоянными через iptables-persistent на Debian/Ubuntu.
- Тестируйте SSH, DNS, HTTP/HTTPS и NTP после применения правил.

Похожие материалы
Google Meet в Документах, Таблицах и Презентациях
Сброс клавиатуры Samsung — быстрое восстановление
Автоматическое включение режима «Театр» на Apple Watch
Удалить Unity и перейти на GNOME в Ubuntu 17.10
Удалить скрытый текст в Word — быстро и безопасно