Установка и настройка 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 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 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

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) есть риск заблокировать себя. Вот безопасный подход:

  1. Добавьте правило без --permanent (оно действует сразу, но пропадёт после перезагрузки)
  2. Проверьте, что всё работает (например, открывается сайт)
  3. Если доступ потерян — просто перезагрузите сервер, и firewalld вернётся к прежним permanent-правилам
  4. Если всё хорошо — сохраните правило: 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 позволяет изменять правила без перезапуска сервиса и различает временные и постоянные настройки.

Что дальше:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *