Защита SSH на Ubuntu: ключи, root login, Fail2Ban и разумный hardening

Введение в безопасность SSH на Ubuntu​


SSH (Secure Shell) — это протокол удаленного управления сервером, обеспечивающий защищенное соединение между клиентом и сервером. На Ubuntu серверах SSH обычно реализуется через демон sshd, который настраивается через файл /etc/ssh/sshd_config. Несмотря на то, что SSH построен на надежных криптографических принципах, его неправильная настройка может создать уязвимости, позволяющие злоумышленникам получить доступ к системе.

Эта статья охватывает комплексные меры защиты SSH на Ubuntu, включая управление ключами, настройку аутентификации, ограничения входа и интеграцию с системами защиты, такими как Fail2Ban.

Основные компоненты SSH на Ubuntu​


На Ubuntu серверах SSH реализуется через пакет openssh-server, который включает демон sshd и клиентские утилиты. Конфигурация демона осуществляется через файл /etc/ssh/sshd_config. Этот файл поддерживает множество директив, позволяющих настроить поведение SSH-сервера в зависимости от требований безопасности.

Файл /etc/ssh/sshd_config может включать дополнительные конфигурационные файлы из директории /etc/ssh/sshd_config.d/. Это позволяет разбивать конфигурацию на части и управлять отдельными аспектами безопасности.

Управление аутентификацией через ключи​


Использование аутентификации по ключам — один из важнейших способов повышения безопасности SSH. В отличие от пароля, ключи не подвержены атакам типа "brute-force" и могут быть защищены паролем.

Для настройки аутентификации по ключам необходимо:

  1. Генерировать пару ключей на клиенте с помощью ssh-keygen.
  2. Копировать открытый ключ на сервер в файл ~/.ssh/authorized_keys.
  3. Отключить аутентификацию по паролю в файле /etc/ssh/sshd_config.

Примеры директив для настройки аутентификации:

Код:
PubkeyAuthentication yes
PasswordAuthentication no
PermitRootLogin no

Важно: даже если PasswordAuthentication выключена, PubkeyAuthentication должен быть включен, чтобы разрешить аутентификацию по ключам.

Отключение входа под root​


Включение входа под пользователем root через SSH считается плохой практикой. Это делает сервер более уязвимым к атакам типа "brute-force", поскольку root — это самый привилегированный пользователь.

Для отключения входа под root в файле /etc/ssh/sshd_config необходимо установить:

Код:
PermitRootLogin no

Эта директива запрещает вход под root через SSH, но не влияет на другие способы входа, такие как sudo.

Использование Fail2Ban для защиты SSH​


Fail2Ban — это инструмент, который автоматически блокирует IP-адреса, которые пытаются взломать SSH. Он следит за журналами и применяет правила, чтобы ограничить количество попыток входа.

Для установки Fail2Ban на Ubuntu:

Bash:
sudo apt install fail2ban

После установки необходимо настроить файл /etc/fail2ban/jail.conf или создать собственный файл в /etc/fail2ban/jail.local.

Пример конфигурации для SSH:

Код:
[sshd]
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
ignoreip = 127.0.0.1/8 ::1

Этот конфигурационный блок:

  • Ограничивает количество попыток входа до 3.
  • Блокирует IP на 1 час после превышения лимита.
  • Исключает локальные адреса из блокировки.

Настройка SSH для устойчивости к атакам​


Для повышения безопасности SSH рекомендуется изменить стандартные параметры:

  1. Смена порта SSH

По умолчанию SSH работает на порту 22. Смена порта на нестандартный может снизить частоту автоматизированных атак.

Пример:

Код:
Port 2222

  • Ограничение времени бездействия

Директива ClientAliveInterval позволяет завершать неактивные соединения, что снижает нагрузку на сервер и предотвращает использование устаревших сессий.

Пример:

Код:
ClientAliveInterval 300
ClientAliveCountMax 3

Это означает, что соединение будет автоматически закрываться, если клиент не отправляет данные в течение 5 минут (300 секунд).

  • Ограничение количества попыток аутентификации

Директива MaxAuthTries позволяет ограничить количество попыток аутентификации:

Код:
MaxAuthTries 3

Настройка шифрования и алгоритмов​


