Лучшие практики безопасности SSH: Защита вашего сервера и клиента

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

Лучшие практики безопасности SSH: Укрепление сервера и клиента

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

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

Укрепление безопасности на стороне сервера

Конфигурация вашего SSH-сервера (sshd_config) устанавливает правила того, как клиенты подключаются и аутентифицируются.

1. Отключите аутентификацию по паролю

Аутентификация по паролю по своей сути уязвима для атак перебором. Замена ее на аутентификацию по SSH-ключам — одно из самых эффективных улучшений безопасности, которое вы можете сделать.

  • Почему: SSH-ключи гораздо сложнее паролей и их невозможно легко угадать или взломать методами перебора. Они обеспечивают гораздо более сильную форму аутентификации.

  • Как: Отредактируйте файл sshd_config (обычно находится в /etc/ssh/sshd_config) и установите PasswordAuthentication no. После внесения изменений перезапустите службу SSH:

    sudo sshd -t
    sudo systemctl reload sshd
    

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

В некоторых дистрибутивах служба называется ssh, а не sshd. Используйте имя службы, предоставленное вашей системой, и держите существующий сеанс открытым при тестировании нового входа.

2. Относитесь к смене порта как к снижению шума

Изменение порта SSH по умолчанию с 22 может уменьшить шум автоматического сканирования. Это не замена ключам, исправлениям и контролю доступа.

  • Как: В sshd_config измените директиву Port. Например, чтобы использовать порт 2222:

    Port 2222
    

    Не забудьте обновить правила брандмауэра, чтобы разрешить трафик на новом порту, и указать порт при подключении с вашего клиента:

    ssh -p 2222 user@your_server_ip
    

3. Ограничьте доступ пользователей и групп

Контролируйте, каким пользователям и группам разрешен вход через SSH.

  • AllowUsers и AllowGroups: Используйте эти директивы в sshd_config, чтобы явно указать, кто может подключаться.
    AllowUsers admin user1
    AllowGroups sshusers
    
  • DenyUsers и DenyGroups: Альтернативно используйте их для блокировки определенных пользователей или групп.

4. Отключите вход root

Прямой вход root через SSH следует отключить, чтобы злоумышленники не могли сразу нацелиться на самую мощную учетную запись. Вместо этого пользователи должны входить под своими учетными записями и использовать sudo для административных задач.

  • Как: Установите PermitRootLogin no в sshd_config.

5. Настройте тайм-аут бездействия и keepalive

Предотвратите бесконечное оставление активных SSH-сеансов без присмотра.

  • ClientAliveInterval и ClientAliveCountMax: Эти настройки на стороне сервера отправляют нулевые пакеты клиенту через регулярные промежутки времени, чтобы проверить, живо ли соединение. Если клиент не отвечает после ClientAliveCountMax попыток, сервер разрывает сеанс.
    ClientAliveInterval 300  # Отправлять пакет каждые 5 минут
    ClientAliveCountMax 2    # Отключить после 2 пропущенных ответов (10 минут)
    

6. Укрепите ключи хоста

Убедитесь, что ключи хоста вашего сервера защищены и правильно управляются.

  • Разрешения: Проверьте, что файлы ключей хоста (например, /etc/ssh/ssh_host_rsa_key) имеют ограничительные разрешения (например, 600) и принадлежат root.
  • Алгоритмы: Предпочитайте современные ключи хоста, такие как Ed25519, если ваши клиенты их поддерживают. Не удаляйте существующие ключи хоста без планирования, потому что клиенты увидят это как изменение идентичности хоста.
  • Ротация: Ротируйте ключи хоста обдуманно и сообщайте новые отпечатки через доверенный канал.

Лучшие практики безопасности на стороне клиента

Защита вашего клиентского компьютера и ваших SSH-ключей так же важна, как и укрепление сервера.

1. Защитите свои закрытые ключи

Ваш закрытый SSH-ключ — это шлюз к вашим серверам. Относитесь к нему с максимальной осторожностью.

  • Разрешения: Убедитесь, что ваш файл закрытого ключа (например, ~/.ssh/id_rsa) имеет строгие разрешения (например, 600 или 400), чтобы только вы могли его читать.
    chmod 600 ~/.ssh/id_rsa
    
  • Парольные фразы: Всегда используйте надежную парольную фразу для шифрования вашего закрытого ключа. Это добавляет дополнительный уровень безопасности, требуя парольную фразу, даже если файл ключа скомпрометирован.
  • Избегайте копирования: Не делитесь своим закрытым ключом ни с кем и не храните его в небезопасных местах.

2. Используйте пересылку SSH-агента с осторожностью

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

  • Включить: ssh -A user@your_server_ip
  • Лучшая практика: Отключите пересылку агента по умолчанию. Используйте ее только для хостов, которым вы доверяете, и предпочитайте альтернативы, такие как ключи развертывания, bastion ProxyJump или краткосрочные учетные данные, если они подходят для вашего рабочего процесса.

3. Проверяйте отпечатки ключей хоста

Когда вы подключаетесь к SSH-серверу в первый раз, ваш клиент предлагает вам проверить отпечаток ключа хоста сервера. Это помогает предотвратить атаки "человек посередине".

  • Как: Всегда проверяйте отпечаток по доверенному источнику, такому как ваша облачная консоль, журналы подготовки или администратор. Если отпечаток неожиданно изменился, остановитесь и проведите расследование, прежде чем принять его.

4. Поддерживайте клиентское ПО SSH в актуальном состоянии

Убедитесь, что ваше клиентское ПО SSH (OpenSSH, PuTTY и т.д.) обновляется, чтобы получать преимущества от последних исправлений безопасности и функций.

Расширенные меры безопасности

Помимо основных шагов, рассмотрите эти продвинутые методы:

1. Многофакторная аутентификация

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

  • Инструменты: Модули PAM, Duo, приложения-аутентификаторы и аппаратные ключи безопасности могут быть частью дизайна SSH MFA.

2. Fail2ban

Fail2ban сканирует журналы на предмет повторяющихся неудачных попыток аутентификации и может добавлять временные блокировки брандмауэра для исходного IP-адреса. Пути к журналам различаются в зависимости от дистрибутива; Debian и Ubuntu обычно используют /var/log/auth.log, в то время как многие системы семейства RHEL ведут журнал через journald или /var/log/secure.

  • Установка: Обычно доступен через менеджеры пакетов (sudo apt install fail2ban или sudo yum install fail2ban).
  • Конфигурация: Настройте jails в /etc/fail2ban/jail.local для мониторинга журналов SSH и определения времени блокировки и пороговых значений.

3. Конфигурация брандмауэра

Используйте брандмауэр (например, ufw, firewalld или iptables), чтобы ограничить доступ к вашему SSH-порту (по умолчанию или пользовательскому) только с доверенных IP-адресов или диапазонов.

  • Пример (ufw):
    sudo ufw allow from trusted_ip to any port 22
    sudo ufw enable
    

Вывод

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