Закройте всё лишнее за 5 минут и не потеряйте доступ по SSH. Пять команд и готовый скрипт: копируете, вставляете в терминал, проверяете.
$ 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)
Через несколько минут после запуска сервер начинают сканировать боты. Любой сервис, который случайно слушает внешний интерфейс, становится мишенью.
По умолчанию на большинстве образов VPS входящий трафик никак не фильтруется.
SSH перебирают круглосуточно. Правило limit заметно снижает частоту попыток с одного IP.
UFW — понятная обёртка над iptables/nftables: ufw allow 443/tcp вместо длинных цепочек.
Запрещаем весь входящий трафик и открываем только то, что действительно нужно.
Выполняйте по порядку, не закрывая текущую SSH-сессию. Команды рассчитаны на Ubuntu и Debian.
На Ubuntu он обычно уже есть, на Debian — ставится одной командой.
sudo apt update && sudo apt install -y ufwСамый важный шаг: делаем его до включения файрвола. limit разрешает подключения, но временно блокирует IP, который делает 6 и более попыток за 30 секунд. Если SSH у вас не на 22-м порту, замените число.
sudo ufw limit 22/tcp comment 'SSH'Всё входящее — запрещено, всё исходящее — разрешено. Сервер по-прежнему сможет ставить обновления и ходить в интернет.
sudo ufw default deny incoming
sudo ufw default allow outgoingПропустите этот шаг, если на сервере нет веб-сервера.
sudo ufw allow 80/tcp comment 'HTTP'
sudo ufw allow 443/tcp comment 'HTTPS'UFW спросит подтверждение — ответьте y. Затем, не закрывая текущую сессию, откройте новое окно терминала и убедитесь, что SSH пускает.
sudo ufw enable
sudo ufw status verboseНе закрывайте текущую SSH-сессию, пока не проверите вход из нового окна. Если что-то пошло не так — в текущей сессии выполните sudo ufw disable. Подробнее о страховке — на странице «Пошагово».
Скрипт выполняет пять шагов по порядку и в конце показывает итоговые правила.
nano ufw-min.shCtrl+O, Enter, Ctrl+X).sudo SSH_PORT=22 bash ufw-min.shНужен только SSH, без сайта? Удалите из скрипта две строки с портами 80 и 443.
#!/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Три страницы с деталями: от безопасного включения до типичных ошибок.
Подготовка, нестандартный порт SSH, доступ только со своего IP, таймер-страховка, логи.
Читать →Статус, добавление и удаление правил, профили приложений, сброс — всё в одной таблице.
Открыть →Docker в обход UFW, IPv6, порядок правил, облачный файрвол провайдера, восстановление доступа.
Изучить →sudo ufw allow 22/tcp или sudo ufw disable. Подробно — в разделе «Подводные камни»./etc/default/ufw стоит IPV6=yes (по умолчанию на Ubuntu и Debian), каждое правило автоматически создаётся и для IPv6 — в статусе это строки с пометкой (v6).limit отличается от allow?allow просто пропускает трафик. limit тоже пропускает, но временно блокирует IP, который сделал 6 и более подключений за 30 секунд. Для SSH это защита от перебора, но для частых автоматических подключений (CI, Ansible) лучше allow с конкретного IP.-p 127.0.0.1:8080:80. Разбор — на странице «Подводные камни».Выполните sudo ufw status verbose: должно быть Status: active, deny (incoming) и только нужные вам порты.