Firewalld — это современный менеджер фаервола, который использует зоны для управления правилами. В отличие от старой iptables или упрощённого ufw, firewalld поддерживает динамическое изменение правил без перезапуска сервиса, разделяет временные и постоянные настройки и понимает не только порты, но и «сервисы» (например, ssh, http). Это особенно удобно для серверов, где важна бесперебойная работа.
💡 Firewalld не установлен на Debian по умолчанию, но находится в стандартных репозиториях. В этом руководстве мы установим firewalld, разберём понятие зон, научимся открывать порты и сервисы, а также сохранять правила после перезагрузки.
В этой статье вы узнаете:
- Как установить Firewalld на Debian
- Что такое зоны и как они работают
- Как открывать сервисы (SSH, HTTP, HTTPS) и порты
- Как управлять правилами (добавлять, удалять, сохранять)
- Как проверить статус фаервола и активные правила
- Как отключить или полностью удалить Firewalld
Для кого: системные администраторы (настройка фаервола на серверах), пользователи, которые хотят управлять сетевым доступом, владельцы VPS, пользователи Debian 11, 12 и 13.
1. 🔧 Предварительные требования
Перед установкой убедитесь, что:
- У вас установлена Debian 11, 12 или 13 (любая редакция)
- У вас есть доступ к терминалу (локально или по SSH)
- Вы понимаете, что неправильные настройки фаервола могут заблокировать ваш доступ к серверу (особенно важно для удалённых серверов)
⚠️ ВАЖНО: Проверьте права sudo перед установкой
Если вы не уверены, есть ли у вашего пользователя права администратора, выполните в терминале:
sudo whoami
✅ Если выводит root — всё в порядке, можете продолжать.
❌ Если выводит is not in the sudoers file — сначала пройдите наше руководство по настройке sudo
Обновление системы
Перед установкой всегда обновляйте список пакетов:
sudo apt update
Что делает: Обновляет список доступных пакетов из репозиториев.
Зачем: Убедиться, что устанавливается последняя версия firewalld для вашего выпуска Debian.
2. 📦 Установка Firewalld
Firewalld находится в стандартных репозиториях Debian, поэтому установка происходит одной командой.
sudo apt install firewalld -y
Что делает: Устанавливает пакет firewalld и автоматически запускает сервис.
Что произойдёт во время установки: Будут созданы символические ссылки в systemd, и firewalld запустится сразу после установки.
Версии firewalld по умолчанию в разных Debian:
| Версия Debian | Кодовое имя | Версия Firewalld |
|---|---|---|
| Debian 13 | Trixie | 2.3.x |
| Debian 12 | Bookworm | 1.3.x |
| Debian 11 | Bullseye | 0.9.x |
3. 🔍 Проверка установки
3.1 Проверка, что команда firewall-cmd доступна
command -v firewall-cmd
✅ Ожидаемый вывод: /usr/bin/firewall-cmd
3.2 Проверка версии
sudo firewall-cmd --version
✅ Ожидаемый вывод (Debian 13): 2.3.1
3.3 Проверка статуса сервиса
sudo systemctl is-enabled firewalld
sudo systemctl is-active firewalld
✅ Ожидаемый вывод: enabled и active
Что делает: is-enabled проверяет, запускается ли firewalld при загрузке, is-active — работает ли он сейчас.
3.4 Проверка состояния фаервола
sudo firewall-cmd --state
✅ Ожидаемый вывод: running
Что делает: Показывает, активен ли фаервол (running = работает).
4. 🧠 Понимание зон Firewalld
Firewalld использует концепцию зон — уровней доверия для сетевых интерфейсов. Каждая зона имеет свой набор правил. По умолчанию активна зона public (самая строгая).
| Зона | Уровень доверия | Типичное использование |
|---|---|---|
public | Низкий | Общедоступные сети (интернет, Wi-Fi в кафе). Разрешён только SSH. |
home | Средний | Домашняя сеть. Можно разрешить больше сервисов. |
internal | Средний | Внутренняя сеть организации. |
trusted | Полный | Все соединения разрешены. Только для изолированных сетей. |
drop | Минимальный | Все входящие пакеты отбрасываются. |
💡 Для сервера в интернете используйте зону public. Это настройка по умолчанию после установки.
4.1 Проверка активной зоны
sudo firewall-cmd --get-active-zones
✅ Ожидаемый вывод:
public
interfaces: eth0
4.2 Просмотр всех правил активной зоны
sudo firewall-cmd --list-all
✅ Ожидаемый вывод после установки:
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: dhcpv6-client ssh
ports:
protocols:
forward: no
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Что важно: В списке services уже есть ssh — это значит, что удалённое подключение не будет заблокировано сразу после установки.
5. 🛡️ Управление правилами Firewalld
В firewalld есть два типа конфигурации:
- Runtime — действует сейчас, но пропадёт после перезагрузки (полезно для тестирования)
- Permanent — сохраняется после перезагрузки (нужно выполнить
--reload)
Рекомендация для новичков: Сразу используйте флаг --permanent, чтобы не потерять правила после перезагрузки. После каждого изменения выполняйте sudo firewall-cmd --reload.
5.1 Разрешить сервис (например, HTTP)
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --zone=public --list-services
Что делает:
--zone=public— применяем правило к зоне public--add-service=http— разрешаем входящие подключения к веб-серверу (порт 80)--permanent— сохраняем правило после перезагрузки--reload— применяем изменения без перезапуска firewalld--list-services— показываем список разрешённых сервисов
✅ Ожидаемый вывод --list-services: dhcpv6-client http ssh
Другие распространённые сервисы: https (443), smtp (25), dns (53), ftp (21).
5.2 Разрешить порт (если нет готового сервиса)
Если приложение не входит в список сервисов firewalld, можно открыть порт напрямую.
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --zone=public --list-ports
Что делает: Открывает TCP-порт 8080.
✅ Ожидаемый вывод --list-ports: 8080/tcp
Формат: --add-port=НОМЕР/ПРОТОКОЛ. Протокол может быть tcp или udp.
5.3 Удалить сервис или порт
# Удалить сервис http
sudo firewall-cmd --zone=public --remove-service=http --permanent
# Удалить порт 8080
sudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent
# Применить изменения
sudo firewall-cmd --reload
# Проверить, что правила удалились
sudo firewall-cmd --zone=public --list-all
Что делает: Удаляет ранее добавленные правила.
5.4 Сохранить текущие runtime-правила как permanent
Если вы добавляли правила без --permanent и хотите сохранить их после перезагрузки:
sudo firewall-cmd --runtime-to-permanent
sudo firewall-cmd --reload
Что делает: Копирует текущую активную конфигурацию в постоянную.
6. 🧪 Тестирование правил без риска потерять доступ
При работе с удалённым сервером (по SSH) есть риск заблокировать себя. Вот безопасный подход:
- Добавьте правило без
--permanent(оно действует сразу, но пропадёт после перезагрузки) - Проверьте, что всё работает (например, открывается сайт)
- Если доступ потерян — просто перезагрузите сервер, и firewalld вернётся к прежним permanent-правилам
- Если всё хорошо — сохраните правило:
sudo firewall-cmd --runtime-to-permanent
Пример:
# Добавляем временное правило
sudo firewall-cmd --zone=public --add-service=http
# Проверяем, что сайт открывается
curl http://your-server-ip
# Если всё работает — сохраняем
sudo firewall-cmd --runtime-to-permanent
7. ⚠️ Решение типичных проблем
7.1 Ошибка «Authorization failed» при выполнении firewall-cmd
Симптом: При выполнении firewall-cmd (без sudo) появляется ошибка:
Authorization failed.
Make sure polkit agent is running or run the application as superuser.
Причина: Firewalld требует прав суперпользователя для изменения правил. В SSH-сессиях polkit-агент может быть недоступен.
Решение: Всегда используйте sudo с firewall-cmd:
sudo firewall-cmd --state
7.2 Ошибка «firewall-cmd: command not found»
Симптом: Команда firewall-cmd не найдена.
Причина: Firewalld не установлен.
Решение: Установите firewalld:
sudo apt install firewalld -y
7.3 Потерян доступ к серверу по SSH после добавления правил
Симптом: Вы добавили правило, перезагрузили firewalld и больше не можете подключиться к серверу по SSH.
Причина: В зоне public удалён сервис ssh или добавлен --remove-service=ssh.
Решение:
- Если вы физически рядом с сервером — подключитесь локально
- Если сервер удалённый и у вас есть консоль управления (например, VPS-панель) — используйте её
- В консоли выполните:
sudo firewall-cmd --zone=public --add-service=ssh --permanent
sudo firewall-cmd --reload
Чтобы предотвратить блокировку в будущем: Всегда проверяйте список сервисов перед перезагрузкой:
sudo firewall-cmd --zone=public --list-services
Убедитесь, что ssh есть в списке.
7.4 Правила исчезают после перезагрузки
Симптом: Вы добавили правила, перезагрузили сервер, и правила пропали.
Причина: Правила были добавлены без флага --permanent и не были сохранены через --runtime-to-permanent.
Решение: Добавляйте правила с --permanent и выполняйте --reload:
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --reload
7.5 Не удаётся открыть порт для приложения, хотя правило добавлено
Симптом: Вы добавили --add-port=8080/tcp, но приложение не доступно извне.
Возможные причины:
- Приложение слушает только localhost (127.0.0.1). Проверьте настройки приложения.
- Есть другой фаервол (например, ufw или iptables), который конфликтует с firewalld.
Решение:
- Проверьте, на каком IP слушает приложение:
sudo netstat -tulpn | grep 8080 - Убедитесь, что другие фаерволы отключены:
sudo ufw status,sudo iptables -L
8. 🔄 Отключение и удаление Firewalld
8.1 Отключение (без удаления)
Если вы хотите временно отключить фаервол, но оставить возможность включить его позже:
sudo systemctl disable --now firewalld
Что делает: Останавливает firewalld и отключает автозапуск.
Проверка:
systemctl is-enabled firewalld # должно быть disabled
systemctl is-active firewalld # должно быть inactive
Включить обратно:
sudo systemctl enable --now firewalld
8.2 Полное удаление
Если вы решили больше не использовать firewalld:
sudo apt purge firewalld -y
sudo apt autoremove -y
Что делает: Удаляет пакет firewalld и его конфигурационные файлы.
8.3 Удаление сохранённых конфигураций (опционально)
После удаления пакета файлы зон могут остаться в /etc/firewalld/. Если вы не планируете возвращаться к firewalld:
sudo rm -rf /etc/firewalld
⚠️ Внимание: Эта команда безвозвратно удаляет все ваши правила и настройки зон.
8.4 Проверка удаления
dpkg -l firewalld | grep '^ii' || echo "firewalld удалён"
✅ Ожидаемый вывод: firewalld удалён
9. 📝 Чек-лист: всё готово к работе
- [ ] Firewalld установлен:
sudo firewall-cmd --stateпоказываетrunning - [ ] Команда
sudo firewall-cmd --list-allпоказывает активную зону и разрешённые сервисы - [ ] В списке сервисов есть
ssh(иначе вы потеряете доступ при перезагрузке) - [ ] Можете добавить сервис:
sudo firewall-cmd --zone=public --add-service=http --permanent - [ ] Можете добавить порт:
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent - [ ] После перезагрузки сервера правила сохраняются (проверьте
--list-services)
Заключение
Вы успешно установили и настроили Firewalld на Debian. Теперь ваш сервер или рабочая станция защищены фаерволом с зональной моделью. В отличие от iptables, firewalld позволяет изменять правила без перезапуска сервиса и различает временные и постоянные настройки.
Что дальше:
- Изучите официальную документацию Firewalld
- Настройте автоматическую блокировку подозрительной активности с помощью Fail2Ban
- Если firewalld кажется слишком сложным, попробуйте более простой UFW