Linux

Настройка UFW: Полное руководство по firewall на Ubuntu/Debian

Это руководство поможет вам быстро настроить простой и эффективный файрвол UFW (Uncomplicated Firewall) на Linux-сервере. Вы научитесь открывать/закрывать порты, настраивать правила по умолчанию и проверять трафик.

Обновлено 17 февраля 2026 г.
10-15 мин
Низкая
FixPedia Team
Применимо к:Ubuntu 20.04+Debian 10+Linux Mint 20+

Введение / Зачем это нужно

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

После выполнения вы получите работающий файрвол с правилами по умолчанию и открытыми необходимыми портами.

Требования / Подготовка

Перед началом убедитесь, что:

  1. У вас есть доступ к терминалу Linux (Ubuntu, Debian, Mint или производных).
  2. Вы обладаете правами sudo (администратора).
  3. Критически важно: Подключение к серверу через SSH уже установлено, и вы не планируете его прерывать до настройки правил для SSH. В противном случае вы можете потерять доступ к серверу.
  4. Вы знаете, какие порты и протоколы должны быть открыты для ваших сервисов (например, 22/tcp для SSH, 80/tcp для HTTP, 443/tcp для HTTPS).

Шаг 1: Установка и предварительное разрешение SSH

UFW обычно предустановлен в Ubuntu/Debian. Если его нет, установите:

sudo apt update
sudo apt install ufw -y

Важно: Прежде чем включать файрвол, сразу разрешите порт SSH (по умолчанию 22). Это гарантирует, что активное SSH-соединение не будет разорвано при активации.

# Разрешить входящие соединения на порт 22 (SSH) для любого IP
sudo ufw allow ssh

# Или явно указать порт и протокол (если SSH слушает нестандартный порт)
# sudo ufw allow 2222/tcp

Шаг 2: Настройка политик по умолчанию

Установите "закрытую" политику для входящего трафика и "открытую" для исходящего. Это основа безопасности: всё, что не разрешено явно — запрещено.

# Запретить все входящие соединения по умолчанию
sudo ufw default deny incoming

# Разрешить все исходящие соединения по умолчанию (сервер может сам выходить в сеть)
sudo ufw default allow outgoing

💡 Совет: Политику deny outgoing использовать не рекомендуется для большинства серверов, так как это сломает работу пакетных менеджеров (apt update), DNS-запросы и обновления.

Шаг 3: Добавление правил для ваших сервисов

Добавьте правила для каждого порта/сервиса, который должен быть доступен извне. Ниже примеры для типичного веб-сервера.

# HTTP (порт 80)
sudo ufw allow http

# HTTPS (порт 443)
sudo ufw allow https

# Если нужен доступ к базе данных (например, MySQL) ТОЛЬКО с определённого IP:
# sudo ufw allow from 10.0.0.5 to any port 3306

# Разрешить пинг (ICMP) — опционально, для диагностики
sudo ufw allow icmp

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

sudo ufw status numbered

Вывод будет примерно таким:

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

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443/tcp                    ALLOW       Anywhere

Шаг 4: Активация файрвола

После проверки всех правил активируйте UFW:

sudo ufw enable

Система запросит подтверждение. Подтвердите, и файрвол начнёт работать сразу.

⚠️ Важно: Если вы забыли добавить правило для SSH (allow ssh) перед ufw enable, ваше текущее SSH-соединение может быть разорвано. В таком случае потребуется доступ через консоль управления (например, в панели VPS).

Шаг 5: Управление и проверка

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

sudo ufw status verbose

Покажет детальную информацию, включая политики по умолчанию и исходящие правила.

Просмотр логов (если включено)

Включите логирование для отладки (установите уровень low или medium):

sudo ufw logging low

Логи будут в /var/log/ufw.log (или через journalctl -u ufw).

Удаление/изменение правила

  1. Узнайте номер правила через sudo ufw status numbered.
  2. Удалите правило по номеру:
    sudo ufw delete 3
    
  3. Чтобы изменить правило, удалите старое и добавьте новое.

Отключение файрвола (на крайний случай)

sudo ufw disable

