Настройка UFW занимает десять минут, а закрывает целый класс проблем: сканирование портов, прямые подключения к базе данных снаружи, шум ботов на служебных сервисах. UFW (Uncomplicated Firewall) — стандартный firewall для Ubuntu: он предустановлен в системе, управляется короткими командами и не требует знать синтаксис iptables. В этой статье — пошаговая настройка файрвола UFW на Ubuntu 24.04 LTS: политики по умолчанию, открытие нужных портов, ограничение доступа по IP и главное правило, которое убережёт вас от потери доступа к собственному серверу. Все команды проверены и работают на любом VPS — от пет-проекта до продакшена.
Что такое UFW и зачем он нужен, если у хостера есть DDoS-защита
UFW — это надстройка над nftables (в старых релизах Ubuntu — над iptables). Сам он трафик не фильтрует: команда вида ufw allow 80/tcp транслируется в низкоуровневые правила, которые исполняет ядро Linux. Смысл UFW именно в удобстве — то, что в «сыром» синтаксисе занимает несколько строк с цепочками и таблицами, здесь записывается одной командой, которую невозможно понять неправильно.
Частый вопрос новичков: зачем файрвол на сервере, если провайдер и так фильтрует атаки? Это разные уровни защиты. У Cheap-Host, например, все VPS-тарифы включают базовую DDoS-защиту L3/L4 — она отсекает объёмные атаки вроде SYN-флуда ещё до того, как трафик дойдёт до вашей машины. Но она не решает, какие порты вашего сервера должны быть видны из интернета. Если MySQL слушает 0.0.0.0:3306, а панель мониторинга висит на порту 8080 без пароля, сетевая фильтрация их не спрячет. Правильная связка выглядит так: провайдер гасит флуд на уровне сети, UFW закрывает всё лишнее на самом сервере.
Что именно закрывает файрвол:
- Сканирование портов. Боты круглосуточно перебирают IP-диапазоны в поисках открытых сервисов — при политике «запрещено всё, кроме разрешённого» им просто не за что зацепиться.
- Прямой доступ к базам данных. MySQL, PostgreSQL, Redis не должны быть доступны из интернета — но по умолчанию некоторые конфигурации слушают все интерфейсы.
- Служебные панели и API. Netdata, phpMyAdmin, тестовые окружения на нестандартных портах — частая точка входа при взломе.
- Забытые сервисы. Всё, что вы подняли «на минуту посмотреть» и забыли остановить.
Проверяем и устанавливаем UFW
В Ubuntu 24.04 UFW предустановлен, но по умолчанию выключен. Первым делом проверьте его состояние:
sudo ufw status verbose
Ответ Status: inactive — нормальная ситуация для свежего сервера: пакет на месте, файрвол ещё не включён. Если система собрана из минимального образа и команда не найдена, установите пакет:
sudo apt update && sudo apt install ufw
На VPS Cheap-Host с образом Ubuntu 24.04 команда ufw доступна сразу после выдачи сервера — можно переходить к настройке.
Базовая настройка: сначала SSH, потом всё остальное
Начните с политик по умолчанию — они определяют судьбу пакетов, не подпадающих ни под одно явное правило. Классическая схема для сервера: входящие соединения запрещены, исходящие разрешены.
sudo ufw default deny incoming
sudo ufw default allow outgoing
Теперь самый важный момент всей статьи. Прежде чем включать файрвол, разрешите SSH. Если выполнить ufw enable при политике deny incoming без правила для SSH, вы отрежете себе доступ к серверу: текущая сессия оборвётся, а новая не установится. Восстанавливать доступ придётся через аварийную консоль в панели хостинга.
sudo ufw allow OpenSSH
Команда использует профиль приложения OpenSSH (порт 22/tcp). Эквивалентный вариант — указать порт явно:
sudo ufw allow 22/tcp
Если вы перенесли SSH на нестандартный порт, разрешите именно его, например sudo ufw allow 2222/tcp. Только после этого включайте файрвол:
sudo ufw enable
UFW предупредит, что операция может разорвать существующие соединения (Command may disrupt existing ssh connections) — отвечайте y: правило для SSH уже добавлено, сессия не пострадает. Файрвол стартует и будет автоматически подниматься при каждой перезагрузке сервера. Проверьте результат:
sudo ufw status verbose
В выводе вы увидите Status: active, политики deny (incoming), allow (outgoing) и список разрешающих правил.
Открываем порты под свои сервисы
Дальше открывайте только то, что реально должно быть доступно из интернета. Для типового веб-сервера это два порта:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
Ориентир по типовым портам — в таблице:
| Порт | Сервис | Открывать наружу? |
|---|---|---|
| 22/tcp | SSH | Да, желательно с limit или ограничением по IP |
| 80/tcp | HTTP | Да, если на сервере есть сайт |
| 443/tcp | HTTPS | Да, если на сервере есть сайт |
| 8080/tcp | Альтернативный HTTP, панели | Только при необходимости, лучше по IP |
| 3306/tcp | MySQL / MariaDB | Нет — только localhost или конкретный IP |
| 5432/tcp | PostgreSQL | Нет — только localhost или конкретный IP |
| 51820/udp | WireGuard | Да, если поднят VPN |
Вместо номеров портов удобно использовать профили приложений — их регистрируют пакеты при установке (nginx, apache2, openssh-server). Посмотреть доступные:
sudo ufw app list
Профиль Nginx Full, например, открывает сразу 80 и 443: sudo ufw allow "Nginx Full". Сами профили — это обычные текстовые файлы в каталоге /etc/ufw/applications.d/; при желании туда можно добавить описание собственного сервиса, и он появится в ufw app list.
Точечные правила: доступ по IP и защита от перебора
Если вы подключаетесь к серверу со статического IP (офис, домашний провайдер с фиксированным адресом), сузьте доступ к SSH до этого адреса:
sudo ufw allow proto tcp from 203.0.113.10 to any port 22
После этого общее правило allow 22/tcp можно удалить — попытки подключения с любых других адресов будут отброшены ещё на уровне файрвола. Вместо одного адреса допустима подсеть: from 203.0.113.0/24.
Если статического IP нет, используйте встроенный лимитер соединений:
sudo ufw limit ssh
Правило limit разрешает подключения, но временно блокирует адрес, открывший 6 и более соединений за 30 секунд, — типичный почерк скриптов подбора паролей. Это первый рубеж, а не полноценная защита: для серьёзной блокировки брутфорса поставьте Fail2ban, а вход по паролю замените SSH-ключами — эти три меры дополняют, а не заменяют друг друга.
Управление правилами: просмотр, удаление, логи
Со временем правила накапливаются, и часть из них устаревает. Удобнее всего работать с нумерованным списком:
sudo ufw status numbered
Каждое правило получает номер в квадратных скобках — удалить лишнее можно по нему:
sudo ufw delete 3
Учтите: после удаления нумерация сдвигается, поэтому удаляйте правила по одному, каждый раз сверяясь со списком. Второй способ — повторить правило целиком со словом delete:
sudo ufw delete allow 8080/tcp
Чтобы понимать, что файрвол реально блокирует, включите логирование:
sudo ufw logging on
По умолчанию используется уровень low — пишутся только заблокированные пакеты, этого достаточно. Уровень можно поднять командой вида sudo ufw logging medium, но на публичном сервере высокие уровни быстро раздувают лог. Записи попадают в /var/log/ufw.log; заблокированные соединения ищутся по метке [UFW BLOCK].
Наконец, два «стоп-крана». Команда sudo ufw disable выключает файрвол, сохраняя все правила, — при следующем enable они вернутся. Команда sudo ufw reset отключает UFW и удаляет все правила, возвращая конфигурацию к заводской, — используйте её, когда проще настроить всё заново, чем разбирать накопившийся список.
FAQ
Я включил UFW и потерял доступ по SSH. Что делать? Подключитесь к серверу через аварийную консоль (VNC) в панели управления хостинга — она работает в обход сети. Выполните sudo ufw allow 22/tcp (или sudo ufw disable), и SSH-доступ восстановится. Чтобы такого не повторялось, всегда добавляйте правило для SSH до команды ufw enable.
UFW — это отдельный файрвол или обёртка над iptables? Обёртка. UFW сам пакеты не фильтрует: он транслирует короткие команды в правила nftables (в актуальных релизах Ubuntu) или iptables (в старых). Фильтрацию выполняет ядро Linux, поэтому по возможностям и скорости UFW не уступает ручной настройке.
Нужен ли UFW, если у хостера уже есть DDoS-защита? Да. Защита L3/L4 на стороне провайдера фильтрует объёмные сетевые атаки — SYN-флуд, UDP-флуд, — но не управляет тем, какие порты вашего сервера открыты наружу. Базы данных, панели администрирования и служебные сервисы от посторонних закрывает именно файрвол на самом сервере.
Как открыть порт только для одного IP-адреса? Используйте расширенный синтаксис: sudo ufw allow proto tcp from 203.0.113.10 to any port 22 — подключиться к порту 22 сможет только адрес 203.0.113.10. Вместо одного IP можно указать подсеть, например 203.0.113.0/24.
Замедляет ли UFW работу сервера? Нет. Правила обрабатывает ядро Linux, и при типичном наборе из десятка-двух правил накладные расходы ничтожны. Единственное, за чем стоит следить, — уровень логирования: режимы high и full на публичном сервере быстро наполняют /var/log/ufw.log.
Вывод
Вся базовая защита сервера файрволом укладывается в пять команд: default deny incoming, default allow outgoing, allow OpenSSH, enable — и дальше allow только для тех портов, которые действительно нужны снаружи. Главное правило одно: SSH разрешаем до включения файрвола, а не после. UFW — лишь один пункт базовой гигиены нового сервера; полный список смотрите в чек-листе первых шагов после покупки VPS.
Если сервер для экспериментов или боевого проекта вы ещё не выбрали — у Cheap-Host есть тариф Start за 450 ₽/мес: 6 vCPU, 8 ГБ RAM, 96 ГБ NVMe, KVM с полным root-доступом и безлимитный трафик. Сервер выдаётся за 45–60 секунд, так что настроить UFW по этой статье вы успеете в первые десять минут после оплаты.