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

UFW на Ubuntu: настройка фаервола за пять команд

UFW — обёртка над nftables, которая закрывает всю входящую сеть и оставляет открытыми только те порты, которые вам реально нужны. Пять команд — и сервер не отвечает на сканеры. Разбираем настройку UFW в Ubuntu Server и Desktop 24.04 LTS: как включить, как разрешить порт, как лимитировать SSH и как проверить статус, не закрыв сами себе доступ.

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

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

Безопасность Ubuntu Server: с чего начать закалку
Безопасность

Безопасность Ubuntu Server: с чего начать закалку

Ubuntu Server из коробки не защищён: парольный SSH разрешён, фаервол выключен, апдейты не ставятся автоматом. Этот гайд — план минимума на первый час после установки, чтобы перестать бояться публичного IP. Каждый шаг ведёт на полный разбор с командами.

Никита Соболев
Безопасность

chown в Linux: смена владельца и группы файлов в Ubuntu

chown (change owner) — команда смены владельца и группы файла или директории в Linux. Часто используется вместе с chmod при настройке прав веб-сервера, передаче файлов между пользователями и работе с Docker-волюмами. Разбираем синтаксис, рекурсивные операции, как не сломать симлинки и сохранять владельцев при бэкапах через rsync.

Редакция
Безопасность

chmod в Linux: права доступа на файлы и директории в Ubuntu

chmod (change mode) — основная команда управления правами доступа в Linux. Каждый файл имеет три набора прав (для владельца, группы и остальных) и три действия (чтение, запись, исполнение). Разбираем числовой и символический формат записи, recursive-операции, специальные биты SUID/SGID/sticky и типичные сценарии — права на SSH-ключи, файлы веб-сервера, скрипты.

Редакция
Безопасность

Let's Encrypt и certbot на Ubuntu: бесплатный SSL для nginx

Let's Encrypt — бесплатные SSL/TLS-сертификаты для любого домена. На Ubuntu выпускаются через утилиту certbot одной командой; автообновление работает само через systemd-таймер. Разбираем установку, выпуск для nginx, DNS-challenge для wildcard-сертификатов и грабли с rate-limit.

Редакция