Ubuntu · Debian · любой VPS

Минимальная настройка UFW на VPS

Закройте всё лишнее за 5 минут и не потеряйте доступ по SSH. Пять команд и готовый скрипт: копируете, вставляете в терминал, проверяете.

root@vps: ~
$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing)

To            Action     From
--            ------     ----
22/tcp        LIMIT IN   Anywhere   # SSH
80/tcp        ALLOW IN   Anywhere   # HTTP
443/tcp       ALLOW IN   Anywhere   # HTTPS
22/tcp (v6)   LIMIT IN   Anywhere (v6)
80/tcp (v6)   ALLOW IN   Anywhere (v6)
443/tcp (v6)  ALLOW IN   Anywhere (v6)
5шагов до защищённого сервера
~5 минна всю настройку
3открытых порта: SSH, HTTP, HTTPS
0потерянных SSH-сессий, если идти по шагам
Зачем это нужно

Новый VPS открыт всему интернету

Через несколько минут после запуска сервер начинают сканировать боты. Любой сервис, который случайно слушает внешний интерфейс, становится мишенью.

Порты открыты

По умолчанию на большинстве образов VPS входящий трафик никак не фильтруется.

Подбор паролей

SSH перебирают круглосуточно. Правило limit заметно снижает частоту попыток с одного IP.

Простой синтаксис

UFW — понятная обёртка над iptables/nftables: ufw allow 443/tcp вместо длинных цепочек.

Принцип «всё закрыто»

Запрещаем весь входящий трафик и открываем только то, что действительно нужно.

Инструкция

Пять шагов минимальной настройки

Выполняйте по порядку, не закрывая текущую SSH-сессию. Команды рассчитаны на Ubuntu и Debian.

1

Установите UFW

На Ubuntu он обычно уже есть, на Debian — ставится одной командой.

bash
sudo apt update && sudo apt install -y ufw
2

Сначала разрешите SSH

Самый важный шаг: делаем его до включения файрвола. limit разрешает подключения, но временно блокирует IP, который делает 6 и более попыток за 30 секунд. Если SSH у вас не на 22-м порту, замените число.

bash
sudo ufw limit 22/tcp comment 'SSH'
3

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

Всё входящее — запрещено, всё исходящее — разрешено. Сервер по-прежнему сможет ставить обновления и ходить в интернет.

bash
sudo ufw default deny incoming
sudo ufw default allow outgoing
4

Откройте веб-порты (если нужен сайт)

Пропустите этот шаг, если на сервере нет веб-сервера.

bash
sudo ufw allow 80/tcp comment 'HTTP'
sudo ufw allow 443/tcp comment 'HTTPS'
5

Включите и проверьте

UFW спросит подтверждение — ответьте y. Затем, не закрывая текущую сессию, откройте новое окно терминала и убедитесь, что SSH пускает.

bash
sudo ufw enable
sudo ufw status verbose

Не закрывайте текущую SSH-сессию, пока не проверите вход из нового окна. Если что-то пошло не так — в текущей сессии выполните sudo ufw disable. Подробнее о страховке — на странице «Пошагово».

Готовый скрипт

Всё то же самое — одним файлом

Скрипт выполняет пять шагов по порядку и в конце показывает итоговые правила.

  1. Создайте файл: nano ufw-min.sh
  2. Вставьте скрипт и сохраните (Ctrl+O, Enter, Ctrl+X).
  3. Запустите, указав свой порт SSH:
bash
sudo SSH_PORT=22 bash ufw-min.sh

Нужен только SSH, без сайта? Удалите из скрипта две строки с портами 80 и 443.

ufw-min.sh
#!/usr/bin/env bash
# Минимальная настройка UFW: SSH + HTTP + HTTPS
set -euo pipefail

# Порт SSH (передайте SSH_PORT=2222, если меняли)
SSH_PORT="${SSH_PORT:-22}"

apt-get update
apt-get install -y ufw

# 1. Сначала SSH, чтобы не потерять доступ
ufw limit "${SSH_PORT}/tcp" comment 'SSH'

# 2. Политика по умолчанию
ufw default deny incoming
ufw default allow outgoing

# 3. Веб-сервер
ufw allow 80/tcp comment 'HTTP'
ufw allow 443/tcp comment 'HTTPS'

# 4. Включаем без интерактивного вопроса
ufw --force enable
ufw status verbose
Подробнее

Хотите разобраться глубже?

Три страницы с деталями: от безопасного включения до типичных ошибок.

FAQ

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

Я включил UFW и потерял доступ по SSH. Что делать?
Зайдите через веб-консоль (VNC) в панели хостинг-провайдера — она не зависит от файрвола. Выполните sudo ufw allow 22/tcp или sudo ufw disable. Подробно — в разделе «Подводные камни».
Нужно ли отдельно открывать порты для IPv6?
Нет. Если в /etc/default/ufw стоит IPV6=yes (по умолчанию на Ubuntu и Debian), каждое правило автоматически создаётся и для IPv6 — в статусе это строки с пометкой (v6).
Чем limit отличается от allow?
allow просто пропускает трафик. limit тоже пропускает, но временно блокирует IP, который сделал 6 и более подключений за 30 секунд. Для SSH это защита от перебора, но для частых автоматических подключений (CI, Ansible) лучше allow с конкретного IP.
Мои контейнеры Docker доступны, хотя порт закрыт в UFW. Почему?
Docker пишет свои правила iptables напрямую и обходит цепочки UFW. Самое простое решение — публиковать порты только на localhost: -p 127.0.0.1:8080:80. Разбор — на странице «Подводные камни».
Нужен ли UFW, если у провайдера есть свой файрвол?
Желательно. Облачный файрвол защищает снаружи, UFW — на самом сервере и переезжает вместе с ним. Помните, что порт должен быть открыт в обоих.

Готово? Проверьте себя

Выполните sudo ufw status verbose: должно быть Status: active, deny (incoming) и только нужные вам порты.