Лучшие практики по усилению безопасности SSH на серверах Linux

Немедленно обезопасьте свой сервер Linux, освоив эти важные методы усиления безопасности SSH. Это руководство от экспертов содержит практические шаги, сосредоточенные на изменениях конфигурации в файле `sshd_config`. Узнайте, как отключить вход для пользователя root с высоким риском, внедрить обязательную аутентификацию по ключу для устранения слабых паролей, изменить порт по умолчанию и установить Fail2Ban для эффективного ограничения скорости запросов при атаках методом перебора. Защитите свою систему, превратив SSH в надежный и безопасный канал.

Лучшие практики усиления безопасности SSH на серверах Linux

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

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

Сначала сделайте резервную копию и протестируйте конфигурацию

Перед редактированием /etc/ssh/sshd_config сделайте резервную копию. Опечатка может заблокировать вам доступ к серверу.

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak_$(date +%F)

После редактирования проверьте синтаксис:

sudo sshd -t

Если тест пройден, перезагрузите или перезапустите SSH. Имя службы обычно sshd в системах на RHEL и ssh в Debian/Ubuntu:

sudo systemctl restart sshd
# или
sudo systemctl restart ssh

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

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

Шаг конфигурации

Откройте /etc/ssh/sshd_config и найдите директиву PermitRootLogin. Измените ее значение на no.

# До:
# PermitRootLogin yes

# После (Лучшая практика):
PermitRootLogin no

Перед перезапуском SSH убедитесь, что вы можете войти как обычный пользователь с привилегиями sudo.

2. Требуйте аутентификацию по ключам

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

Создание и установка ключей

  1. Создайте пару ключей на вашей локальной машине:
    ssh-keygen -t ed25519 -C "[email protected]"
    
  2. Скопируйте открытый ключ на сервер:
    ssh-copy-id -i ~/.ssh/id_ed25519 user@your_server_ip
    

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

Как только вы убедитесь, что можете успешно войти с помощью ключа SSH, полностью отключите аутентификацию по паролю.

# Отключить пароли
PasswordAuthentication no

# Убедиться, что ключи включены
PubkeyAuthentication yes

Ed25519 — хороший выбор по умолчанию для новых ключей. Если вам нужен RSA для совместимости со старыми системами, используйте большой ключ, например 4096 бит.

3. Рассмотрите возможность изменения порта SSH по умолчанию

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

Шаг конфигурации

В /etc/ssh/sshd_config измените директиву Port:

# До:
# Port 22

# После (Пример нестандартного порта):
Port 22222

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

Пример с использованием firewalld (CentOS/RHEL):

sudo firewall-cmd --permanent --add-port=22222/tcp
sudo firewall-cmd --reload

4. Ограничьте доступ для конкретных пользователей и групп

Если только небольшой набор людей должен использовать SSH, укажите это в sshd_config. Это блокирует забытые локальные учетные записи от превращения в удаленные точки входа.

Директивы конфигурации

Используйте одну или обе следующие директивы в sshd_config:

  1. Разрешить конкретных пользователей:
    AllowUsers alice bob
    
  2. Разрешить конкретные группы:
    AllowGroups sshaccess admins
    

Если эти директивы присутствуют, любой пользователь или группа, не указанные явно, будут отклонены.

5. Сохраняйте современные настройки SSH по умолчанию и отключайте устаревшие методы

Текущие версии OpenSSH уже используют протокол SSH 2; поддержка старого протокола 1 удалена из современных OpenSSH. Избегайте копирования старых фрагментов усиления безопасности, которые включают неподдерживаемые директивы Protocol или устаревший список шифров. Они могут сломать SSH после обновления.

Сосредоточьтесь на отключении устаревших механизмов доверия, если вы не знаете, что они вам нужны:

HostbasedAuthentication no
IgnoreRhosts yes
PermitEmptyPasswords no

Если ваша организация требует пользовательской политики шифров, MAC или обмена ключами, проверьте, что поддерживает ваш установленный сервер, прежде чем изменять его:

sshd -T | grep -E '^(ciphers|macs|kexalgorithms) '

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

6. Добавьте ограничение скорости с помощью Fail2Ban

Даже с аутентификацией по ключам повторные попытки тратят ресурсы и засоряют журналы. Fail2Ban отслеживает журналы аутентификации и добавляет временные блокировки брандмауэра после повторных неудач.

  1. Установите Fail2Ban:

    # Debian/Ubuntu
    sudo apt update && sudo apt install fail2ban
    
    # RHEL/CentOS/Fedora
    sudo dnf install fail2ban
    
  2. Включите sshd jail. Многие системы поставляются с конфигурацией по умолчанию, но вы должны поместить локальные переопределения в /etc/fail2ban/jail.local или файл в /etc/fail2ban/jail.d/.

    [sshd]
    enabled = true
    port = 22222
    maxretry = 5
    bantime = 1h
    
  3. Запустите службу:

    sudo systemctl enable --now fail2ban
    

Если вы изменили порт SSH, настройте jail Fail2Ban на новый порт.

7. Настройте параметры сеанса и аутентификации

Эти настройки помогают закрыть неактивные сеансы и удалить слабые пути аутентификации:

Директива Рекомендуемое значение Назначение
ClientAliveInterval 300 Отправляет проверку активности на стороне сервера каждые 300 секунд.
ClientAliveCountMax 3 Отключает после трех безответных проверок.
UsePAM yes Включает Pluggable Authentication Modules (PAM) для дополнительных политик безопасности локальной системы.
PermitEmptyPasswords no Блокирует вход учетных записей с пустыми паролями.
MaxAuthTries 3 Ограничивает повторные попытки аутентификации на одно соединение.
X11Forwarding no Отключает перенаправление X11, если вы его действительно не используете.

Контрольный список усиления безопасности

Используйте этот контрольный список, чтобы убедиться, что ваш сервер соответствует базовым стандартам усиления безопасности SSH:

  1. Сделайте резервную копию sshd_config перед внесением изменений.
  2. Установите PermitRootLogin no.
  3. Установите PasswordAuthentication no (после настройки ключей).
  4. Измените Port на нестандартное значение.
  5. Обновите брандмауэр, чтобы разрешить новый порт.
  6. Используйте AllowUsers или AllowGroups для ограничения доступа.
  7. Отключите устаревшие методы доверия, такие как HostbasedAuthentication.
  8. Установите и настройте Fail2Ban.
  9. Проверьте конфигурацию с помощью sshd -t перед перезапуском.

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