UFW разрешает обращения к SSH и сайту, блокируя остальные входящие соединения
Безопасность

Как настроить UFW на Ubuntu и не закрыть доступ к VPS

Разрешаем только SSH, HTTP и HTTPS, безопасно включаем сетевой фильтр, проверяем правила снаружи и объясняем связь UFW с nftables.

Содержание

Сетевой фильтр VPS решает одну задачу: пропускает ожидаемые входящие соединения и отбрасывает остальные. Для обычного сайта посетителям нужны HTTP и HTTPS, администратору — SSH. База данных и внутренний порт приложения обычно не должны быть доступны всему интернету.

В Ubuntu простыми правилами удобно управлять через UFW — Uncomplicated Firewall. Он не исправляет уязвимости программ, но уменьшает число сетевых входов, которыми вообще можно воспользоваться.

Главная опасность при первой настройке — случайно закрыть собственный SSH. Поэтому разрешение для действующего порта добавляется до включения фильтра, а старая сессия остаётся открытой до проверки нового входа.

Составьте список нужных входящих соединений

Не начинайте с команд. Запишите, какая программа должна принимать запросы, на каком порту и от кого:

Назначение Порт Кто подключается
SSH обычно TCP 22 владелец или администратор
HTTP TCP 80 любой посетитель и проверка сертификата
HTTPS TCP 443 любой посетитель
Серверное приложение например TCP 3000 на 127.0.0.1 Nginx внутри VPS
База данных зависит от программы, локальный адрес приложение внутри VPS

Порт — числовая точка входа сетевой программы. Один номер может одновременно использовать только один процесс на конкретном адресе. Если программа слушает 127.0.0.1, к ней обращается только сам VPS; адрес 0.0.0.0 означает все его интерфейсы IPv4.

Посмотрите реальное состояние до настройки:

sudo ss -lntup

Команда показывает слушающие TCP- и UDP-порты и связанные процессы. Сопоставьте каждую строку со списком. Непонятный процесс сначала изучите через его службу и пакет, а не завершайте наугад.

Если внутреннее приложение без причины слушает 0.0.0.0:3000, лучше привязать его к 127.0.0.1:3000. Сетевой фильтр станет вторым ограничением, а не единственной защитой.

Узнайте фактический порт SSH

Профиль UFW с именем OpenSSH обычно разрешает стандартный порт 22. Но сначала проверьте настройку сервера SSH:

sudo sshd -T | grep '^port '

sshd -T показывает итоговую конфигурацию с учётом подключённых файлов, а grep оставляет строку порта. Если результат port 22, можно использовать профиль OpenSSH. При другом числе нужно разрешить именно его с протоколом TCP.

Не меняйте номер порта одновременно с первым включением UFW. Два изменения затруднят диагностику, если новое соединение не откроется.

Подготовьте запасной вход

Откройте консоль в панели провайдера и убедитесь, что через неё можно войти. Оставьте текущую SSH-сессию открытой. Во втором окне терминала подготовьте команду нового подключения, но пока не закрывайте первое.

Посмотрите текущее состояние UFW:

sudo ufw status verbose

Status: inactive означает, что правила UFW сейчас не применяются. При active сначала разберите существующие разрешения и запреты. Повторная настройка по учебному примеру не должна стирать чужую рабочую политику.

Установите UFW, если программы ещё нет

На Ubuntu пакет может быть уже установлен. Если команда не найдена, получите свежий список пакетов и установите UFW из репозитория системы:

sudo apt update
sudo apt install ufw

Установка сама по себе не включает фильтр. Сначала будут добавлены разрешения, затем политика проверена и только после этого активирована.

Не устанавливайте рядом другой независимый менеджер правил без необходимости. Несколько инструментов могут менять один сетевой фильтр Linux, и итоговый порядок станет труднее объяснить.

Задайте политику по умолчанию

Для обычного VPS входящие соединения запрещают, если для них нет отдельного разрешения. Исходящие оставляют доступными, чтобы сервер мог получать пакеты, обращаться к DNS и внешним API:

sudo ufw default deny incoming
sudo ufw default allow outgoing

Эти команды задают поведение для соединений, которые не совпали с более точным правилом. Фильтр ещё не включён, поэтому текущий SSH не прервётся на этом шаге.

Запрет исходящих соединений требует отдельного полного списка зависимостей. Не копируйте жёсткую исходящую политику в первый сервер без понимания DNS, обновлений, времени, почты и внешних API.

Разрешите SSH до включения фильтра

Если проверка показала порт 22 и профиль OpenSSH установлен, добавьте разрешение:

sudo ufw app info OpenSSH
sudo ufw allow OpenSSH

Первая команда показывает содержимое профиля. Убедитесь, что там действительно указан 22/tcp. Вторая разрешает этот порт извне.

При нестандартном порте используйте точное число. Например, для уже проверенного порта 2222 команда выглядит как sudo ufw allow 2222/tcp comment 'SSH administration'. Число из примера нельзя использовать вместо результата sshd -T.

Ограничение одним административным IP возможно только при постоянном адресе. Домашний провайдер может поменять его, а мобильная сеть часто использует другой адрес. Без проверенной консоли такое сужение создаёт риск потерять вход.

Разрешите HTTP и HTTPS для сайта

После установки Nginx в UFW появляется профиль Nginx Full, содержащий порты 80 и 443. Сначала посмотрите его, затем добавьте:

sudo ufw app info 'Nginx Full'
sudo ufw allow 'Nginx Full'

Порт 80 нужен обычному HTTP, перенаправлению на HTTPS и распространённой проверке Let’s Encrypt HTTP-01. Порт 443 принимает защищённые запросы HTTPS.

