Не меняйте firewall без аварийного канала
iptables -F, iptables -X и не меняйте политику INPUT на DROP как универсальный первый шаг: такие команды могут немедленно лишить сервер управления.До изменений: определить стек, доступ и точку отката
- Зафиксируйте порт SSH, например
22, и исходный IP-адрес, который сервер действительно видит для текущего административного соединения. Это может быть адрес выхода NAT, VPN или самого клиента. Не подставляйте в правило адрес из документации192.0.2.0/24— замените его своим; IPv6 учитывайте отдельно. - Оставьте работающую SSH-сессию и откройте вторую. После каждого изменения проверяйте новое подключение именно во второй или третьей сессии.
- Убедитесь, что сервис действи тельно слушает нужный порт: firewall не сделает приложение доступным, если оно не запущено или слушает только
127.0.0.1. - Выясните, не управляет ли правилами UFW, firewalld, система автоматизации или нативный nftables. Один хост должен иметь понятный источник управления правилами.
sudo iptables -Viptables v1.x.x (nf_tables)sudo systemctl is-active ufw firewalld 2>/dev/null; sudo nft list rulesetBackend и менеджер правил
iptables может быть frontend к nftables (iptables-nft) либо legacy backend. Не смешивайте без проверки прямые команды iptables, nft, UFW и firewalld: итоговый набор может быть перезаписан менеджером при reload, перезагрузке или обновлении интерфейса. В Debian и Ubuntu вариант iptables обычно можно посмотреть, а при наличии альтернатив — выбрать через update-alternatives; в RHEL-совместимых системах способ выбора зависит от версии и пакетов. Всегда сверяйтесь с документацией своего выпуска ОС. Настройка UFW и firewalld разобрана отдельно в статье «UFW и firewalld: настройка firewall в Ubuntu и RHEL», а нативный nftables — в «Настройка nftables».Сохранить снимок действующих правил
Экспорт нужен для сравнения, отката и расследования. Он не включает автоматическое восстановление после перезагрузки.
- 1Создайте каталог для снимка с ограниченным доступомСоздайте каталог, доступный root, и сохраните IPv4-правила. Каталог можно выбрать по локальной политике хранения конфигураций.
- 2Экспортируйте IPv4 и IPv6 отдельноКоманды
iptables-saveиip6tables-saveвыводят текущие правила в формате, пригодном дляiptables-restoreиip6tables-restore. - 3Проверьте, что файлы не пустыВ файле должны быть таблицы, цепочки и правила. Если экспорт завершается ошибкой
Permission denied, выполните его от root через sudo.
sudo install -d -m 0700 /root/firewall-backup && sudo sh -c 'iptables-save > /root/firewall-backup/iptables.v4.before' && sudo sh -c 'ip6tables-save > /root/firewall-backup/ip6tables.v6.before'sudo sed -n '1,80p' /root/firewall-backup/iptables.v4.beforeВосстановление снимка заменяет текущий набор
iptables-restore < файл восстанавливает IPv4-набор из файла и может заменить сделанные после снимка изменения. Используйте её только с консоли или при проверенном аварийном доступе. Поскольку снимок находится в каталоге /root с ограниченным доступом, выполните и чтение файла, и восстановление от root: sudo sh -c 'iptables-restore < /root/firewall-backup/iptables.v4.before'. IPv6 восстанавливают отдельно через sudo sh -c 'ip6tables-restore < /root/firewall-backup/ip6tables.v6.before'.Как посмотреть правила, политики, номера и счётчики iptables
iptables управляет правилами межсетевого экрана подсистемы Netfilter. В таблице filter входящие пакеты обычно проходят цепочку INPUT. Правила внутри цепочки iptables проверяются последовательно: первое совпавшее правило с завершающим вердиктом ACCEPT, DROP или REJECT прекращает обработку в этой цепочке. Если пакет дошёл до конца встроенной цепочки, применяется её policy. Поэтому позднее разрешение может быть недостижимо из-за более раннего запрета.
sudo iptables -L -n -v --line-numberssudo iptables -Ssudo ip6tables -L -n -v --line-numbersDROP и REJECT
DROP обычно молча отбрасывает пакет, а REJECT отправляет ответ об отказе, подходящий для протокола. Оба вердикта завершают обработку текущей цепочки. Выбор зависит от роли сервиса и политики, а не от универсального правила безопасности; подробнее — в статье «Firewall сервера: default deny, порядок правил и политика доступа».Сначала разрешите ESTABLISHED,RELATED и SSH
Модуль conntrack использует отслеживание соединений. Состояние ESTABLISHED соответствует пакетам уже установленного соединения, а RELATED — пакету нового соединения, связанного с существующим. Правило для этих состояний обычно располагают в начале INPUT: оно разрешает ответный трафик и не заменяет правило для новых SSH-подключений. Современный синтаксис — -m conntrack --ctstate; старый модуль state с --state сохранён для совместимости, но считается устаревшим интерфейсом.
Сохранить административный доступ при удалённой настройке
Пример ниже рассчитан на SSH по TCP/22 с одного доверенного IPv4-адреса. Замените адрес и порт на фактические значения до запуска.
- 1Вставьте разрешение ответного трафика первымПравило ставится в позицию 1, чтобы ранний DROP не заблокировал пакеты действующе й SSH-сессии.
- 2Добавьте правило для новых SSH-подключенийОграничьте источник одним адресом, если это соответствует вашему маршруту администрирования. Если адрес меняется через VPN или NAT, сначала убедитесь, какой адрес сервер действительно видит.
- 3Проверьте правило и новую сессиюПроверьте номера и счётчики, затем подключитесь в новой SSH-сессии. При неудаче не закрывайте работающую сессию: проверьте порядок правил и исходный адрес.
sudo iptables -I INPUT 1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPTsudo iptables -I INPUT 2 -p tcp -s 192.0.2.10 --dport 22 -m conntrack --ctstate NEW -j ACCEPTsudo iptables -L INPUT -n -v --line-numbersНе открывайте SSH шире без необходимости
-s, например -p tcp --dport 22 ... -j ACCEPT, разрешит SSH с любых IPv4-адресов. Это может быть необходимо для публичного доступа, но не равно ограничению через allowlist. Настройка ключей, root-доступа и параметров sshd описана в статье «Безопасная настройка SSH: ключи, root и ограничение доступа».Открыть TCP-порт iptables только нужным источникам
Минимальное входящее правило задаёт направление через цепочку INPUT, протокол, порт назначения и, когда возможно, доверенный источник. Для сервиса на TCP/8443 не следует заменять такое правило общим -j ACCEPT для всего входящего трафика. Условие --ctstate NEW отделяет новые подключения от ответных пакетов, которые уже пропускает правило ESTABLISHED,RELATED. Из следующих трёх примеров выберите только один: публичный доступ, один доверенный адрес или подсеть. Если публичное правило уже добавлено, удалите его перед заменой ограниченным — дополнительное узкое правило не отменяет более широкое разрешение.
sudo iptables -I INPUT 3 -p tcp --dport 8443 -m conntrack --ctstate NEW -j ACCEPTsudo iptables -I INPUT 3 -p tcp -s 192.0.2.10 --dport 8443 -m conntrack --ctstate NEW -j ACCEPTsudo iptables -I INPUT 3 -p tcp -s 192.0.2.0/24 --dport 8443 -m conntrack --ctstate NEW -j ACCEPTsudo ss -lntp '( sport = :8443 )'; sudo iptables -L INPUT -n -v --line-numbersКак закрыть порт и безопасно удалить правило iptables
Удаление разрешающего правила отменяет только это разрешение. Порт станет недоступен через INPUT, только если трафик не принимает другое правило или пользовательская цепочка, а оставшийся путь завершается DROP, REJECT либо запрещающей policy. При policy ACCEPT одного удаления недостаточно: потребуется правильно расположенный запрет или пересмотр политики, описанный в статье «Firewall сервера: default deny, порядок правил и политика доступа». Не удаляйте правило по старому номеру из заметки: номер меняется после каждой вставки и удаления. Сначала получите актуальный список, найдите правило по полному набору признаков — протоколу, источнику, порту, состоянию и цели — затем удалите конкретную строку и сразу повторите проверку с разрешённого и неразрешённого источника. Если есть дубли, удаление по точному описанию удаляет первое совпадение, поэтому для дублей безопаснее использовать актуальный номер.
Удалить ранее открытый порт
- 1Получите текущие номераПросмотрите только цепочку INPUT с номерами, счётчиками и числовыми адресами. Сопоставьте номер с выводом
iptables -S INPUT, чтобы не удалить похожее правило. - 2Удалите выбранное вхождение по номеруПодставьте фактический номер. После удаления номера следующих правил сдвигаются.
- 3Проверьте цепочку и доступностьУбедитесь, что удалено именно нужное правило, а SSH и другие требуемые сервисы продолжают работать. Если доступ к сервису остаётся, ищите дублирующее разрешение в INPUT или переход в пользовательскую цепочку.
sudo iptables -L INPUT -n -v --line-numbers && sudo iptables -S INPUTsudo iptables -D INPUT 3sudo iptables -L INPUT -n -v --line-numberssudo iptables -D INPUT -p tcp -s 192.0.2.10 --dport 8443 -m conntrack --ctstate NEW -j ACCEPTБлокировка IP в iptables и набор адресов ipset
Точечная блокировка одного адреса полезна как временная мера для очевидно нежелательного источника. Вставляйте её выше разрешений, если блокировка должна иметь приоритет. Но не блокируйте адрес, с которого работает ваш текущий административный канал, и не считайте правило расследованием инцидента: при признаках компрометации следуйте процедуре реагирования на взлом сервера.
sudo iptables -I INPUT 1 -s 192.0.2.55 -j DROPsudo iptables -L INPUT -n -v --line-numbers | sed -n '1,12p'Для часто меняющегося списка блокировки удобнее ipset: правило iptables остаётся одним, а адреса добавляются и удаляются в наборе. Доступность ipset и его совместимость зависят от ядра, пакетов и backend; сначала убедитесь, что команда ipset установлена и поддерживается выбранным стеком.
sudo ipset create blocked-v4 hash:ip family inet -exist && sudo ipset add blocked-v4 192.0.2.55 -exist && { sudo iptables -C INPUT -m set --match-set blocked-v4 src -j DROP 2>/dev/null || sudo iptables -I INPUT 1 -m set --match-set blocked-v4 src -j DROP; }sudo ipset list blocked-v4; sudo iptables -L INPUT -n -v --line-numbersСрок жизни и сохранение ipset
iptables-save сохраняет правило с --match-set, но не содержимое самого набора. В Debian и Ubuntu, где этот способ поддерживается выпуском, для интеграции с netfilter-persistent обычно используют отдельный пакет ipset-persistent; проверьте по документации выпуска его файлы и порядок загрузки. Набор должен быть восстановлен раньше правила iptables, которое на него ссылается. В других дистрибутивах используйте их штатный механизм и проверьте результат после контролируемой перезагрузки. Для временной блокировки можно создать набор с поддерживаемым вашей версией параметром timeout, но срок и поведение при сохранении нужно проверить на конкретной системе.Логирование и ограничение новых подключений
Ограничение частоты запросов на хосте может сократи ть шум от перебора и ограничить отдельные сценарии злоупотребления. Модуль limit ограничивает совпадения правила в целом, а hashlimit умеет вести отдельный лимит, например по IP-источнику. Поддерживаемые параметры и модули зависят от версии iptables и ядра: перед внедрением проверьте iptables -m limit -h и iptables -m hashlimit -h на целевой системе.
sudo iptables -I INPUT 2 -p tcp --dport 22 -m conntrack --ctstate NEW -m limit --limit 5/min --limit-burst 10 -j LOG --log-prefix "iptables-ssh-new " --log-level 4sudo iptables -I INPUT 3 -p tcp --dport 22 -m conntrack --ctstate NEW -m hashlimit --hashlimit-above 20/min --hashlimit-burst 30 --hashlimit-mode srcip --hashlimit-name ssh_new_per_ip -j DROPsudo journalctl -k -g 'iptables-ssh-new' --since '10 minutes ago'; sudo iptables -L INPUT -n -v --line-numbersЛокальный rate limit не является защитой от объёмной DDoS
IPv6: ip6tables настраивается отдельно
IPv4 и IPv6 — разные пути досту па. Если у сервера есть IPv6-адрес и сервис слушает его, правило iptables для IPv4 не ограничит подключение по IPv6. При выбранном интерфейсе iptables используйте для IPv6 команду ip6tables; как и iptables, она может работать через legacy backend или совместимый backend nftables. В примерах применена документационная сеть 2001:db8::/32. Не копируйте в IPv6 политику без учёта необходимого ICMPv6: от него зависят, в частности, Neighbor Discovery и Path MTU Discovery.
sudo ip6tables -I INPUT 1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT && sudo ip6tables -I INPUT 2 -p tcp -s 2001:db8::10 --dport 22 -m conntrack --ctstate NEW -j ACCEPTСохранить и восстановит ь правила после перезагрузки
iptables-save и iptables-restore — утилиты экспорта и импорта, но сами по себе они не включают автозагрузку. Механизм постоянного хранения зависит от семейства, версии ОС и выбранного firewall-стека. Не сохраняйте правила одновременно несколькими независимыми механизмами: это создаёт непредсказуемый результат после reboot или reload.
Типичные штатные варианты для систем, где iptables является выбранным интерфейсом
| Семейство и условие | Пакеты или служба | Что проверить |
|---|---|---|
| Debian/Ubuntu при и спользовании iptables-persistent | netfilter-persistent и плагин iptables-persistent обычно сохраняют IPv4 и IPv6 в /etc/iptables/rules.v4 и /etc/iptables/rules.v6. | Проверьте состояние netfilter-persistent, содержимое файлов и правила после контролируемой перезагрузки. |
| RHEL-совместимые системы, где поддерживается legacy-служба | Пакет iptables-services предоставляет службу iptables и обычно использует файл /etc/sysconfig/iptables; для IPv6 применяется отдельная конфигурация и служба, если они установлены и включены. | Проверьте наличие пакета, unit-файлов, конфигурационных файлов и статус службы. В современных выпусках этот путь может быть заменён nftables или firewalld. |
| UFW, firewalld или нативный nftables | Постоянство обеспечивает соответствующий менеджер, а не ручной iptables-save как самостоятельная схема. | Меняйте правила через активный менеджер; не добавляйте параллельный набор прямыми командами iptables. |
Настроить постоянное хранение в Debian или Ubuntu с iptables-persistent
Применяйте этот сценарий, только если на хосте именно этот механизм выбран источником управления правилами, а не UFW или другой менеджер.
- 1Установите штатные пакетыУстановка пакета может предложить сохранить текущие IPv4- и IPv6-правила. Перед подтверждением сверьте их с экспортом, сделанным до изменений.
- 2Сохраните действующий набор через службуКоманда сохранения записывает текущие правила в файлы механизма netfilter-persistent. Убедитесь, что файлы содержат ожидаемые правила, включая IPv6 при его использовании.
- 3Проверьте автозапуск и загрузкуПроверьте статус службы. Перезагрузку проводите только в согласованное окно при наличии консольного доступа; после неё проверьте оба набора правил и SSH.
sudo apt install netfilter-persistent iptables-persistent && sudo netfilter-persistent save && sudo systemctl status netfilter-persistent --no-pagerПроверить постоянство в RHEL-совместимой системе с iptables-services
Этот путь применим только там, где пакет iptables-services доступен, установлен и выбран вместо firewalld/nftables.
- 1Проверьте, что служба и пакет существуютНе устанавливайте и не включайте legacy-службу поверх работающего firewalld без оценки миграции: оба компонента могут управлять тем же firewall-слоем.
- 2Сохраните правила штатной командой службыЕсли служба поддерживает сохранение в вашем выпуске, команда запишет текущую IPv4-конфигурацию в её штатный файл. IPv6 проверяйте отдельно.
- 3Подтвердите загрузку после рестартаПроверьте состояние unit и содержимое конфигурационного файла. Результат подтв ерждается только фактическим наличием правил после контролируемой перезагрузки.
rpm -q iptables-services; sudo systemctl status iptables --no-pager; sudo service iptables savesudo iptables-save | sudo diff -u /etc/iptables/rules.v4 -sudo systemctl is-active ufw firewalld netfilter-persistent iptables nftables 2>/dev/nullПроверка после каждого изменения и типичные отклонения
- Проверьте порядок и счётчики:
sudo iptables -L INPUT -n -v --line-numbers. Счётчик нужного правила должен расти при тестовом трафике. - Проверьте правило в машинно-читаемом виде:
sudo iptables -S INPUT. Это помогает обнаружить не тот протокол, адрес, порт или дубликат. - Проверьте сервис локально и с разрешённого внешнего адреса. Успешный
ss -lntpдоказывает только прослушивание порта, а не прохождение пакетов через firewall. - Если доступ должен быть ограничен, выполните отдельную проверку с неразрешённого адреса. Не считайте правило рабочим только потому, что команда iptables завершилась без ошибки.
- После сохранения проверьте постоянный файл или службу и только затем планируйте перезагрузку.
Проблема
iptables сообщает Permission denied или Operation not permitted
Возможные причины
- Команда запущена не от root и без достаточных прав sudo.
- Процесс находится в контейнере или ограниченном окружении без capability `CAP_NET_ADMIN`.
- Политика sudo или средство управления конфигурацией запрещает прямые изменения.
Решение
Сначала повторите безопасную команду просмотра через sudo iptables -L -n -v. Если она работает, выполняйте изменения через sudo. В контейнере проверяйте права и модель управления на уровне хоста; не добавляйте привилегии контейнеру без оценки риска.
Как избежать
Используйте отдельную привилегированную учётную запись и минимальные правила sudo. Ошибка относится к правам управления Netfilter, а не обязательно к SSH-аутентификации.
Проблема
Правило добавлено, но порт по-прежнему недоступен
Возможные причины
- Трафик не приходит к серверу: неверный адрес, маршрут, внешний firewall, балансировщик или политика провайдера.
- Сервис не слушает нужный адрес или порт.
- Более раннее правило, переход в пользовательскую цепочку либо другой firewall-менеджер меняет результат.
- Проверка идёт по IPv6, а разрешение добавлено только через iptables для IPv4.
Решение
Сверьте адресное семейство, ss -lntp, порядок INPUT и счётчики. Проверьте активность UFW, firewalld и nftables. Не расширяйте правило до ACCEPT all как способ диагностики.
Как избежать
Документируйте назначение, источник, порт и владельца каждого правила; после изменения тестируйте доступ с нужного и ненужного источника.
Термины в статье
- Allowlist
- Allowlist — перечень разрешающих записей или правил: система допускает только те субъекты, объекты, действия или значения, которые им соответствуют.
- Netfilter
- Netfilter — подсистема ядра Linux для перехвата и обработки сетевых пакетов в контрольных точках стека; правила iptables и nftables используют её механизмы.
- UFW
- UFW — утилита упрощённого управления правилами межсетевого экрана в Linux, создающая правила Netfilter по командам высокого уровня.
- firewalld
- firewalld — служба управления межсетевым экраном в Linux, применяющая правила через зоны, сервисы и политики без прямого редактирования полного набора правил.
- iptables
- iptables — утилита Linux для управления правилами пакетной фильтрации Netfilter через таблицы, цепочки и цели; это не самостоятельный межсетевой экран.
- nftables
- nftables — подсистема Linux и интерфейс управления правилами Netfilter, использующие единый набор правил, выражения, множества и атомарное обновление конфигурации.
- Запрет по умолчанию
- Запрет по умолчанию — политика контроля доступа, при которой разрешаются только явно разрешённые правилами обращения или действия, а всё остальное блокируется.
- Межсетевой экран
- Межсетевой экран — средство контроля сетевого трафика, разрешающее или блокирующее его по правилам на границе или между сегментами сети.
- Межсетевой экран с отслеживанием состояния
- Межсетевой экран с отслеживанием состояния — межсетевой экран, который сопоставляет пакеты с состоянием отслеживаемых соединений и потоков и применяет правила с учётом их контекста.
- Ограничение частоты запросов
- Ограничение частоты запросов — механизм контроля нагрузки, ограничивающий число запросов от клиента или другого субъекта за заданный интервал.
- Отслеживание соединений
- Отслеживание соединений в Linux — механизм Netfilter, ведущий записи о потоках и их состояниях для фильтрации с учётом состояния, NAT и правил, зависящих от направления трафика.
- Порядок обработки правил
- Порядок обработки правил — механизм определения последовательности проверки правил политики, от которой зависит, какое совпавшее правило применит система безопасности.
- Правило межсетевого экрана
- Правило межсетевого экрана — элемент политики фильтрации, задающий условия сопоставления трафика и действие над пакетами или соединениями.
- Состояние соединения
- Состояние соединения — классификация пакета подсистемой отслеживания соединений: NEW, ESTABLISHED, RELATED, INVALID или UNTRACKED.
- Список блокировки
- Список блокировки — набор идентификаторов, адресов или признаков, для которых политика явно запрещает действие, например подключение, доставку сообщения или доступ к ресурсу.
- Таблица iptables
- Таблица iptables — логическая группа цепочек правил с общей задачей обработки пакетов, например фильтрацией, NAT или изменением служебных параметров пакета.
- Фильтрация исходящего трафика
- Фильтрация исходящего трафика — контроль соединений из защищаемой сети наружу, ограничивающий разрешённые назначения, протоколы, сервисы и источники исходящих пакетов.
- Фильтрация пакетов
- Фильтрация пакетов — способ контроля сетевого трафика по полям пакета и правилам, при необходимости дополненный отслеживанием состояния соединений.
- Цепочка iptables
- Цепочка iptables — упорядоченный набор правил в одной из таблиц iptables, которые Netfilter последовательно проверяет при обработке пакета.
