цены сверены 11 октября 2026 года

Настройка файрвола ufw на VPS

Чтобы включить ufw и не потерять доступ, сначала разрешите SSH командой ufw allow OpenSSH и только потом выполните ufw enable. Помните, что Docker публикует порты в обход ufw: порты контейнеров, которые не должны быть видны из интернета, привязывайте к 127.0.0.1.

Настройка файрвола ufw на VPS
Настройка файрвола ufw на VPShostfakt.ru
Содержание
  1. Что делает ufw
  2. Порядок без риска
  3. Откройте порты для сайта
  4. Откройте порт только для одного адреса
  5. Ограничьте частые попытки входа по SSH
  6. Посмотрите правила и удалите лишнее
  7. Журнал
  8. Docker обходит ufw
  9. Что делать дальше
Проверено на живом сервере 6 октября 2026 годаVPS, Ubuntu 24.04Как мы проверяем

Что делает ufw

ufw (Uncomplicated Firewall) это простая надстройка над файрволом ядра Linux. Файрвол решает, какие входящие соединения пропускать к серверу, а какие отбрасывать. Закрытые порты не видны снаружи, даже если программа на сервере их слушает.

Все команды этой статьи мы выполнили 6 октября 2026 года на VPS с Ubuntu 24.04 и проверяли результат подключением с другого сервера. Команды вводите на сервере, под root или через sudo. Базовую настройку сервера описывает статья первая настройка VPS на Ubuntu.

Главная опасность: включить ufw, не разрешив SSH. Тогда соединение оборвётся, и зайти можно будет только через консоль в панели хостера. Держите текущую SSH-сессию открытой, пока не проверите вход во втором окне. Если вы меняли порт SSH, открывайте именно его, а не OpenSSH.

Порядок без риска

sudo ufw status
sudo ufw allow OpenSSH
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw enable

status показывает, включён ли ufw сейчас (inactive значит выключен). allow OpenSSH разрешает порт SSH по профилю приложения, у стандартного SSH это порт 22. default deny incoming запрещает все входящие соединения, которые не разрешены правилами. default allow outgoing разрешает серверу любые исходящие соединения, иначе перестанут работать обновления и запросы наружу. enable включает файрвол и добавляет его в автозагрузку. Система предупредит о возможном разрыве SSH, ответьте y: порт SSH уже разрешён.

Теперь откройте второе окно терминала и проверьте вход по SSH. Только потом закрывайте старое.

Откройте порты для сайта

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

Команды разрешают входящие подключения по HTTP (порт 80) и HTTPS (порт 443) по протоколу TCP. Открывайте только то, что действительно должно быть доступно всем. Базы данных, панели и админки наружу обычно не нужны.

Откройте порт только для одного адреса

Например, чтобы подключаться к PostgreSQL (порт 5432) только со своего постоянного адреса 203.0.113.5:

sudo ufw allow from 203.0.113.5 to any port 5432 proto tcp

Правило пропускает на порт 5432 только соединения с адреса 203.0.113.5, остальным порт остаётся закрытым. Так же можно ограничить и SSH, но с оговоркой: если ваш домашний или рабочий адрес поменяется, вы закроете доступ себе. Для SSH этот способ используйте, только если адрес точно постоянный.

Ограничьте частые попытки входа по SSH

sudo ufw limit OpenSSH

limit разрешает подключения, но отклоняет адрес, который за 30 секунд сделал шесть и более попыток подключения. Это притормаживает перебор паролей. Если ранее вы добавили allow OpenSSH, удалять его не нужно: limit заменяет прежнее правило. В ответ ufw пишет Rule updated, а в списке правил у OpenSSH вместо ALLOW появляется LIMIT. Учтите, что ограничение действует и на вас: если вы или ваши скрипты подключаетесь к серверу чаще шести раз за полминуты, лишние подключения будут отклонены. Вход по SSH-ключу при этом остаётся главной защитой, limit лишь дополнение.

Посмотрите правила и удалите лишнее

sudo ufw status numbered

Выводит правила с номерами. Правила для IPv6 отмечены (v6), они дублируют правила для IPv4. Чтобы удалить правило, укажите его номер:

sudo ufw delete 3

Команда удалит правило номер 3 после подтверждения. После каждого удаления номера сдвигаются, поэтому снова выведите список и сверяйтесь с ним. Не удаляйте правило для SSH, пока не добавили другое.

Подробный вывод со стандартными политиками даёт sudo ufw status verbose.

Журнал

sudo ufw logging on
sudo less /var/log/ufw.log

Первая команда включает запись заблокированных соединений в журнал (на Ubuntu 24.04 она включена сразу, на уровне low). Вторая открывает файл журнала для чтения, выход клавишей q. Файл появляется после первого заблокированного соединения: если ufw включён только что и файла ещё нет, подождите минуту. У нас за первую минуту в журнале набралось десять записей [UFW BLOCK] от чужих адресов. Записей может быть много: интернет постоянно сканируют автоматические программы, это нормальный фон. Для уровня подробности есть вариант ufw logging medium, описанный в man ufw.

Docker обходит ufw

Это самая частая ошибка новичков. Docker сам добавляет правила в файрвол ядра, и порты контейнеров, опубликованные через -p или ports: в Compose, открываются в обход правил ufw. Запись ufw deny 8080 не закроет порт, который Docker опубликовал. Об этом прямо сказано в документации Docker, раздел про пакетную фильтрацию и файрволы.

Мы проверили это на сервере с включённым ufw и политикой deny incoming. Контейнер с nginx, запущенный с -p 8081:80, открылся снаружи сразу. Мы добавили правило ufw deny 8081, порт остался открытым. Обычная программа без Docker, слушавшая соседний порт, при этом была закрыта, как и положено. А контейнер, опубликованный на локальный адрес (как в команде ниже), снаружи не открылся.

Если порт контейнера не должен быть виден снаружи, публикуйте его только на локальный адрес:

docker run -d -p 127.0.0.1:8080:80 nginx

Команда запускает контейнер и привязывает порт 80 контейнера к порту 8080 только на 127.0.0.1, то есть доступному с самого сервера. В Compose то же самое выглядит так:

ports:
  - "127.0.0.1:8080:80"

Дальше доступ снаружи обычно даёт обратный прокси (например, nginx) на портах 80 и 443. Проверьте результат с другого компьютера: подключение к порту 8080 по адресу сервера не должно проходить. Установку Docker описывает статья Docker на VPS.

Что делать дальше

Включите ufw на новом сервере в первый же день, а перед каждым новым сервисом спрашивайте себя, нужен ли ему доступ снаружи. Подобрать сервер под проект можно на странице подбора VPS, а про задачи с контейнерами читайте на странице VPS для Docker.