Лучшие практики по усилению безопасности 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 сложнее угадать, их легче менять, и они безопаснее для повседневного администрирования, если вы защищаете закрытый ключ парольной фразой.
Создание и установка ключей
- Создайте пару ключей на вашей локальной машине:
ssh-keygen -t ed25519 -C "[email protected]" - Скопируйте открытый ключ на сервер:
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:
- Разрешить конкретных пользователей:
AllowUsers alice bob - Разрешить конкретные группы:
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 отслеживает журналы аутентификации и добавляет временные блокировки брандмауэра после повторных неудач.
Установите Fail2Ban:
# Debian/Ubuntu sudo apt update && sudo apt install fail2ban # RHEL/CentOS/Fedora sudo dnf install fail2banВключите
sshdjail. Многие системы поставляются с конфигурацией по умолчанию, но вы должны поместить локальные переопределения в/etc/fail2ban/jail.localили файл в/etc/fail2ban/jail.d/.[sshd] enabled = true port = 22222 maxretry = 5 bantime = 1hЗапустите службу:
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:
- Сделайте резервную копию
sshd_configперед внесением изменений. - Установите
PermitRootLogin no. - Установите
PasswordAuthentication no(после настройки ключей). - Измените
Portна нестандартное значение. - Обновите брандмауэр, чтобы разрешить новый порт.
- Используйте
AllowUsersилиAllowGroupsдля ограничения доступа. - Отключите устаревшие методы доверия, такие как
HostbasedAuthentication. - Установите и настройте Fail2Ban.
- Проверьте конфигурацию с помощью
sshd -tперед перезапуском.
Усиление безопасности SSH лучше всего работает как многоуровневая защита. Ключи останавливают подбор паролей, ограничения пользователей уменьшают количество тех, кто может подключиться, правила брандмауэра ограничивают, откуда поступают соединения, а Fail2Ban замедляет повторные попытки. Держите один работающий сеанс открытым во время тестирования, затем задокументируйте новый порт и метод входа для всех, кто управляет сервером.