Введение
Иногда что-то идёт не так. Очень не так. Например, вы заметили, что хакер атакует сервер, или вирус быстро распространяется. В таком случае компьютер нужно немедленно отключить от сети.
firewalld предоставляет функцию аварийного режима (panic mode). После включения этого режима брандмауэр немедленно блокирует все входящие и исходящие соединения.
Поэтому аварийный режим предназначен для реагирования на инциденты, а не для обычной настройки. Он позволяет быстро локализовать угрозу, когда немедленная остановка обмена данными важнее сохранения сетевого подключения.
Это средство аварийной локализации угроз. Оно не предназначено для обычного администрирования, но важно понимать принцип его работы: политика брандмауэра может использоваться как инструмент быстрой изоляции системы во время инцидента.
Проблема с удалёнными серверами:
Если вы находитесь непосредственно перед физическим сервером, проблем не возникнет. Но в удалённой среде, например в этой виртуальной машине LabEx или на облачном сервере, включение аварийного режима немедленно разорвёт ваше собственное подключение. Вы потеряете доступ и не сможете отключить этот режим.
В этой лабораторной работе вы научитесь безопасно моделировать и проверять эту функцию с помощью скрипта «мёртвой руки» (Dead Man’s Switch). Скрипт включит аварийный режим, выполнит проверку, а затем автоматически отключит его, чтобы вы снова получили доступ.
Создание безопасного тестового скрипта
Мы не можем напрямую выполнить firewall-cmd --panic-on, поскольку при этом потеряем текущий сеанс. Поэтому сначала создадим скрипт, который автоматически выполнит всю последовательность действий.
Это также общий приём безопасной эксплуатации: если сетевое изменение может заблокировать вам доступ, автоматизируйте откат до выполнения рискованного изменения. Так вы снизите вероятность того, что тест приведёт к простою.
Скрипт выполнит следующие действия:
- Запишет результат проверки ping в обычном состоянии — проверка должна завершиться успешно.
- Включит аварийный режим.
- Запишет результат проверки ping во время аварийного режима — проверка должна завершиться ошибкой.
- Отключит аварийный режим и восстановит доступ.
Создайте файл с именем safe_panic_test.sh:
nano safe_panic_test.sh
Вставьте в него следующий текст:
#!/bin/bash
LOGFILE="panic_test.log"
echo "--- PHASE 1: Normal State ---" > $LOGFILE
ping -c 2 8.8.8.8 >> $LOGFILE 2>&1
echo "" >> $LOGFILE
echo "--- PHASE 2: Enabling PANIC MODE ---" >> $LOGFILE
firewall-cmd --panic-on
echo "Panic Mode is ON." >> $LOGFILE
echo "Attempting to ping 8.8.8.8 (Should fail)..." >> $LOGFILE
## -W 2 means wait max 2 seconds for response
ping -c 2 -W 2 8.8.8.8 >> $LOGFILE 2>&1
echo "" >> $LOGFILE
echo "--- PHASE 3: Disabling PANIC MODE ---" >> $LOGFILE
firewall-cmd --panic-off
echo "Panic Mode is OFF." >> $LOGFILE
echo "Checking connectivity restored..." >> $LOGFILE
ping -c 2 8.8.8.8 >> $LOGFILE 2>&1
Сохраните файл и выйдите из редактора (Ctrl+O, Enter, Ctrl+X).
Сделайте скрипт исполняемым:
chmod +x safe_panic_test.sh
Безопасный запуск теста
Теперь начинается критически важная часть. Если запустить скрипт обычным способом, ваше подключение может разорваться в момент включения аварийного режима. В этом случае скрипт завершится до того, как успеет отключить аварийный режим.
Чтобы этого не произошло, используйте nohup (No Hang Up, «не завершать при отключении»). Эта команда позволяет скрипту продолжить работу в фоновом режиме, даже если ваш терминальный сеанс будет закрыт.
Это хороший пример разделения времени жизни процесса и времени жизни терминала. Безопасность эксперимента зависит от того, сможет ли скрипт восстановления продолжить работу, даже если интерактивный сеанс перестанет работать.
Запустите скрипт с помощью sudo и nohup:
sudo nohup ./safe_panic_test.sh &
Что должно произойти:
- Терминал может зависнуть или перестать отвечать примерно на 5–10 секунд. Не обновляйте страницу.
- После завершения третьей фазы скрипта — отключения аварийного режима — подключение должно автоматически восстановиться.
Подождите не менее 15 секунд.
Анализ результатов
Теперь, когда подключение восстановилось, изучите файл журнала и убедитесь, что аварийный режим действительно сработал.
Проверка особенно важна, поскольку аварийный режим специально нарушает работу сети. Необходимо убедиться, что во время теста система была изолирована, а после теста обычное подключение восстановилось.
Просмотрите файл журнала:
cat panic_test.log
Вы должны увидеть примерно такую последовательность:
- PHASE 1: проверка ping завершилась успешно.
- PHASE 2: аварийный режим включён. Во время этой проверки должны появиться ошибки, например
Network is unreachable, или сообщение о потере100% packet loss. - PHASE 3: аварийный режим отключён. Проверка ping снова завершилась успешно.
Это подтверждает, что в течение нескольких секунд сервер был полностью изолирован от сети.
Проверка состояния
Наконец, вручную убедитесь, что система вернулась в обычное состояние, а аварийный режим точно отключён.
Проверьте состояние аварийного режима:
sudo firewall-cmd --query-panic
Команда должна вернуть значение no.
Техника «переключения с помощью скрипта» — важный навык для инженеров DevOps. Если вы изменяете сетевые параметры и из-за этого можете потерять подключение, всегда заранее запланируйте команду отката или используйте оболочку-скрипт, подобную этой.
Главный вывод — необходимость безопасной эксплуатации: для рискованных изменений в настройках брандмауэра путь восстановления нужно планировать заранее, а не пытаться придумать после потери доступа.
Итоги
В этой лабораторной работе вы научились безопасно использовать аварийный режим в удалённой среде. Вы:
- Создали скрипт «мёртвой руки», который автоматически включает и отключает аварийный режим.
- Использовали
nohup, чтобы скрипт продолжил работу после разрыва сетевого подключения. - Проанализировали журналы и убедились, что изоляция сети действительно произошла.
Этот подход показывает, как управлять опасными параметрами безопасности, не блокируя себе доступ к серверу.



