Сбросить настройки iptables: команды, методы, восстановление | AdminWiki

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

31 декабря 2025 9 мин. чтения #devops #firewall #iptables #linux #безопасность #сеть
Содержание статьи

Представь, что твои правила iptables превратились в непроходимые джунгли, и ты случайно заблокировал SSH на продакшн-сервере. Или тебе нужно начать конфигурацию межсетевого экрана с чистого листа. В этой ситуации необходимо сбросить настройки iptables — полностью очистить все правила, цепочки и счетчики. Давай разберем, как это сделать безопасно и без потери доступа к серверу.

Что значит "сбросить iptables"?

Когда мы говорим "сбросить настройки iptables", мы подразумеваем несколько операций:

  • Удаление всех пользовательских правил из всех цепочек (INPUT, OUTPUT, FORWARD и пользовательских).
  • Сброс счетчиков пакетов и байтов (counters) к нулю.
  • Возврат политик по умолчанию для встроенных цепочек к ACCEPT (обычно).
  • Удаление всех пользовательских цепочек и таблиц (если они были созданы).
Внимание! Если ты выполняешь команды удаленно (по SSH), есть риск потерять соединение. Всегда имей план Б: консоль сервера (KVM, IPMI) или выполняй операции через скрипт с таймаутом, который автоматически восстановит доступ.

Метод 1: Быстрый сброс всех правил iptables

Самый простой способ — использовать последовательность команд для очистки (flush), удаления цепочек и установки разрешающих политик.

Шаг 1: Установи разрешающие политики (чтобы не потерять доступ)

Сначала установи политики ACCEPT для основных цепочек. Это гарантирует, что после очистки правил трафик не будет блокирован по умолчанию.

bash
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

Шаг 2: Очисти все правила в цепочках

Команда -F (flush) удаляет все правила из выбранной цепочки. Без указания цепочки — очищает все цепочки в текущей таблице.

bash
# Очистка правил в таблице filter (по умолчанию)
iptables -F

# Очистка правил в таблице nat
iptables -t nat -F

# Очистка правил в таблице mangle
iptables -t mangle -F

# Очистка правил в таблице raw
iptables -t raw -F

Шаг 3: Удали все пользовательские цепочки

Команда -X удаляет пользовательские (не встроенные) цепочки. Убедись, что они пусты перед удалением.

bash
# Удаление пользовательских цепочек в таблице filter
iptables -X

# Удаление пользовательских цепочек в других таблицах
iptables -t nat -X
iptables -t mangle -X
iptables -t raw -X

Шаг 4: Сбрось счетчики пакетов и байтов

Обнули счетчики, которые показывают, сколько пакетов прошло через правила.

bash
# Сброс счетчиков во всех цепочках таблицы filter
iptables -Z

# Сброс счетчиков в других таблицах
iptables -t nat -Z
iptables -t mangle -Z
iptables -t raw -Z
Экспертный совет: Все эти шаги можно объединить в один безопасный скрипт, который сначала устанавливает политики ACCEPT, а затем выполняет очистку. Это стандартный подход, чтобы сбросить настройки iptables без блокировки.

Метод 2: Сброс через сохраненные настройки (более безопасный)

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

Шаг 1: Сохрани текущие правила (на всякий случай)

bash
# Сохранение текущих правил в файл резервной копии
iptables-save > ~/iptables-backup-$(date +%Y%m%d).rules

Шаг 2: Загрузи "пустую" конфигурацию

Создай минимальный конфигурационный файл с разрешающими политиками и без правил.

bash
# Создание файла с базовой разрешающей конфигурацией
cat > /tmp/empty-rules.v4 << 'EOF'
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT
EOF

# Применение пустых правил
iptables-restore < /tmp/empty-rules.v4

Шаг 3: Очисти другие таблицы

Не забудь про таблицы nat, mangle и raw, если они использовались.

bash
# Пример для таблицы nat
cat > /tmp/empty-nat.v4 << 'EOF'
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
EOF

iptables-restore -t nat < /tmp/empty-nat.v4

Метод 3: Использование системных утилит и служб

В некоторых дистрибутивах есть службы управления firewall, которые могут сбросить конфигурацию.

bash
# Для систем, использующих iptables-persistent
sudo systemctl stop netfilter-persistent  # Остановка службы
sudo rm /etc/iptables/rules.v4           # Удаление сохраненных правил
sudo rm /etc/iptables/rules.v6
sudo systemctl start netfilter-persistent # Запуск с пустыми правилами

# Для firewalld (если он использует iptables как бэкенд)
sudo firewall-cmd --reload  # Перезагрузка правил, если нужно сбросить к настройкам по умолчанию
# Или полная остановка firewalld
sudo systemctl stop firewalld
sudo systemctl disable firewalld

Сравнение методов сброса iptables

Метод Команды Когда использовать Риски
Последовательный сброс iptables -P ... ACCEPT; iptables -F; iptables -X Быстрая очистка вручную, отладка Средние (можно забыть про таблицы nat/mangle)
Через конфиг-файл iptables-restore < empty.conf Безопасный сброс, автоматизация, восстановление Низкие (если правильно создать файл)
Через системные службы systemctl stop netfilter-persistent Дистрибутивы с предустановленными менеджерами Зависит от дистрибутива

