SSH — основний спосіб віддаленого керування Linux-сервером. Через нього адміністратор підключається до VPS або dedicated server, виконує налаштування, оновлює систему, перевіряє логи та керує сервісами.

Через це SSH майже завжди стає однією з перших цілей для автоматичних атак. Боти сканують інтернет, знаходять відкритий порт 22 і починають підбирати логіни та паролі. Така атака називається brute force — перебір паролів.

Навіть якщо пароль складний, постійні спроби входу створюють зайве навантаження, засмічують логи та підвищують ризик злому сервера. Якщо використовується слабкий пароль, стандартний логін root і відкритий SSH-порт, сервер може бути зламаний автоматично.

Зазвичай атака виглядає так:

Failed password for root from 185.XX.XX.XX port 54321 ssh2
Failed password for admin from 185.XX.XX.XX port 54322 ssh2
Failed password for test from 185.XX.XX.XX port 54323 ssh2

У цій статті розглянемо 5 основних рішень, які допомагають захистити SSH від brute force атак.

1. Використовуйте SSH-ключі та вимкніть вхід за паролем

Найважливіший крок — відмовитися від входу за паролем і використовувати SSH-ключі. Пароль можна підібрати, особливо якщо він простий або вже був скомпрометований. SSH-ключ практично неможливо перебрати звичайною brute force атакою, якщо приватний ключ зберігається безпечно.

Створіть SSH-ключ на локальному комп’ютері:

ssh-keygen -t ed25519 -C “admin@example.com”

Додайте публічний ключ на сервер:

ssh-copy-id user@SERVER_IP

Або вручну додайте вміст публічного ключа у файл:

~/.ssh/authorized_keys

Важливо
Перед вимкненням входу за паролем обов’язково перевірте, що вхід за SSH-ключем уже працює.

Потім відкрийте конфігурацію SSH:

sudo nano /etc/ssh/sshd_config

Вкажіть:

PubkeyAuthentication yes
PasswordAuthentication no
KbdInteractiveAuthentication no

Перевірте конфігурацію:

sudo sshd -t

Якщо помилок немає, перезавантажте SSH:

sudo systemctl reload ssh

або:

sudo systemctl reload sshd

Назва сервісу залежить від дистрибутива.

Не закривайте поточну SSH-сесію, доки не перевірите вхід у новій вкладці термінала.

2. Забороніть вхід під root

Багато brute force атак насамперед пробують логін root, тому що він існує майже на кожному Linux-сервері. Тому вхід під root через SSH краще вимкнути, а для адміністрування використовувати окремого користувача з правами sudo.

Створіть окремого користувача:

sudo adduser adminuser
sudo usermod -aG sudo adminuser

Перевірте вхід під цим користувачем:

ssh adminuser@SERVER_IP

Перевірте права sudo:

sudo whoami

Очікувана відповідь:

root

Після цього в конфігурації SSH вкажіть:

PermitRootLogin no

І застосуйте зміни:

sudo sshd -t
sudo systemctl reload ssh

Такий підхід знижує ризик автоматичного підбору доступу, тому що зловмиснику потрібно знати не тільки ключ, а й ім’я окремого користувача.

3. Обмежте кількість спроб входу

Навіть якщо вхід за паролем вимкнено, корисно обмежити кількість спроб авторизації. Це допомагає швидше розривати підозрілі підключення та зменшує навантаження від автоматичних атак.

Відкрийте конфігурацію SSH:

sudo nano /etc/ssh/sshd_config

Додайте або змініть параметри:

MaxAuthTries 3
LoginGraceTime 30

Що це означає:

MaxAuthTries 3     — не більше 3 спроб автентифікації за одне підключення
LoginGraceTime 30  — 30 секунд на успішний вхід

Після зміни перевірте конфігурацію:

sudo sshd -t

Перезавантажте SSH:

sudo systemctl reload ssh

Рекомендація
Не варто ставити занадто маленькі значення, якщо до сервера підключаються кілька адміністраторів або використовуються автоматизовані SSH-підключення.

4. Дозвольте SSH тільки з довірених IP або через VPN

Якщо SSH відкритий для всього інтернету, його постійно скануватимуть боти. Безпечніший варіант — дозволити підключення тільки з довірених IP-адрес.

Приклад для UFW:

sudo ufw allow from YOUR_TRUSTED_IP to any port 22 proto tcp
sudo ufw deny 22/tcp
sudo ufw enable

Перевірити правила:

sudo ufw status numbered

Приклад логіки:

Allow SSH from trusted IP
Deny SSH from all other IPs

Якщо в адміністраторів немає фіксованих IP, краще використовувати VPN. У такому випадку SSH не публікується напряму в інтернет, а доступний тільки з внутрішньої VPN-мережі.

Цей варіант особливо добре підходить для production-серверів, Proxmox-інфраструктури, OPNsense, внутрішніх сервісів, баз даних і корпоративних систем.

5. Встановіть Fail2Ban для автоматичного блокування атакуючих IP

Fail2Ban — один із найпопулярніших інструментів для захисту SSH від brute force атак. Він аналізує логи, знаходить повторювані невдалі спроби входу та тимчасово блокує IP-адресу атакуючого через firewall.

Встановлення на Debian/Ubuntu:

sudo apt update
sudo apt install fail2ban -y

Створіть конфігураційний файл для SSH:

sudo nano /etc/fail2ban/jail.d/sshd.local

Приклад конфігурації:

[sshd]
enabled = true
port = ssh
filter = sshd
backend = systemd
maxretry = 5
findtime = 10m
bantime = 1h

Що означають параметри:

maxretry = 5    — заблокувати після 5 невдалих спроб
findtime = 10m  — враховувати спроби за останні 10 хвилин
bantime = 1h    — заблокувати IP на 1 годину

Запустіть Fail2Ban:

sudo systemctl enable --now fail2ban
sudo systemctl restart fail2ban

Перевірте статус:

sudo fail2ban-client status
sudo fail2ban-client status sshd

Якщо все працює, у статусі буде видно кількість заблокованих IP.

Також замість Fail2Ban можна розглянути CrowdSec.

Під час стандартного встановлення CrowdSec зазвичай додає базові Linux/SSH-колекції, а після встановлення firewall bouncer уже може блокувати IP, які спрацьовують на SSH brute force.

Тобто зв’язка CrowdSec + bouncer не тільки бачить підозрілі SSH-спроби в логах, а й застосовує блокування через firewall.

CrowdSec також можна розширити для захисту інших сервісів: Nginx, Apache, Traefik, Docker або панелей керування.

Важливо: сам CrowdSec engine відповідає за виявлення, а bouncer — за реальне блокування IP.

Підсумок

Захист SSH від brute force атак не має обмежуватися одним налаштуванням. Найкращий результат дає комбінація кількох заходів:

  • SSH keys
  • No password login
  • No root login
  • Limited login attempts
  • Firewall allowlist or VPN
  • Fail2Ban

Для тестового VPS часто достатньо SSH-ключів, вимкнення пароля та Fail2Ban. Для production-сервера краще використовувати суворіший підхід: закрити SSH від усього інтернету, дозволити доступ тільки з довірених IP або через VPN і регулярно перевіряти стан захисту.

Такий підхід значно знижує ризик злому та робить сервер стійкішим до автоматичних атак.

Tagged: