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 ufw→Installed: (none)или версия - [ ] SSH разрешён:
sudo ufw status | grep 22→ALLOW - [ ] UFW активен:
sudo ufw status verbose→Status: active - [ ] Политики по умолчанию:
deny (incoming),allow (outgoing) - [ ] Необходимые порты открыты:
sudo ufw status numbered→ нужные порты в списке ALLOW - [ ] Логирование включено:
sudo ufw status verbose→Logging: 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