psj-notes
~/home ~/series ~/archive

04. UFW: настройка фаервола

14.07.2026 Серия: Настройка VDS сервера с VPN "ufw" "firewall" "безопасность"

Что такое UFW

UFW (Uncomplicated Firewall) — это надстройка над стандартным iptables, которая позволяет управлять правилами фильтрации трафика простыми командами. Название говорит само за себя: «несложный фаервол».

Без фаервола любой порт на сервере доступен из интернета. Злоумышленники постоянно сканируют IP-адреса в поисках открытых портов. UFW закрывает всё, что не нужно, — и это первая линия обороны.

Установка UFW

В современных версиях Ubuntu UFW уже установлен, но проверить стоит:

sudo apt install -y ufw

Проверяем статус:

sudo ufw status

Вывод: Status: inactive — как и ожидалось.

Базовая стратегия

Классическая стратегия безопасности:

  1. Запретить всё входящее по умолчанию
  2. Разрешить всё исходящее — сервер должен иметь доступ к обновлениям, DNS и т.д.
  3. Открыть только нужные порты конкретным сервисам

Применяем политики по умолчанию:

sudo ufw default deny incoming
sudo ufw default allow outgoing

Разрешение SSH

Прежде чем включить фаервол, нужно разрешить SSH, иначе мы потеряем доступ к серверу:

sudo ufw allow ssh

Эта команда — алиас для ufw allow 22/tcp. Результат:

Rule added
Rule added (v6)

Правило добавлено для IPv4 и IPv6.

Rate limiting для SSH

SSH-порт — главная цель для брутфорс-атак. UFW позволяет ограничить количество попыток подключения с одного IP:

sudo ufw limit ssh

limit разрешает не более 6 соединений с одного IP за 30 секунд. Если атакующий превысит лимит — UFW молча сбрасывает пакеты.

Важно: limit применяется поверх уже существующих правил. Сначала allow, потом limit.

Включение фаервола

Проверяем, какие правила будут применены:

sudo ufw show added

Должно быть что-то вроде:

ufw allow 22/tcp
ufw limit 22/tcp

Включаем:

sudo ufw enable

Система предупредит, что включение может нарушить текущие SSH-соединения. Отвечаем y.

Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

Проверяем статус:

sudo ufw status verbose

Вывод:

Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp                     LIMIT       Anywhere
22/tcp (v6)                LIMIT       Anywhere (v6)

Проверка извне

Пока сессия открыта, откройте второй терминал на локальной машине (или используйте мобильный интернет) и попробуйте подключиться:

ssh sergey@95.216.42.187

Подключение должно пройти успешно — SSH работает.

Теперь попробуйте подключиться к другому порту, например к 80 или 443:

nc -zv 95.216.42.187 80
nc -zv 95.216.42.187 443

Оба должны ответить Connection refused или timed out. Если так — фаервол работает правильно.

Просмотр логов

UFW логирует заблокированные пакеты. Это полезно для отладки:

sudo journalctl -u ufw --since "5 minutes ago"

Или смотрим системный лог:

sudo tail -f /var/log/ufw.log

Вы увидите записи вроде:

[UFW BLOCK] IN=eth0 OUT=... SRC=185.220.101.42 DST=95.216.42.187 PROTO=TCP DPT=23

Это значит, что UFW заблокировал попытку подключения к порту 23 (Telnet) с IP 185.220.101.42.

Работа с правилами

Основные команды, которые пригодятся:

Команда Описание
sudo ufw allow 80/tcp Открыть порт 80 HTTP
sudo ufw allow 443/tcp Открыть порт 443 HTTPS
sudo ufw allow 51820/udp Открыть UDP-порт WireGuard
sudo ufw deny 23/tcp Закрыть порт (явный запрет)
sudo ufw delete allow 80/tcp Удалить правило
sudo ufw status numbered Показать правила с номерами
sudo ufw delete 3 Удалить правило по номеру

Все порты, кроме SSH, пока закрыты. В следующих статьях мы будем открывать их по мере установки сервисов.

Дополнительные соображения

Если сервер используется для личных нужд и к нему подключаетесь только вы, можно дополнительно ограничить SSH по IP-адресу:

sudo ufw allow from 77.88.55.66 to any port 22

Но это имеет смысл только если у вас статический IP дома. В остальных случаях rate limiting + Fail2ban (следующая статья) — более гибкое решение.

Итог

Фаервол настроен и активен:

  • Входящие соединения по умолчанию запрещены
  • SSH разрешён с ограничением количества попыток
  • Все остальные порты закрыты
  • Логи заблокированных пакетов пишутся в /var/log/ufw.log

В следующей части усилим защиту — установим Fail2ban, который автоматически банит IP-адреса после нескольких неудачных попыток входа.

Комментарии

Комментарии пока не подключены.