Автоматизация: скрипт для безопасного сброса

Создай скрипт reset-iptables.sh, который можно использовать в любой ситуации.

bash
#!/bin/bash
# Скрипт для безопасного сброса iptables

BACKUP_DIR="/var/backups/iptables"
mkdir -p "$BACKUP_DIR"

# 1. Создание резервной копии
BACKUP_FILE="$BACKUP_DIR/iptables-backup-$(date +%Y%m%d-%H%M%S).rules"
iptables-save > "$BACKUP_FILE"
iptables-save -t nat > "${BACKUP_FILE}.nat"
echo "[+] Резервная копия создана: $BACKUP_FILE"

# 2. Установка разрешающих политик (предотвращает блокировку)
echo "[+] Установка политик ACCEPT..."
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

# 3. Очистка всех таблиц
for table in filter nat mangle raw; do
    echo "[+] Очистка таблицы $table..."
    iptables -t $table -F  # Очистка правил
    iptables -t $table -X  # Удаление пользовательских цепочек
    iptables -t $table -Z  # Сброс счетчиков

done

echo "[+] Сброс iptables завершен успешно!"
echo "[i] Для восстановления используй: iptables-restore < $BACKUP_FILE"
Важно для IPv6: Не забывай про ip6tables! Если у тебя включен IPv6, выполни те же операции для него: ip6tables -P INPUT ACCEPT && ip6tables -F && ip6tables -X.

Частые проблемы и их решение

1. После сброса iptables не работает интернет/сеть

Вероятно, были удалены правила NAT (таблица nat), которые обеспечивали маскарадинг (masquerade). Восстанови их:

bash
# Для сервера, раздающего интернет (шлюз)
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

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

Значит, в системе есть служба, сохраняющая правила (например, iptables-persistent). Удали сохраненные файлы:

bash
# Для Debian/Ubuntu
rm /etc/iptables/rules.v4
rm /etc/iptables/rules.v6

# Или очисть их
echo "*filter\n:INPUT ACCEPT [0:0]\n:FORWARD ACCEPT [0:0]\n:OUTPUT ACCEPT [0:0]\nCOMMIT" > /etc/iptables/rules.v4

Цепочка все еще используется другими правилами. Сначала удали все правила, ссылающиеся на нее:

bash
# Найди, где используется цепочка MY_CHAIN
iptables-save | grep MY_CHAIN

# Удали все правила, ссылающиеся на нее, затем
# очисти саму цепочку и удали ее
iptables -F MY_CHAIN  # Очистка правил в цепочке
iptables -X MY_CHAIN  # Удаление цепочки

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

После сброса убедись, что все работает как ожидалось:

bash
# Показать все правила (должны быть только политики по умолчанию)
iptables -L -n -v

# Показать правила NAT
iptables -t nat -L -n -v

# Проверить, что счетчики обнулены (столбец pkts должен быть 0)
iptables -L INPUT -n -v

# Проверить, нет ли пользовательских цепочек
iptables -L | grep -E "^Chain [^A-Z]"  # Не должно быть вывода

FAQ: Ответы на частые вопросы

Чем отличается "iptables -F" от "iptables -X"?

-F (flush) очищает правила внутри цепочек, но оставляет сами цепочки. -X удаляет пользовательские цепочки, но только если они пусты (после -F).

Нужно ли сбрасывать счетчики (-Z) при сбросе настроек?

Да, если хочешь полный сброс к состоянию "как после перезагрузки". Счетчики полезны для мониторинга, но после очистки правил их лучше обнулить.

Как сбросить iptables на CentOS/RHEL?

Команды одинаковы для всех дистрибутивов. Дополнительно можешь остановить firewalld: systemctl stop firewalld && systemctl disable firewalld.

Что делать, если после сброса Docker перестал работать?

Docker создает свои цепочки в iptables. Перезапусти Docker: systemctl restart docker. Он восстановит необходимые правила.

Можно ли сбросить только определенную цепочку?

Да: iptables -F INPUT очистит только цепочку INPUT. iptables -Z INPUT обнулит ее счетчики.

Заключение

Теперь ты знаешь, как правильно сбросить настройки iptables в любой ситуации. Главное правило — всегда начинай с установки разрешающих политик (ACCEPT), особенно при работе по SSH. Используй резервные копии перед сбросом и помни про все таблицы (filter, nat, mangle, raw) и IPv6 (ip6tables).

Для продакшн-серверов рекомендую метод с конфигурационными файлами — он предсказуем и легко автоматизируется. А созданный скрипт для сброса станет твоим надежным инструментом в арсенале DevOps-инженера.

Ключевые команды для запоминания:

  • iptables -P INPUT ACCEPT — безопасность прежде всего
  • iptables -F — очистка правил
  • iptables -X — удаление пользовательских цепочек
  • iptables -Z — сброс счетчиков
  • iptables-save > backup.rules — всегда делай бэкап!
Поделиться:
Сохранить гайд? В закладки браузера