Установка UFW на Debian 13, 12, 11: полное руководство

UFW (Uncomplicated Firewall) — это простой и удобный интерфейс для управления правилами файрвола в Linux. Он скрывает сложность низкоуровневых утилит (iptables/nftables) и позволяет быстро настроить защиту сервера или рабочей станции: разрешить SSH, открыть порты для веб-сервера, ограничить доступ по IP и многое другое.

В Debian UFW не установлен по умолчанию, но доступен в официальных репозиториях. В этом руководстве я покажу, как установить UFW на Debian 13 (Trixie), Debian 12 (Bookworm) и Debian 11 (Bullseye), настроить базовые правила и эффективно управлять файрволом.

⚠️ Важное предупреждение: Если вы настраиваете удалённый сервер по SSH, сначала разрешите SSH-подключения, и только потом включайте UFW. Иначе вы заблокируете себе доступ и не сможете подключиться к серверу.


Оглавление

Предварительные требования

Перед установкой убедитесь, что:

  • У вас есть доступ к интернету
  • Вы имеете права sudo (администратора)

⚠️ ВАЖНО: Проверьте права sudo перед установкой

Если вы не уверены, есть ли у вашего пользователя права администратора, выполните в терминале:

sudo whoami

Что делает: sudo — выполняет команду от имени суперпользователя; whoami — показывает имя текущего пользователя.

Ожидаемый вывод в терминале:

root

❌ Если выводит is not in the sudoers file — сначала пройдите наше руководство по настройке sudo.


Установка UFW

Шаг 1: Обновите систему

sudo apt update && sudo apt upgrade -y

Шаг 2: Установите пакет UFW

sudo apt install -y ufw

Что делает: Устанавливает UFW и необходимые зависимости (iptables, libip4tc2, libip6tc2).

Шаг 3: Проверьте установку

apt-cache policy ufw

Ожидаемый вывод: Installed: (none) (пока не активен) и Candidate с версией.


Базовая настройка (перед включением)

Разрешите SSH-подключения

Если вы подключаетесь к серверу по SSH (а это почти всегда так), сначала разрешите SSH:

sudo ufw allow ssh

Что делает: Добавляет правило, разрешающее входящие подключения на порт 22 (стандартный порт SSH).

Если вы используете нестандартный порт SSH (например, 2222):

sudo ufw allow 2222/tcp

Включите UFW

sudo ufw enable

Что делает: Активирует файрвол. При первом включении спросит подтверждение (введите y).

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

sudo ufw status verbose

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

Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

Что означают политики по умолчанию:

  • deny (incoming) — все входящие подключения заблокированы, кроме явно разрешённых
  • allow (outgoing) — все исходящие подключения разрешены

Основные правила UFW

Разрешение портов по номеру

HTTP (порт 80):

sudo ufw allow 80/tcp

HTTPS (порт 443):

sudo ufw allow 443/tcp

Оба порта вместе:

sudo ufw allow 80,443/tcp

Разрешение по имени сервиса

sudo ufw allow http
sudo ufw allow https

Разрешение по профилю приложения

Список доступных профилей:

sudo ufw app list

Разрешить по профилю:

sudo ufw allow 'Nginx Full'

Разрешение доступа с конкретного IP

Полный доступ с IP 192.168.1.10:

sudo ufw allow from 192.168.1.10

Доступ только к определённому порту с IP:

sudo ufw allow from 192.168.1.10 to any port 22

Разрешение целой подсети

sudo ufw allow from 192.168.1.0/24 to any port 3306 proto tcp

Что делает: Разрешает доступ к MySQL (порт 3306) только для компьютеров в локальной сети 192.168.1.0/24.

Блокировка IP-адреса

sudo ufw deny from 203.13.56.121

Блокировка целой подсети:

sudo ufw deny from 203.13.56.0/24

Управление правилами

Просмотр правил с номерами

sudo ufw status numbered

Пример вывода:

Status: active

     To                         Action      From
[ 1] 22/tcp                     ALLOW IN    Anywhere
[ 2] 80/tcp                     ALLOW IN    Anywhere
[ 3] 443/tcp                    ALLOW IN    Anywhere

Удаление правила по номеру

sudo ufw delete 2

Что делает: Удаляет правило номер 2 (в примере — HTTP).

Сброс всех правил (осторожно!)

sudo ufw reset

Что делает: Удаляет все правила, включая SSH! После сброса UFW становится неактивным.


Продвинутые настройки

Изменение политик по умолчанию

Запретить все входящие (уже по умолчанию):

sudo ufw default deny incoming

Запретить все исходящие (для изолированных сред):

sudo ufw default deny outgoing

⚠️ Внимание: Если вы запретите исходящие подключения, система не сможет обновляться, ходить в DNS и т.д. Потребуется вручную разрешать каждый нужный сервис.

Включение IPv6 в UFW

По умолчанию IPv6 поддерживается, но лучше проверить:

sudo nano /etc/default/ufw

Найдите строку IPV6=yes (должно быть yes). Если нет — исправьте и перезапустите UFW:

sudo systemctl restart ufw

Настройка уровня логирования

Уровни: off, low (по умолчанию), medium, high

sudo ufw logging medium

Просмотр логов:

sudo tail -f /var/log/ufw.log

Тестирование правил без применения (dry-run)

sudo ufw --dry-run allow 8080/tcp

