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-ключ перебрать практически невозможно, если приватный ключ хранится безопасно.

Создайте 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: