UFW на Ubuntu: настройка фаервола за пять команд
UFW — обёртка над nftables, которая закрывает всю входящую сеть и оставляет открытыми только те порты, которые вам реально нужны. Пять команд — и сервер не отвечает на сканеры. Разбираем настройку UFW в Ubuntu Server и Desktop 24.04 LTS: как включить, как разрешить порт, как лимитировать SSH и как проверить статус, не закрыв сами себе доступ.
UFW на Ubuntu: настройка фаервола за пять команд
UFW — обёртка над nftables, которая закрывает всю входящую сеть и оставляет открытыми только те порты, которые вам реально нужны. Пять команд — и сервер не отвечает на сканеры. Разбираем настройку UFW в Ubuntu Server и Desktop 24.04 LTS: как включить, как разрешить порт, как лимитировать SSH и как проверить статус, не закрыв сами себе доступ.
Что такое UFW и зачем он на свежем сервере
UFW (Uncomplicated Firewall) — это утилита для управления правилами фаервола. На Ubuntu 24.04 LTS под капотом у неё nftables (на 22.04 и старше — iptables), но в командной строке вы пишете не длинные nft add rule …, а короткие ufw allow 443/tcp.
Зачем UFW нужен сразу после установки сервера:
- Закрывает все случайно слушающие демоны (
postgres,redis, debug-порты), пока вы их не настроили. - Снижает шум от ботов в логах: на закрытом порту нет смысла сканировать.
- Делает аудит проще —
sudo ufw statusпоказывает, что разрешено, без чтения 200-строчногоnft list ruleset.
Если у вас Docker, MicroK8s или другие сервисы, которые сами правят nftables — учитывайте, что они могут обходить UFW. На голом Ubuntu Server без оркестраторов UFW работает прозрачно.
Установка UFW на Ubuntu
В Ubuntu Server и Desktop UFW идёт в стандартной поставке, но на минимальных образах (cloud-init, ARM, контейнеры) его иногда нет:
sudo apt update
sudo apt install ufw
После установки UFW не активен — это безопасно: вы не отрежете себе SSH-сессию случайно. Всё включается явно одной командой sudo ufw enable, и только после того, как вы пропишете правила.
Базовая настройка UFW: deny incoming + allow OpenSSH
Минимальная конфигурация, которой хватает для 90% серверов: запретить весь входящий трафик, разрешить весь исходящий, разрешить SSH:
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw enable
Что делает каждая строка:
default deny incoming— политика по умолчанию: всё, что не разрешено явно, отбрасывается.default allow outgoing— сервер свободно ходит наружу (apt, DNS, NTP, обновления).allow OpenSSH— это профиль приложения, а не порт. UFW сам подставит правильные порты из/etc/ufw/applications.d/openssh-server. Если SSH у вас на стандартном22/tcp, профиль и порт эквивалентны. Полный список профилей —sudo ufw app list.enable— активирует фаервол. Если вы сделаете это раньшеallow OpenSSH, текущая SSH-сессия выживет (правило для уже установленных соединений), но новые подключения отвалятся.
Проверка после enable:
sudo ufw status verbose
Должно вывести Status: active, дефолтные политики и одну строчку с OpenSSH.
Как разрешить порт в UFW
Когда поднимаете web-сервер, базу или собственный сервис — добавляете правила точечно. UFW понимает несколько форм:
# Один порт по протоколу
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# Имена сервисов из /etc/services
sudo ufw allow http
sudo ufw allow https
# Диапазон портов
sudo ufw allow 6000:6005/tcp
# Только с одной подсети (например, доступ к Postgres только из LAN)
sudo ufw allow from 192.168.1.0/24 to any port 5432 proto tcp
# Один конкретный IP к одному порту
sudo ufw allow from 203.0.113.10 to any port 9090 proto tcp
Правило с from … to any port … — самое полезное на проде: открывает порт не «в интернет», а только тому, кто реально ходит. Так Postgres / Redis / Elasticsearch остаются недоступны снаружи, даже если демон случайно слушает 0.0.0.0.
Чтобы разрешить порт временно, поэкспериментировать и убрать — см. раздел про удаление правил ниже.
Разрешить SSH и защитить его от ботов
Базовый allow SSH мы уже сделали через профиль OpenSSH. Если вы перенесли SSH на нестандартный порт (Port 2222 в /etc/ssh/sshd_config), нужно открыть именно его:
sudo ufw allow 2222/tcp comment 'ssh on alt port'
После того как новый порт работает, старый можно убрать: sudo ufw delete allow OpenSSH.
Полезная команда — ufw limit. Она разрешает подключения, но включает rate-limit: если с одного IP больше 6 попыток за 30 секунд — последующие отбрасываются. Это режет brute-force без установки fail2ban:
sudo ufw limit ssh
# или для альтернативного порта:
sudo ufw limit 2222/tcp
limit имеет смысл именно для SSH — там много коротких подключений. Для HTTP/HTTPS он будет резать живых пользователей.
Как посмотреть статус UFW и активные правила
ufw статус — первое, что нужно проверять после любой правки:
sudo ufw status # короткий список правил
sudo ufw status verbose # + дефолтные политики и логирование
sudo ufw status numbered # с номерами — нужны для удаления
Полезно знать ещё несколько команд:
sudo ufw show added # все правила, включая отключённые
sudo ufw show listening # сопоставление слушающих портов и правил
show listening — недооценённая штука: она показывает, какие демоны (sshd, nginx, postgres) слушают и какие из портов реально открыты в UFW. Сразу видно конфликты вроде «Postgres слушает на 5432, но UFW его не пропускает».
Удаление и сброс правил
Удалить правило проще всего по номеру из numbered-вывода:
sudo ufw status numbered
# → [ 3] 8080/tcp ALLOW IN Anywhere
sudo ufw delete 3
Или повторить ту же команду, что использовалась для добавления, с префиксом delete:
sudo ufw delete allow 8080/tcp
Если правил много и вы запутались, можно начать с чистого листа:
sudo ufw reset # стирает все правила и отключает фаервол
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw enable
reset создаёт бэкап старых правил в /etc/ufw/*.20260504_140000 — если вспомнили, что забыли важное, можно подсмотреть.
Логи и отладка
Включаем логи отброшенных пакетов:
sudo ufw logging medium
Уровни: off, low (только заблокированное), medium (+rate-limit), high, full (всё, включая прошедший трафик — съест диск). Для прода обычно low или medium.
Логи пишутся в /var/log/ufw.log и в journalctl -u ufw. Когда что-то «не пускает» — смотрим там, в строках есть [UFW BLOCK], IP-адрес, порт, протокол.
Частые вопросы
Нужно ли перезагружать сервер после ufw enable?
Нет. UFW применяет правила сразу. Перезагрузка нужна только если вы меняли модули ядра, но в обычной настройке этого нет.
Что будет с моей SSH-сессией, если я включу UFW без allow OpenSSH?
Текущая сессия не оборвётся (есть правило RELATED,ESTABLISHED), но новые подключения отвалятся, и вы потеряете доступ при разрыве. Поэтому всегда allow OpenSSH ставится до enable. Если работаете удалённо — лучше иметь второй канал (консоль провайдера, IPMI), чтобы откатиться при ошибке.
UFW против nftables — что выбрать?
На Ubuntu 24.04 это не «или–или»: UFW транслируется в nftables под капотом. Если правила укладываются в синтаксис UFW — берите UFW, читать и поддерживать проще. Если нужны NAT, ipset, сложные цепочки — пишите nftables напрямую и UFW не активируйте.
Как разрешить порт только для одного хоста?
sudo ufw allow from 203.0.113.10 to any port 5432 proto tcp. Это удобнее, чем allow по порту + блок по IP — UFW обрабатывает правила в порядке добавления.
Как полностью отключить UFW?
sudo ufw disable. Правила сохраняются, можно включить обратно через enable. Чтобы стереть всё — ufw reset.
Что запомнить
- Перед
sudo ufw enableвсегдаsudo ufw allow OpenSSH— иначе разорвёте удалённый доступ. - Дефолт:
deny incoming+allow outgoing. Открываем только то, что реально слушает наружу. - Для SSH полезен
ufw limit— он отрезает ботов без отдельного fail2ban. sudo ufw status verboseпосле каждой правки — проверка, что вы открыли то, что хотели.- Внутренние сервисы (БД, кеши) пускаем через
from <подсеть> to any port <N>, а не голым allow по порту.