Представь, что твои правила iptables превратились в непроходимые джунгли, и ты случайно заблокировал SSH на продакшн-сервере. Или тебе нужно начать конфигурацию межсетевого экрана с чистого листа. В этой ситуации необходимо сбросить настройки iptables — полностью очистить все правила, цепочки и счетчики. Давай разберем, как это сделать безопасно и без потери доступа к серверу.
Что значит "сбросить iptables"?
Когда мы говорим "сбросить настройки iptables", мы подразумеваем несколько операций:
- Удаление всех пользовательских правил из всех цепочек (INPUT, OUTPUT, FORWARD и пользовательских).
- Сброс счетчиков пакетов и байтов (counters) к нулю.
- Возврат политик по умолчанию для встроенных цепочек к ACCEPT (обычно).
- Удаление всех пользовательских цепочек и таблиц (если они были созданы).
Метод 1: Быстрый сброс всех правил iptables
Самый простой способ — использовать последовательность команд для очистки (flush), удаления цепочек и установки разрешающих политик.
Шаг 1: Установи разрешающие политики (чтобы не потерять доступ)
Сначала установи политики ACCEPT для основных цепочек. Это гарантирует, что после очистки правил трафик не будет блокирован по умолчанию.
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
Шаг 2: Очисти все правила в цепочках
Команда -F (flush) удаляет все правила из выбранной цепочки. Без указания цепочки — очищает все цепочки в текущей таблице.
# Очистка правил в таблице filter (по умолчанию)
iptables -F
# Очистка правил в таблице nat
iptables -t nat -F
# Очистка правил в таблице mangle
iptables -t mangle -F
# Очистка правил в таблице raw
iptables -t raw -F
Шаг 3: Удали все пользовательские цепочки
Команда -X удаляет пользовательские (не встроенные) цепочки. Убедись, что они пусты перед удалением.
# Удаление пользовательских цепочек в таблице filter
iptables -X
# Удаление пользовательских цепочек в других таблицах
iptables -t nat -X
iptables -t mangle -X
iptables -t raw -X
Шаг 4: Сбрось счетчики пакетов и байтов
Обнули счетчики, которые показывают, сколько пакетов прошло через правила.
# Сброс счетчиков во всех цепочках таблицы filter
iptables -Z
# Сброс счетчиков в других таблицах
iptables -t nat -Z
iptables -t mangle -Z
iptables -t raw -Z
Метод 2: Сброс через сохраненные настройки (более безопасный)
Если у тебя есть рабочая базовая конфигурация или ты хочешь вернуться к состоянию после загрузки системы, используй этот метод.
Шаг 1: Сохрани текущие правила (на всякий случай)
# Сохранение текущих правил в файл резервной копии
iptables-save > ~/iptables-backup-$(date +%Y%m%d).rules
Шаг 2: Загрузи "пустую" конфигурацию
Создай минимальный конфигурационный файл с разрешающими политиками и без правил.
# Создание файла с базовой разрешающей конфигурацией
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, если они использовались.
# Пример для таблицы 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, которые могут сбросить конфигурацию.
# Для систем, использующих 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, который можно использовать в любой ситуации.
#!/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"
ip6tables -P INPUT ACCEPT && ip6tables -F && ip6tables -X.
Частые проблемы и их решение
1. После сброса iptables не работает интернет/сеть
Вероятно, были удалены правила NAT (таблица nat), которые обеспечивали маскарадинг (masquerade). Восстанови их:
# Для сервера, раздающего интернет (шлюз)
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
2. Правила восстанавливаются после перезагрузки
Значит, в системе есть служба, сохраняющая правила (например, iptables-persistent). Удали сохраненные файлы:
# Для 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
3. Ошибка "Too many links" при удалении цепочек
Цепочка все еще используется другими правилами. Сначала удали все правила, ссылающиеся на нее:
# Найди, где используется цепочка MY_CHAIN
iptables-save | grep MY_CHAIN
# Удали все правила, ссылающиеся на нее, затем
# очисти саму цепочку и удали ее
iptables -F MY_CHAIN # Очистка правил в цепочке
iptables -X MY_CHAIN # Удаление цепочки
Проверка результата
После сброса убедись, что все работает как ожидалось:
# Показать все правила (должны быть только политики по умолчанию)
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— всегда делай бэкап!