Как сохранить настройки iptables в Ubuntu и Linux: команды, методы, FAQ | AdminWiki

iptables сохранить настройки: полное руководство для Ubuntu и других дистрибутивов

19 декабря 2025 7 мин. чтения #devops #firewall #iptables #linux #ubuntu #настройка #сетевая безопасность

Почему правила iptables не сохраняются и как это исправить

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

Ключевой момент: iptables — это утилита для управления сетевым фильтром в ядре Linux. Её конфигурация в реальном времени не имеет прямого отношения к файлам на диске. Для персистентности нужны специальные инструменты.

Как сохранить настройки iptables в Ubuntu: пошаговое руководство

Давай разберем самый популярный и надежный метод для дистрибутивов на основе Debian, включая Ubuntu 20.04, 22.04 и более новые версии.

Метод 1: Используем iptables-persistent (рекомендуется для Ubuntu)

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

bash
# 1. Устанавливаем пакет
sudo apt update
sudo apt install iptables-persistent -y

# Во время установки тебя спросят, сохранить ли текущие правила.
# Можешь ответить "Да" или позже сохранить вручную.

# 2. Если нужно сохранить текущие правила ПОСЛЕ установки:
sudo netfilter-persistent save

# Или альтернативная команда:
sudo iptables-save > /etc/iptables/rules.v4
sudo ip6tables-save > /etc/iptables/rules.v6

# 3. Проверяем, что правила сохранились:
cat /etc/iptables/rules.v4

# 4. Применяем правила без перезагрузки:
sudo netfilter-persistent reload
Важно: В Ubuntu 22.04 и новее пакет может называться netfilter-persistent, но команды остаются совместимыми. Если iptables-persistent не находится, попробуй установить именно netfilter-persistent.

Метод 2: Ручное сохранение через iptables-save

Это универсальный метод, работающий на любом дистрибутиве Linux. Он дает полный контроль над процессом.

bash
# Сохраняем правила IPv4 и IPv6 в файлы
sudo iptables-save > /etc/iptables/rules.v4
sudo ip6tables-save > /etc/iptables/rules.v6

# Создаем скрипт для автозагрузки (если нет systemd)
sudo nano /etc/network/if-pre-up.d/iptables

Содержимое скрипта:

bash
#!/bin/bash
/sbin/iptables-restore < /etc/iptables/rules.v4
/sbin/ip6tables-restore < /etc/iptables/rules.v6
bash
# Делаем скрипт исполняемым:
sudo chmod +x /etc/network/if-pre-up.d/iptables

Метод 3: Systemd сервис (для современных дистрибутивов)

Если твоя система использует systemd (как большинство современных дистрибутивов), можно создать собственный сервис:

bash
# Создаем сервисный файл
sudo nano /etc/systemd/system/iptables.service

Содержимое файла:

ini
[Unit]
Description=Restore iptables rules
Before=network-pre.target
Wants=network-pre.target

[Service]
Type=oneshot
ExecStart=/sbin/iptables-restore /etc/iptables/rules.v4
ExecStart=/sbin/ip6tables-restore /etc/iptables/rules.v6
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
bash
# Активируем и запускаем сервис
sudo systemctl daemon-reload
sudo systemctl enable iptables.service
sudo systemctl start iptables.service

Сравнение методов сохранения настроек iptables

Метод Дистрибутивы Сложность Надежность Рекомендация
iptables-persistent Debian, Ubuntu Низкая Высокая ⭐ Лучший выбор для Ubuntu
Ручной + systemd Systemd-дистрибутивы Средняя Очень высокая Для кастомных конфигураций
Ручной + init скрипт Все дистрибутивы Средняя Средняя Универсальный метод
firewalld RHEL, CentOS, Fedora Низкая Высокая Для RedHat-семейства

Типичные проблемы и их решения

Правила не применяются после перезагрузки

Если ты всё сделал правильно, но правила не сохраняются, проверь следующее:

  • Порядок загрузки: Правила должны загружаться ДО поднятия сетевых интерфейсов
  • Права доступа: Файлы с правилами должны быть читаемы для root
  • Синтаксис: Проверь файлы правил командой sudo iptables-restore -t /etc/iptables/rules.v4
  • Конфликты: Убедись, что нет других фаерволов (ufw, firewalld), которые перезаписывают правила

Как проверить, что правила сохранились

bash
# 1. Посмотреть текущие правила в памяти
sudo iptables -L -n -v

# 2. Посмотреть сохраненные правила в файле
sudo cat /etc/iptables/rules.v4

# 3. Сравнить вывод (они должны совпадать после перезагрузки)
# 4. Тестовый ребут или применение правил:
sudo iptables-restore < /etc/iptables/rules.v4
sudo iptables -L -n -v  # проверяем изменения

Дополнительные советы от Senior DevOps

Профессиональный лайфхак: Всегда веди версионный контроль для правил iptables. Сохраняй конфиги в Git вместе с остальной инфраструктурой как код (IaC). Это позволит откатывать изменения и деплоить правила автоматически.

Вот рабочий процесс, который я рекомендую для production-среды:

  1. Тестируй новые правила на не-production сервере
  2. Сохраняй их в файл /etc/iptables/rules.v4
  3. Коммить этот файл в Git-репозиторий инфраструктуры
  4. Используй Ansible, Chef или Puppet для деплоя правил на сервера
  5. Всегда имей скрипт для быстрого отката к предыдущей версии

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

В чем разница между iptables-save и netfilter-persistent?

iptables-save — это утилита для экспорта текущих правил в текстовый формат. netfilter-persistent (или iptables-persistent) — это пакет, который автоматически вызывает iptables-restore при загрузке системы из сохраненных файлов. Первый — инструмент, второй — решение для автоматизации.

Можно ли сохранить настройки iptables без перезагрузки?

Да, команда sudo netfilter-persistent save сохраняет текущие правила в файлы без перезагрузки. Но чтобы они применялись автоматически при следующей загрузке, нужно именно то, о чем мы говорили в статье — настройка персистентности через пакеты или systemd.

Что делать, если я использую ufw (Uncomplicated Firewall)?

UFW — это фронтенд для iptables. При включении (sudo ufw enable) он автоматически настраивает сохранение правил через iptables-persistent. Твои правила, добавленные через ufw allow и ufw deny, будут сохраняться автоматически.

Где физически хранятся сохраненные правила iptables в Ubuntu?

По умолчанию в Ubuntu с пакетом iptables-persistent правила хранятся в:
- /etc/iptables/rules.v4 — для IPv4 правил
- /etc/iptables/rules.v6 — для IPv6 правил

Почему после сохранения правил пропадает доступ к серверу по SSH?

Самая частая ошибка — не добавить правило для SSH перед тем, как дропать все остальные соединения. Всегда проверяй цепочку правил и убедись, что правило для SSH (обычно порт 22) идет ПЕРЕД правилом DROP в цепочке INPUT.

Экстренное восстановление доступа: Если ты заблокировал себе доступ, подключись через консоль провайдера (KVM, VNC), закомментируй правило DROP в файле /etc/iptables/rules.v4 и выполни sudo netfilter-persistent reload.

Заключение

Теперь ты знаешь, как надежно сохранить настройки iptables в Ubuntu и других дистрибутивах Linux. Ключевые моменты:

  • Для Ubuntu используй iptables-persistent — это самый простой и надежный способ
  • Всегда проверяй правила перед сохранением и после перезагрузки
  • Веди версионный контроль конфигураций фаервола
  • Помни про правило SSH — оно должно быть первым в цепочке INPUT

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

Поделиться:
Сохранить гайд? В закладки браузера