Установка и настройка Firewalld на Debian 13, 12, 11: подробное руководство

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 -l

Что делает: Проверяет, есть ли у текущего пользователя права суперпользователя.

⚠️ Пароль при первом запуске! В зависимости от настроек в /etc/sudoers, при первом выполнении sudo -l в текущей сессии система может запросить ваш пароль (если не активировано правило NOPASSWD).

✅ Ожидаемый результат: Список разрешённых команд. Если видите (ALL : ALL) ALL — у вас полный доступ.

❌ Если видите ошибку user is not in the sudoers file или may not run sudo — сначала пройдите наше руководство по настройке sudo. Без этого дальнейшие шаги не сработают.

Обновление системы

Перед установкой всегда обновляйте список пакетов:

sudo apt update

Что делает: Обновляет список доступных пакетов из репозиториев.

Зачем: Убедиться, что устанавливается последняя версия firewalld для вашего выпуска Debian.

💡 Примечание: Флаг -y автоматически подтверждает все действия. В обучающих инструкциях его лучше не использовать: так вы видите список пакетов и можете отменить установку, если что-то выглядит подозрительно. Если вы уверены в своих действиях, можно добавить -y.

2. 📦 Установка Firewalld

2.1 Проверка других фаерволов

⚠️ Важно: Не запускайте firewalld одновременно с ufw или сырыми правилами iptables — это приведёт к конфликтам.

Проверьте статус ufw:

sudo ufw status

Если статус active, отключите:

sudo ufw disable

Проверьте правила iptables:

sudo iptables -L -n

Убедитесь, что вы понимаете все активные правила. Если они не нужны, их можно очистить (но только если вы уверены в своих действиях).

2.2 Установка Firewalld

Firewalld находится в стандартных репозиториях Debian, поэтому установка происходит одной командой.

sudo apt install firewalld

Что делает: Устанавливает пакет firewalld и автоматически запускает сервис.

Что произойдёт во время установки: Будут созданы символические ссылки в systemd, и firewalld запустится сразу после установки.

Версия DebianКодовое имяВерсия Firewalld
Debian 13Trixie2.3.x
Debian 12Bookworm1.3.x
Debian 11Bullseye0.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

💡 Примечание: Версия зависит от вашего выпуска Debian. Это нормально, если она отличается от примера.

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

Что делает: Копирует текущую активную конфигурацию в постоянную.

5.5 Пример rich rules (для продвинутых)

Rich rules позволяют создавать более сложные правила, например, разрешить SSH только с конкретного IP-адреса:

sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.5" service name="ssh" accept' --permanent
sudo firewall-cmd --reload

Что делает: Разрешает SSH-подключения только с IP-адреса 192.168.1.5. Все остальные подключения к SSH будут отклонены.

6. 🧪 Безопасное тестирование правил (чтобы не потерять SSH-доступ)

При работе на удалённом сервере любая ошибка в фаерволе может заблокировать SSH. Используйте эту стратегию:

  1. Посмотрите текущие постоянные правила:
sudo firewall-cmd --list-all

Убедитесь, что ssh есть в списке сервисов.

  1. Добавьте правило только в runtime (без —permanent):
sudo firewall-cmd --zone=public --add-service=http
  1. Проверьте, что правило применилось:
sudo firewall-cmd --zone=public --list-services

В списке должен появиться http.

  1. Протестируйте доступность извне (например, через curl или браузер).
  2. Если всё работает — сохраните правило:
sudo firewall-cmd --runtime-to-permanent
sudo firewall-cmd --reload
  1. Если что-то пошло не так — просто не сохраняйте. Runtime-правила исчезнут после перезагрузки сервера. Но не используйте перезагрузку как «кнопку отмены» при работе с 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

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

7.6 Ошибка: активная зона не соответствует ожидаемой

Симптом: Вы добавили правило в зону public, но оно не работает.

Причина: Активная зона может быть другой.

Решение: Проверьте активные зоны:

sudo firewall-cmd --get-active-zones

И добавляйте правила в ту зону, которая привязана к вашему интерфейсу.

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
sudo apt autoremove

Что делает: Удаляет пакет firewalld и его конфигурационные файлы.

8.3 Удаление сохранённых конфигураций (опционально)

После удаления пакета файлы зон могут остаться в /etc/firewalld/. Если вы не планируете возвращаться к firewalld:

sudo rm -rf /etc/firewalld

⚠️ Внимание: Эта команда безвозвратно удаляет все ваши правила и настройки зон.

8.4 Проверка удаления

dpkg -l firewalld

Ожидаемый вывод:

dpkg-query: no packages found matching firewalld

9. 📝 Чек-лист: всё готово к работе

  • [ ] Firewalld установлен и запущен: sudo firewall-cmd --state показывает running
  • [ ] Активная зона проверена: sudo firewall-cmd --get-active-zones показывает ожидаемый интерфейс
  • [ ] В списке сервисов зоны есть ssh: sudo firewall-cmd --list-all содержит services: dhcpv6-client ssh
  • [ ] Добавлен нужный сервис (например, http) и он виден в --list-services
  • [ ] Правило сохранено как permanent: после перезагрузки сервера сервис остаётся в списке
  • [ ] Другие фаерволы (ufw, iptables) отключены или проверены, конфликтов нет

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

Вопрос: В чём разница между firewalld и ufw?
Ответ: UFW — упрощённый фаервол, хорош для базовых задач. Firewalld — более мощный, с зонами, динамическим изменением правил и поддержкой сервисов. Firewalld лучше подходит для серверов.

Вопрос: Как проверить, какие порты открыты в firewalld?
Ответ: sudo firewall-cmd --list-ports и sudo firewall-cmd --list-services.

Вопрос: Почему мои правила исчезают после перезагрузки?
Ответ: Вы добавляли правила без флага --permanent. Добавляйте с этим флагом и выполняйте --reload.

Вопрос: Как разрешить SSH только с определённого IP?
Ответ: Используйте rich rule: sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.5" service name="ssh" accept' --permanent.

Вопрос: Могу ли я использовать firewalld вместе с ufw?
Ответ: Нет, это приведёт к конфликтам. Используйте что-то одно.

Заключение

Вы успешно установили и настроили Firewalld на Debian. Теперь ваш сервер или рабочая станция защищены фаерволом с зональной моделью. В отличие от iptables, firewalld позволяет изменять правила без перезапуска сервиса и различает временные и постоянные настройки.

Что дальше: