Гайд

Перші 30 хвилин: контрольний список зміцнення VPS

Свіжий VPS отримує перший SSH-скан протягом хвилин після отримання IP. Ось точна послідовність, яку я виконую на кожному новому сервері — готова до копіювання для Debian 13, з таблицею-чеклистом наприкінці.

Припущення: свіжий образ Debian 13 з вашого розгортання VPSRento, ви увійшли як root через SSH, а приклад IP — 185.220.101.14 — замініть на свій. Загальний час: близько пів години. Виконуйте кроки по порядку; крок 2 може заблокувати вас, якщо поспішити.

1. Створіть свого sudo-користувача

Робота під root — це як друкарські помилки перетворюються на інциденти. Створіть справжнього користувача, дайте йому sudo і робіть все звідти:

# create the user (you'll set a password — still useful for sudo)
adduser ops

# grant sudo
usermod -aG sudo ops

Все нижче виконується від імені ops , якщо не вказано інше.

2. Тільки SSH-ключі — без паролів, без входу root

Парольна автентифікація — найбільша діра на сервері, відкритому в інтернет. Боти довбають порт 22 списками облікових даних щодня, цілодобово. Ключі роблять цей клас атак неактуальним. На вашій локальній машині:

# generate a keypair if you don't have one (ed25519, no passphrase tradeoff is yours)
ssh-keygen -t ed25519 -C "ops@atlas"

# push the public key to the server
ssh-copy-id [email protected]

Переконайтеся, що можете увійти з ключем у новому термінал — ssh [email protected] — перед зміною конфігурації. Тримайте поточну root-сесію відкритою як запасний вихід. Потім відредагуйте /etc/ssh/sshd_config:

# /etc/ssh/sshd_config — the three lines that matter
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin prohibit-password
# validate the config, then reload (Debian 13 uses ssh.service)
sshd -t && systemctl reload ssh

prohibit-password замість плоского no для root навмисно: root все ще може автентифікуватися ключем з вашої робочої станції, що іноді корисно для відновлення через консоль провайдера — але жоден пароль ніколи не спрацює, ні для кого, нізвідки. Підтвердіть командою sshd -T | grep -E 'passwordauthentication|permitrootlogin'.

3. Файрвол: за замовчуванням заборонено, дозволяйте лише те, що запускаєте

ufw у Debian — це тонкий, розумний шар над nftables. Політика — це безпека; правила — лише винятки з неї:

apt update && apt install -y ufw

ufw default deny incoming
ufw default allow outgoing

# SSH stays open — add this BEFORE enabling
ufw allow 22/tcp comment 'SSH'

# whatever your box actually serves, e.g.:
ufw allow 80/tcp comment 'HTTP'
ufw allow 443/tcp comment 'HTTPS'

ufw enable
ufw status verbose

Кожен відкритий порт повинен мати назву та причину. Якщо ви не можете назвати, для чого порт, — він не отримує правила.

4. fail2ban: сповільніть ботів до мінімуму

З вимкненою парольною автентифікацією брутфорс уже мертвий — але fail2ban тримає ваші логи читабельними і банить сканери, які тицяються в усе інше:

apt install -y fail2ban
# /etc/fail2ban/jail.local
[sshd]
enabled  = true
port     = ssh
maxretry = 5
findtime = 10m
bantime  = 1h
systemctl enable --now fail2ban

# watch it work
fail2ban-client status sshd

5. Автоматичні оновлення безпеки

Невиправлена CVE — більший ризик, ніж перезавантаження. unattended-upgrades у Debian встановлює оновлення безпеки самостійно:

apt install -y unattended-upgrades

# answer Yes to auto-install updates
dpkg-reconfigure -plow unattended-upgrades

Конфігурація за замовчуванням у /etc/apt/apt.conf.d/50unattended-upgrades бере лише з репозиторію security — саме те, що потрібно на сервері: виправлення безпеки автоматично, все інше — коли ви вирішите.

6. Вимкніть те, що не запускаєте

Кожен запущений сервіс — це поверхня атаки, яку доводиться патчити. Подивіться, що реально слухає порти:

# who is listening, on what, as which process
ss -tulpn

# everything enabled at boot
systemctl list-unit-files --state=enabled

# example: you don't run a print server — nobody does
systemctl disable --now cups

Правило: якщо ви не можете сказати, що робить слухач, — з'ясуйте, перш ніж дозволити йому жити. На мінімальному образі VPSRento має бути дуже мало крім sshd і вашого власного застосунку.

7. Рекомендовано, але не обов'язково: панель керування WireGuard

Найсильніша версія безпеки SSH — це SSH, який взагалі не виходить в інтернет. Запустіть WireGuard на сервері, дозвольте SSH лише всередині тунелю, і порт 22 зникне з усіх сканерів у світі:

apt install -y wireguard

# /etc/wireguard/wg0.conf — minimal management tunnel
# [Interface] Address = 10.8.0.1/24, ListenPort = 51820

# open the tunnel, not the shell
ufw allow 51820/udp comment 'WireGuard'
ufw allow in on wg0 to any port 22 proto tcp comment 'SSH via WG'
ufw delete allow 22/tcp

systemctl enable --now wg-quick@wg0

Після цього ви ssh [email protected] через тунель, і публічна IP-адреса відповідає лише на один UDP-порт. Повний посібник з WireGuard — ключі, піри, конфігурації клієнтів, QR-коди для телефону — у супутньому посібнику.

Контрольний список із 10 пунктів

Пройдіться по цій таблиці після кожного нового розгортання та знову після кожного доданого сервісу:

#ПунктДе знаходитьсяПеревірити за допомогою
1Не-root sudo-користувач/etc/passwdid ops
2Авторизація SSH лише за ключамиsshd_configsshd -T | grep passwordauth
3Вхід root за паролем вимкненоsshd_configsshd -T | grep permitrootlogin
4Файрвол: за замовчуванням заборона вхіднихufwufw status verbose
5Відкриті лише зазначені портиufwufw status numbered
6Тюрма fail2ban sshd активнаjail.localfail2ban-client status sshd
7Автоматичні оновлення безпекиaptsystemctl status unattended-upgrades
8Немає незрозумілих слухачівss -tulpn
9Керування через WireGuard (опціонально)wg0.confwg show
10Знімок після посилення захистуДодаток у клієнтській зоні, $1.99/місПослуги → ваш VPS → знімки

Пункт 10 заслуговує на одне речення: спочатку посилюйте захист, потім робіть знімок, у такому порядку — знімок чистого, посиленого сервера є вашим відкатом на випадок будь-якої майбутньої помилки. Щоденні зовнішні знімки — це додаток за $1.99/міс у клієнтській зоні. Тридцять хвилин профілактики, один клік страховки.

Розгорніть чистий сервер і посиліть його самостійно.

Образ Debian 13, повний root за 55 секунд, чиста IP-адреса, перевірена за понад 40 чорними списками. Від $5.99/міс.

Українська