Generic selectors
Exact matches only
Search in title
Search in content
Post Type Selectors

Полная защита SSH на Ubuntu: ключи, Fail2ban и firewall

Linux и DevOps

Если сервер доступен из интернета, SSH становится первой точкой атаки. Боты начинают brute-force через минуты после публикации IP-адреса.

Ниже — production-ready конфигурация SSH для Ubuntu/Debian: аутентификация по ключу, отключение root, запрет паролей, ограничение пользователей, Fail2ban, firewall и автообновления безопасности.

Почему нельзя оставлять SSH по умолчанию

Стандартная конфигурация OpenSSH обычно допускает вход по паролю и root-доступ. Это создаёт постоянную нагрузку из-за brute-force и повышает риск компрометации.

Без hardening сервер получает:

  • непрерывные попытки подбора пароля;
  • увеличение latency при high-load атаках;
  • потенциальный полный контроль над системой.

Решение — минимизация поверхности атаки и переход на ключевую аутентификацию.

Шаг 1. Создание обычного пользователя

Работа по SSH должна выполняться через обычного пользователя с sudo-доступом.

sudo adduser <username>
sudo usermod -aG sudo <username>

Проверка:

id <username>

Шаг 2. Генерация SSH-ключа (ed25519)

Алгоритм ed25519 обеспечивает оптимальный баланс безопасности и производительности.

Linux / macOS

ssh-keygen -t ed25519 -C "device-name"

Windows (PowerShell)

ssh-keygen -t ed25519 -C "device-name"

Создаются файлы:

  • id_ed25519 — приватный ключ;
  • id_ed25519.pub — публичный ключ.

Приватный ключ никогда не передаётся и не копируется на сервер.

Шаг 3. Добавление публичного ключа

На сервере необходимо создать каталог .ssh в домашней директории текущего пользователя и добавить в файл authorized_keys публичный ключ.

mkdir -p ~/.ssh
nano ~/.ssh/authorized_keys

В файл вставляется содержимое id_ed25519.pub одной строкой без переносов.

После добавления ключа необходимо выставить корректные права доступа:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Проверка подключения к серверу:

ssh <username>@<server_ip>

Шаг 4. Отключение root и паролей

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

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

Проверка активной конфигурации

В современных версиях Ubuntu/Debian параметры могут переопределяться файлами из каталога sshd_config.d. Перед изменением конфигурации необходимо проверить, какие значения реально применяются:

sudo sshd -T | grep -E "permitrootlogin|passwordauthentication"

Чтобы увидеть дополнительные конфигурационные файлы:

sudo ls -la /etc/ssh/sshd_config.d/

Файлы читаются в лексикографическом порядке. Настройки из файлов с большим номером (например, 99-*.conf) переопределяют параметры из файлов с меньшим номером (например, 60-cloudimg-settings.conf).

Применение безопасных параметров:

sudo sed -i \
-e 's/^#\?PermitRootLogin.*/PermitRootLogin no/' \
-e 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' \
-e 's/^#\?PubkeyAuthentication.*/PubkeyAuthentication yes/' \
-e 's/^#\?ChallengeResponseAuthentication.*/ChallengeResponseAuthentication no/' \
/etc/ssh/sshd_config

Ограничение доступа конкретным пользователем:

echo "AllowUsers <username>" | sudo tee -a /etc/ssh/sshd_config

Перезапуск службы:

sudo systemctl restart ssh

Проверка активных параметров:

sudo sshd -T | grep -E "permitrootlogin|passwordauthentication"

Парольную аутентификацию отключают только после проверки входа по ключу.

Шаг 5. Настройка firewall (UFW)

UFW снижает поверхность атаки и ограничивает сетевой доступ.

sudo apt install ufw -y
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp
sudo ufw limit 22/tcp
sudo ufw enable

Проверка статуса:

sudo ufw status

Параметр limit активирует rate limiting для защиты от частых попыток подключения.

Шаг 6. Fail2ban для защиты от brute-force

Fail2ban анализирует логи и блокирует IP-адреса при превышении порога ошибок аутентификации.

sudo apt update
sudo apt install fail2ban -y

Создание локальной конфигурации:

sudo nano /etc/fail2ban/jail.local
[DEFAULT]
bantime = 24h
findtime = 10m
maxretry = 3
backend = systemd

[sshd]
enabled = true

Перезапуск:

sudo systemctl restart fail2ban

Проверка статуса:

sudo fail2ban-client status

Шаг 7. Автоматические обновления безопасности

Security-патчи должны устанавливаться автоматически для снижения времени уязвимости.

sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure unattended-upgrades

Механизм устанавливает обновления из security-репозиториев без ручного вмешательства.

Финальная secure-конфигурация

  • Root-доступ по SSH отключён;
  • Парольная аутентификация отключена;
  • Вход только по ed25519-ключу;
  • Доступ ограничен конкретным пользователем;
  • Firewall активирован;
  • Fail2ban блокирует brute-force;
  • Автообновления безопасности включены.

Такая конфигурация соответствует best practices 2026 года для публичных VPS и production-инфраструктуры.

Частые ошибки

  • Отключение пароля до проверки ключа;
  • Работа через root;
  • Неверные права на каталог .ssh;
  • Передача приватного ключа третьим лицам;
  • Отсутствие firewall.

Заключение

Hardening SSH занимает менее 20 минут, но радикально снижает риск компрометации сервера. Ключевая аутентификация, отключение root, Fail2ban и firewall формируют минимально необходимый уровень защиты для любой публичной Linux-инфраструктуры.

Оцените статью
ctrllife.ru
Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x