ServerAID
Найти гайд, команду, тег… ⌘ K
Безопасность

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 по порту.

Похожие материалы

SSH-ключи на Ubuntu: вход без пароля, отключение паролей и смена порта
Безопасность

SSH-ключи на Ubuntu: вход без пароля, отключение паролей и смена порта

Заходить на сервер по SSH без пароля и при этом безопаснее, чем с паролем — главная польза от ключей. Разбираем `ssh-keygen ed25519`, `ssh-copy-id`, отключение парольного входа в `sshd_config`, смену SSH-порта, настройку `~/.ssh/config` на клиенте и генерацию ключей из Windows. Всё на Ubuntu 24.04 LTS.

Редакция
fail2ban на Ubuntu: защита SSH от перебора пароля
Безопасность

fail2ban на Ubuntu: защита SSH от перебора пароля

fail2ban читает /var/log/auth.log, ловит N неудачных попыток входа с одного IP за окно времени и временно банит этот IP через UFW или nftables. После UFW это второй слой защиты SSH: фаервол режет порты, fail2ban — назойливых ботов, которые подобрались к разрешённому 22/tcp. В статье — установка fail2ban на Ubuntu 24.04, дисциплина jail.local вместо jail.conf, готовый jail для sshd, диагностика fail2ban-client status и что делать, если забанили самого себя.

Редакция
chmod — что это и зачем
Глоссарий

chmod — что это и зачем

chmod (change mode) — команда Linux для изменения прав доступа к файлу или каталогу. Управляет тем, кто может читать, писать и выполнять файл — владелец, группа, остальные. Понимание chmod нужно для SSH-ключей, веб-серверов и любой работы с правами доступа в Ubuntu.

Редакция
iptables — что это и зачем
Глоссарий

iptables — что это и зачем

iptables — классический брандмауэр Linux: набор правил, по которым ядро пропускает или блокирует сетевые пакеты. На современной Ubuntu заменён на nftables и обычно скрыт за UFW; саму команду `iptables` напрямую трогают редко, но понимать её стоит — на ней построена вся сетевая безопасность.

Редакция