Если Nginx ещё не установлен, разрешите точные значения командами sudo ufw allow 80/tcp и sudo ufw allow 443/tcp. Не открывайте диапазон «на будущее».

Просмотрите будущие правила и включите UFW

До активации соберите добавленные разрешения в одном выводе и ещё раз сравните их с исходной таблицей портов:

sudo ufw show added

В списке должны быть политика по умолчанию, фактический SSH и нужные веб-порты. Непонятное разрешение требует объяснения до включения.

Теперь активируйте фильтр и сразу запросите итоговое состояние:

sudo ufw enable
sudo ufw status verbose

Подтвердите предупреждение только при наличии SSH-правила и запасной консоли. В результате ожидается Status: active, запрет входящих по умолчанию и отдельные разрешения.

Не закрывая исходное соединение, откройте новую SSH-сессию. Затем с домашнего компьютера проверьте HTTP и HTTPS. Только после успешного нового входа старая сессия больше не нужна.

Проверьте закрытый порт снаружи

Локальный список правил ещё не доказывает, что сеть ведёт себя ожидаемо. С внешнего компьютера проверьте сайт и один заведомо неиспользуемый порт доступным сетевым инструментом. Закрытый порт должен отвечать отказом или истекать по тайм-ауту, а 80/443 — доходить до Nginx.

Не выбирайте для теста порт реальной базы или панели, пока не выясните их назначение. Цель — подтвердить запрет, а не отправить случайный запрос действующей службе.

При наличии IPv6 повторите проверку по записи AAAA. UFW обычно создаёт правила для IPv4 и IPv6, если поддержка IPv6 включена в его настройках, но фактическое поведение нужно подтвердить снаружи.

Удаляйте правило по номеру после просмотра

Со временем временные разрешения нужно убирать. Сначала покажите нумерованный список:

sudo ufw status numbered

Найдите номер конкретного правила и удалите его командой вида sudo ufw delete 3. После удаления номера пересчитываются, поэтому перед каждой следующей операцией выводите список заново.

Сразу повторите новый SSH-вход или внешний запрос, связанный с изменённым портом. Не накапливайте правила без подписей и понятного владельца.

Учитывайте фильтр в панели провайдера

Многие хостеры предлагают ещё один firewall перед VPS. Запрос должен пройти оба уровня: правило панели не открывает порт в UFW, а разрешение UFW не обходит запрет провайдера.

Храните рядом короткую таблицу двух наборов правил. При тайм-ауте сравнивайте их по адресу, протоколу, порту и версии IP. Иначе одинаковая задача в двух интерфейсах превращается в угадывание.

Docker также может создавать собственные сетевые правила для опубликованных портов контейнеров. После установки Docker заново проверьте доступ снаружи и не считайте вывод UFW единственным доказательством фильтрации контейнера.

Когда переходить к nftables

Nftables — более низкоуровневый способ задать правила сетевого фильтра Linux. Он нужен при сложных наборах адресов, маршрутизации между интерфейсами, собственных цепочках и конфигурации, которой централизованно управляет команда администраторов.

Для одного VPS с SSH и сайтом UFW обычно понятнее. Не нужно добавлять ручные правила nftables только ради «более профессионального» вида: ошибка в сложной политике опаснее нескольких ясных разрешений UFW.

Если возможностей UFW перестало хватать, сначала опишите полную новую политику и проверьте её на отдельной машине. Переход должен заменить один основной способ управления, а не создать второй независимый набор поверх первого.

Как вернуть доступ после ошибочного правила

Если новая SSH-сессия не открывается, не закрывайте старую. Просмотрите sudo ufw status numbered и исправьте конкретное правило. Если причина пока непонятна, из сохранённой сессии или консоли временно отключите UFW:

sudo ufw disable

Команда убирает фильтрацию UFW, поэтому сервер снова может открыть лишние порты. Это аварийный возврат, а не готовое состояние. Исправьте разрешение SSH, снова включите UFW и повторите внешний тест.

Готовая политика объяснима одной таблицей: какие порты доступны, кому и зачем. Список ss совпадает с назначением служб, UFW пропускает только нужные входы, новая SSH-сессия работает, а сайт открывается по IPv4 и используемому IPv6.

Следующий шаг хаба защиты — автоматическая установка исправлений безопасности Ubuntu. Правила сети не заменяют обновление программ, которые работают на разрешённых портах.

Первоисточники

Рекламное местоВаша компания здесьРазместить рекламу

Самопроверка

Проверьте, что материал усвоен

Ответьте на все вопросы. Результат сохранится только в этом браузере и будет учтён в статистике прочитанных материалов.

01Что сделать до первого включения UFW на удалённом VPS?
02Почему порт приложения на 127.0.0.1 обычно не открывают в UFW?
03Как проверить, что правила работают?

Разбираем коротко

Частые вопросы

Нужно ли вручную настраивать одновременно UFW и nftables?

Обычно нет. UFW — удобный способ задать правила сетевого фильтра Linux для обычного VPS. Ручные правила nftables нужны для более сложной схемы; два независимых способа управления усложняют проверку и возврат.

Защитит ли UFW уязвимый сайт на порту 443?

Нет. UFW пропускает разрешённый HTTPS-трафик к Nginx и приложению. Обновления, безопасная конфигурация, проверка входных данных и ограниченные права процесса по-прежнему нужны.

Можно ли разрешить SSH только со своего IP-адреса?

Да, если адрес постоянный и проверена консоль провайдера. При динамическом адресе такое правило способно закрыть владельцу вход, поэтому сначала нужен надёжный запасной путь.