Не делайте этого на production-сервере без крайней необходимости!

Проверка результата

  1. Локальная проверка: С самого сервера убедитесь, что файрвол активен:
    sudo ufw status
    

    Должно быть Status: active.
  2. Внешняя проверка: Попробуйте подключиться к открытым портам (SSH, HTTP, HTTPS) с другого компьютера. Подключение должно успешно устанавливаться.
  3. Проверка закрытых портов: Попробуйте подключиться к порту, который вы не разрешали (например, 3306, если MySQL не открывался). Соединение должно быть отклонено (timeout или "connection refused").
  4. Просмотр правил в iptables (для уверенности):
    sudo iptables -L -n -v
    

    Вы увидите цепочки, созданные UFW (ufw-user-input и т.д.).

Возможные проблемы

❌ "Connection timed out" после включения UFW

Причина: Правило для SSH не было добавлено до ufw enable, или вы подключились с IP, который не разрешён (если правило allow ssh ограничено по IP). Решение:

  1. Получите доступ к серверу через консоль управления (VPS) или KVM.
  2. Добавьте правило для вашего текущего IP: sudo ufw allow from <ваш_IP> to any port 22.
  3. Переподключитесь.

❌ Правило не применяется, порт всё равно закрыт

Причина: Возможно, конфликт с другим правилом (более позднее правило deny перекрывает allow). Или сервис слушает не на 0.0.0.0, а только на 127.0.0.1. Решение:

  1. Проверьте порядок правил: sudo ufw status numbered. Правила проверяются сверху вниз.
  2. Убедитесь, что сервис (например, nginx) слушает на всех интерфейсах: sudo ss -tulpn | grep :80.
  3. Если нужно, удалите конфликтующее правило и добавьте заново.

❌ Не работает пакетный менеджер (apt update завершается с ошибкой)

Причина: По умолчанию ufw default allow outgoing разрешает все исходящие соединения. Если вы меняли политику на deny outgoing, DNS-запросы и HTTP-доступ к репозиториям будут блокироваться. Решение: Верните политику allow outgoing или создайте явные правила для DNS (порт 53) и HTTP/HTTPS к репозиториям.

❌ Логи UFW не пишутся

Причина: Логирование отключено или уровень слишком высок (только ошибки). Решение: sudo ufw logging low (логируются все блокировки). Проверьте файл /var/log/ufw.log или sudo tail -f /var/log/ufw.log.

Расширенные сценарии (кратко)

Блокировка конкретного IP

sudo ufw deny from 192.0.2.100

Запретит все входящие соединения с этого адреса.

Ограничение по количеству подключений (защита от брутфорса)

# Ограничить SSH: не более 6 подключений в 30 секунд с одного IP
sudo ufw limit ssh

UFW автоматически создаст правила с модулем conntrack.

Разрешить диапазон портов

# Разрешить порты 6000-6010 (например, для X11 forwarding)
sudo ufw allow 6000:6010/tcp

Удаление по номеру (если правило сложное)

# Правило: deny 80/tcp с IP 1.2.3.4
sudo ufw status numbered
# Вывод: 3  DENY IN  80/tcp  FROM 1.2.3.4
sudo ufw delete 3

Заключение

Вы успешно настроили базовый файрвол UFW на своём Linux-сервере. Ключевые моменты:

  1. Всегда добавляйте правило для SSH перед активацией файрвола.
  2. Используйте политику deny incoming по умолчанию.
  3. Разрешайте только те порты, которые действительно нужны для работы сервисов.
  4. Для тонкой настройки (например, разных правил для разных интерфейсов) может потребоваться переход на прямой iptables или nftables.

UFW отлично подходит для 80% случаев защиты сервера. Для более сложных сценариев (прозрачные прокси, сложная маршрутизация) изучайте iptables или nftables.

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

UFW и iptables — это одно и то же?
Как удалить правило по номеру в UFW?
UFW работает без включения по умолчанию?
Как разрешить доступ только с определённого IP?

Полезное

Установка и активация UFW
Настройка политик по умолчанию
Добавление необходимых правил
Проверка и активация

Эта статья помогла вам решить проблему?