SSH поддерживает различные алгоритмы шифрования, хэширования и обмена ключами. Для повышения безопасности рекомендуется использовать современные алгоритмы.

Примеры директив:

Код:
Ciphers [email protected],[email protected],[email protected],aes256-ctr,aes128-ctr
MACs [email protected],[email protected],[email protected]
KexAlgorithms [email protected],diffie-hellman-group-exchange-sha256
HostKeyAlgorithms [email protected],[email protected],ssh-ed25519,ssh-rsa

Эти директивы:

  • Задают список допустимых алгоритмов шифрования.
  • Выбирают безопасные алгоритмы хэширования.
  • Указывают безопасные алгоритмы обмена ключами.

Работа с пользовательскими правами и ограничениями​


Для управления доступом к SSH можно использовать директивы AllowUsers и DenyUsers.

Пример:

Код:
AllowUsers alice bob
DenyUsers evil_user

Это позволяет ограничить доступ к SSH только определённым пользователям.

Использование chroot для изоляции пользователей​


Директива ChrootDirectory позволяет изолировать пользователя в отдельную директорию, что ограничивает его доступ к системным файлам.

Пример:

Код:
ChrootDirectory /home/%u

Для работы ChrootDirectory необходимо:

  1. Создать необходимые файлы и устройства внутри директории.
  2. Убедиться, что права доступа к директории корректны.
  3. Запустить демон sshd с правами root.

Логирование и мониторинг SSH​


Для мониторинга активности SSH рекомендуется использовать логи в /var/log/auth.log и /var/log/syslog.

Для повышения безопасности рекомендуется:

  1. Включить подробное логирование в /etc/ssh/sshd_config:

Код:
LogLevel VERBOSE

  • Использовать инструменты мониторинга, такие как auditd, для отслеживания действий пользователей.

Безопасные практики настройки SSH​


  1. Не использовать стандартные порты

Изменение порта SSH на нестандартный (например, 2222) снижает частоту автоматизированных атак.

  • Использовать только аутентификацию по ключам

Отключение аутентификации по паролю устраняет риск взлома с использованием слабых паролей.

  • Ограничивать количество попыток входа

Директива MaxAuthTries помогает противостоять атакам типа "brute-force".

  • Использовать современные алгоритмы шифрования

Использование современных алгоритмов шифрования повышает безопасность соединений.

  • Включать Fail2Ban

Fail2Ban автоматически блокирует IP-адреса, которые пытаются взломать SSH.

Проверка конфигурации SSH​


После внесения изменений в файл /etc/ssh/sshd_config необходимо проверить его корректность:

Bash:
sudo sshd -t

Если конфигурация корректна, команда не выведет ошибок. После этого необходимо перезапустить демон sshd:

Bash:
sudo systemctl restart sshd

Обновление и безопасность​


Регулярное обновление пакетов openssh-server и openssh-client помогает устранять уязвимости, найденные в прошлом.

Для обновления:

Bash:
sudo apt update && sudo apt upgrade

Заключение​


Настройка SSH на Ubuntu — это комплексный процесс, включающий управление аутентификацией, ограничения доступа, шифрование и мониторинг. Использование современных алгоритмов, отключение входа под root, применение Fail2Ban и другие меры безопасности позволяют значительно повысить уровень защиты сервера.

Следуя рекомендациям, описанным в этой статье, можно значительно снизить риски, связанные с использованием SSH на Ubuntu.

Чек-лист безопасности SSH​


  • [ ] Изменить стандартный порт SSH на нестандартный
  • [ ] Отключить вход под root через SSH
  • [ ] Отключить аутентификацию по паролю
  • [ ] Включить аутентификацию по ключам
  • [ ] Установить MaxAuthTries на 3
  • [ ] Включить ClientAliveInterval и ClientAliveCountMax
  • [ ] Использовать современные алгоритмы шифрования
  • [ ] Установить Fail2Ban
  • [ ] Проверить конфигурацию через sshd -t
  • [ ] Перезапустить sshd после изменений
  • [ ] Обновить пакеты openssh-server и openssh-client
  • [ ] Включить подробное логирование
  • [ ] Ограничить доступ по IP через AllowUsers/DenyUsers
  • [ ] Настроить ChrootDirectory при необходимости

Источники​


 
Назад
Верх Низ