К основному содержимому

UFW Firewall на VPS: настройка брандмауэра Ubuntu

Безопасность · 19.04.2026 · 6 мин чтения
Иллюстрация к статье «UFW Firewall на VPS: настройка брандмауэра Ubuntu»

UFW (Uncomplicated Firewall) — надстройка над iptables/nftables для Ubuntu и Debian, которая убирает из настройки файрвола длинные цепочки правил и оставляет короткие команды вида ufw allow 22. На VDS это первый слой защиты: без него любой порт, на котором слушает сервис, доступен из интернета.

Настройка UFW на Ubuntu

Базовая политика: закрыть всё входящее, разрешить всё исходящее, затем точечно открыть нужные порты.

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

# Разрешить SSH — обязательно ДО enable, иначе потеряете доступ
ufw allow 22/tcp

# Разрешить HTTP и HTTPS
ufw allow 80/tcp
ufw allow 443/tcp

# Включить файрвол
ufw enable

# Проверить статус
ufw status verbose

Как читать вывод ufw status verbose

После включения команда показывает политику по умолчанию и список правил с направлением и источником:

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

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW IN    Anywhere
80/tcp                     ALLOW IN    Anywhere
443/tcp                    ALLOW IN    Anywhere
22/tcp (v6)                ALLOW IN    Anywhere (v6)

Строки с пометкой (v6) — те же правила для IPv6. Если сервер работает только по IPv4, а IPv6 на нём отключён, эти строки можно игнорировать: они ничего не открывают, если IPv6-стек не слушает.

Открытие дополнительных портов

Каждый сервис за фактическим портом нужно открывать отдельно — UFW не знает про приложения, только про порты и протоколы.

# MySQL — только с локального хоста, наружу не открывать
ufw allow from 127.0.0.1 to any port 3306

# Кастомный порт приложения (например, Node.js на 8080)
ufw allow 8080/tcp

# Диапазон портов, например для пассивного FTP
ufw allow 30000:31000/tcp

# Удалить ранее добавленное правило
ufw delete allow 8080/tcp

Ограничение доступа по IP и подсети

Если админка или база данных должны быть доступны только с рабочего IP, правило по адресу надёжнее, чем полагаться на пароль:

# Разрешить SSH только с одного адреса
ufw allow from 203.0.113.10 to any port 22 proto tcp

# Разрешить подсеть офиса на порт панели управления
ufw allow from 203.0.113.0/24 to any port 8443 proto tcp

# Явный запрет конкретного адреса (например, после атаки в логах)
ufw deny from 198.51.100.5

Здесь proto tcp ограничивает правило одним протоколом, to any port — портом назначения, а адрес перед to — источником пакета. Правила проверяются по порядку добавления, первое совпадение побеждает, поэтому более узкое правило по IP стоит добавлять раньше общего allow 22.

Сравнение способов ограничить сетевой доступ

СпособЧто фильтруетСложность настройкиКогда применять
UFWПорты, протоколы, IP-адресаНизкая, командная обёрткаОдин VDS, типовые сервисы
iptables напрямуюПолный набор правил ядра, NAT, mangleВысокая, синтаксис цепочекНестандартная маршрутизация, legacy-скрипты
nftablesТо же, что iptables, но один синтаксис для v4/v6СредняяСвежие дистрибутивы, где iptables — это уже обёртка над nft
Security Group у провайдераПорты и IP до того, как пакет дошёл до VDSНизкая, через панельДополнительный слой поверх UFW, не замена

На большинстве Ubuntu 22.04+ и Debian 11+ UFW уже работает поверх nftables, а не iptables-legacy — это не меняет команды, но объясняет, почему вывод iptables -L на таких системах может выглядеть иначе, чем ожидается. Подробнее в статье про переход с iptables на nftables.

Разбор типичных ошибок UFW

Ошибка ERROR: Could not delete non-existent rule — появляется, когда команда ufw delete не совпадает по формату с тем, как правило было добавлено. Если порт открывали как ufw allow 8080, а удаляют как ufw delete allow 8080/tcp, UFW не находит точного совпадения. Смотрите точную запись правила в ufw status numbered и удаляйте по номеру: ufw delete 3.

Потеря SSH-доступа сразу после ufw enable — самая частая авария. Если политика default deny incoming включена раньше, чем добавлено правило на порт SSH, соединение просто перестаёт отвечать: клиент получит ssh: connect to host ... port 22: Connection timed out. Восстановить доступ можно только через консоль VDS в панели управления, где ufw уже не мешает, — оттуда выполняется ufw allow 22/tcp.

Ошибка ERROR: problem running ufw-init при включении на части минимальных VDS-образов связана с отсутствующим модулем ip6tables в ядре контейнерной виртуализации. Решение — отключить обработку IPv6 в самом UFW, не трогая ядро: в файле /etc/default/ufw установить IPV6=no и выполнить ufw disable && ufw enable.

Когда UFW не подходит

  • Docker и подобные системы контейнеризации прописывают собственные цепочки iptables напрямую и могут пробрасывать порты контейнеров в обход правил UFW — опубликованный -p 8080:8080 порт иногда остаётся доступным даже при ufw deny 8080.
  • UFW не различает трафик по содержимому запроса (уровень L7): фильтрация по URL, User-Agent или SQL-инъекциям в него не входит — для этого нужен модуль уровня приложения или WAF.
  • При множестве сложных правил с NAT, проброс портов между интерфейсами или policy routing проще писать сразу на nftables, чем городить это через синтаксис UFW.
  • Для защиты веб-приложения от перебора и ботов UFW не заменяет отдельный сервис — этим занимается Fail2Ban, который блокирует IP по анализу логов, а не по статическому правилу.

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

После настройки убедитесь, что открыто ровно то, что нужно, и ничего лишнего:

  1. Проверьте список правил с номерами: ufw status numbered — каждое правило должно быть объяснимо, лишние удаляются командой ufw delete НОМЕР.
  2. Сверьте фактически слушающие порты: ss -tulpn — порт может слушаться, но быть закрыт UFW, и наоборот, открыт в UFW, но сервис на нём не запущен.
  3. Проверьте доступ снаружи, не разрывая текущую SSH-сессию: откройте вторую сессию или используйте nc -zv your-server-ip 443 с другой машины.
  4. Просмотрите журнал блокировок: tail -f /var/log/ufw.log покажет пакеты, которые UFW реально отбросил, — полезно, если что-то «не работает», а причина в файрволе.

Если после проверки нужна более тонкая настройка самого SSH-доступа — например, смена порта и отключение входа по паролю, — это описано в статье про усиление защиты sshd_config.

Статья помогла?
← Назад в базу знаний Задать вопрос поддержке