Что делает: Показывает, какие правила iptables/nftables будут добавлены, но не применяет их.


Отключение и удаление UFW

Временно отключить UFW

sudo ufw disable

Полное удаление UFW

sudo ufw disable
sudo ufw reset
sudo apt remove ufw
sudo apt autoremove

Решение типичных проблем

8.1 Ошибка: потерян доступ к серверу после включения UFW

Симптом: Вы включили UFW на удалённом сервере и потеряли SSH-соединение.

Причина: Вы забыли разрешить SSH до включения UFW.

Пошаговое решение:

Шаг 1: Подключитесь к серверу через консоль (VNC, IPMI, физический доступ) или через recovery-режим хостинга.

Шаг 2: Отключите UFW:

sudo ufw disable

Шаг 3: Разрешите SSH:

sudo ufw allow ssh

Шаг 4: Снова включите UFW:

sudo ufw enable

8.2 Ошибка: UFW не работает с Docker

Симптом: Docker-контейнеры публикуют порты, и они доступны извне, даже если UFW блокирует эти порты.

Причина: Docker добавляет правила в iptables раньше правил UFW, обходя их.

Пошаговое решение (безопасное):

Шаг 1: Отредактируйте файл /etc/ufw/after.rules:

sudo nano /etc/ufw/after.rules

Шаг 2: Добавьте следующие строки перед последней строкой COMMIT в секции *filter:

# Блокируем внешний доступ к контейнерам Docker
:DOCKER-USER - [0:0]
-A DOCKER-USER -j RETURN -s 10.0.0.0/8
-A DOCKER-USER -j RETURN -s 172.16.0.0/12
-A DOCKER-USER -j RETURN -s 192.168.0.0/16
-A DOCKER-USER -p tcp -m tcp --dport 0:65535 -j DROP

Шаг 3: Перезагрузите UFW:

sudo ufw reload

Что делает: Эти правила блокируют весь внешний трафик к портам Docker, но разрешают внутренние сети Docker.


8.3 Ошибка: Правила не применяются

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

Причина: Не сделан reload, или правило находится ниже блокирующего.

Пошаговое решение:

Шаг 1: Перезагрузите UFW:

sudo ufw reload

Шаг 2: Проверьте порядок правил:

sudo ufw status numbered

Что ищем: Блокирующее правило (DENY) выше разрешающего (ALLOW). UFW обрабатывает правила сверху вниз.

Шаг 3: Удалите блокирующее правило или вставьте разрешающее выше.


8.4 Ошибка: ufw: command not found

Симптом: Команда ufw не найдена.

Причина: UFW не установлен, или команда находится в /usr/sbin/, а этой директории нет в PATH.

Пошаговое решение:

Шаг 1: Установите UFW:

sudo apt install ufw

Шаг 2: Если установлено, но не работает, используйте полный путь:

sudo /usr/sbin/ufw status

Шаг 3: Добавьте /usr/sbin в PATH (опционально):

echo 'export PATH="$PATH:/usr/sbin"' >> ~/.bashrc
source ~/.bashrc

8.5 Ошибка: UFW не запускается после перезагрузки

Симптом: После перезагрузки sudo ufw status показывает inactive.

Причина: UFW не добавлен в автозагрузку.

Пошаговое решение:

Шаг 1: Включите UFW в автозагрузку:

sudo systemctl enable ufw

Шаг 2: Проверьте статус:

sudo systemctl status ufw

Шаг 3: Если сервис не запускается — переустановите UFW:

sudo apt install --reinstall ufw

Чек-лист: что проверить после настройки

  • [ ] UFW установлен: apt-cache policy ufwInstalled: (none) или версия
  • [ ] SSH разрешён: sudo ufw status | grep 22ALLOW
  • [ ] UFW активен: sudo ufw status verboseStatus: active
  • [ ] Политики по умолчанию: deny (incoming), allow (outgoing)
  • [ ] Необходимые порты открыты: sudo ufw status numbered → нужные порты в списке ALLOW
  • [ ] Логирование включено: sudo ufw status verboseLogging: on (low)

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

Вопрос: UFW уже установлен в Debian по умолчанию?
Ответ: Нет. UFW нужно устанавливать вручную.

Вопрос: Какой порт SSH нужно открыть?
Ответ: По умолчанию — 22. Если вы меняли порт в /etc/ssh/sshd_config, открывайте тот, который указали.

Вопрос: Что делать, если я забыл разрешить SSH и включил UFW?
Ответ: Подключайтесь через консоль (VNC, IPMI) или recovery-режим, отключайте UFW (sudo ufw disable), затем разрешайте SSH и включайте снова.

Вопрос: Как проверить, какие порты открыты?
Ответ: Установите nmap и просканируйте свой сервер с другой машины: nmap ваш_IP. Или используйте sudo ufw status numbered.

Вопрос: Нужно ли отключать UFW перед обновлением системы?
Ответ: Нет, обновления работают через исходящие соединения, которые разрешены по умолчанию.


Заключение

Теперь UFW установлен и настроен на вашем Debian. Ваш сервер защищён: все входящие подключения блокируются, кроме явно разрешённых (SSH, HTTP, HTTPS и т.д.).

Что дальше?

  • Настройте автоматическую блокировку подбора паролей с Fail2ban
  • Установите и настройте Nginx
  • Откройте порты для веб-сервера и настройте HTTPS с Let’s Encrypt