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

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

33 просмотров

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

Secure Shell (SSH) — это основа удаленного управления практически для любого Linux-сервера. Несмотря на свою невероятную мощь и общую безопасность «из коробки», SSH также является основной мишенью для злоумышленников, пытающихся получить несанкционированный доступ посредством атак методом перебора (brute-force), словарных атак и подстановки учетных данных (credential stuffing).

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

В этом руководстве описаны основные, практические шаги по обеспечению безопасности службы SSH в любом дистрибутиве Linux, с акцентом на основной конфигурационный файл: /etc/ssh/sshd_config.


Предварительное требование: Резервное копирование конфигурации

Прежде чем вносить какие-либо изменения в конфигурацию демона SSH (sshd_config), крайне важно создать резервную копию. Неправильная конфигурация может привести к потере доступа к вашему серверу. Всегда тщательно проверяйте изменения.

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

После редактирования файла проверьте синтаксис перед перезапуском службы:

sudo sshd -t

Если проверка прошла успешно, вы можете безопасно перезапустить службу SSH (команда зависит от дистрибутива):

# Для систем, использующих systemd (большинство современных дистрибутивов)
sudo systemctl restart sshd

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

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

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

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

# Было:
# PermitRootLogin yes

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

Важное примечание

Убедитесь, что вы создали и настроили как минимум одну стандартную учетную запись пользователя с привилегиями sudo до отключения входа для root. В противном случае вы потеряете административный доступ.

2. Внедрение обязательной аутентификации по ключам

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

A. Генерация и установка ключей

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

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

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

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

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

Лучшая практика: Используйте надежные типы ключей, такие как Ed25519 или RSA 4096-бит. Всегда защищайте приватный ключ надежной кодовой фразой.

3. Смена стандартного порта SSH (Эшелонированная защита)

Стандартный порт SSH (TCP-порт 22) постоянно сканируется автоматизированными ботами. Смена порта на высокое, нестандартное число (например, 2222, 22222 или 30000+) значительно уменьшает количество шума в журналах вашего сервера и делает вас невидимым для случайных сканеров.

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

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

# Было:
# Port 22

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

Предупреждение: Требуется корректировка брандмауэра

Если вы измените порт, вы обязаны обновить свой брандмауэр (например, iptables, firewalld или AWS Security Groups), чтобы разрешить трафик на новом порту. Невыполнение этого требования приведет к немедленной потере соединения.

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

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

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

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

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

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

  1. Разрешить определенным пользователям:
    config AllowUsers alice bob
  2. Разрешить определенным группам:
    config AllowGroups sshaccess admins

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

5. Обеспечение использования более строгого протокола и шифров

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

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

Проверьте, что старые, небезопасные протоколы отключены:

Protocol 2

# Запретить небезопасные устаревшие методы аутентификации
HostbasedAuthentication no
IgnoreRhosts yes

Хотя современные реализации SSH часто настроены хорошо по умолчанию, явное указание сильных шифров и MAC-кодов может предотвратить атаки с понижением (downgrading).

Рекомендуемый минимальный набор включает:

Ciphers [email protected],[email protected]
MACs hmac-sha2-512,hmac-sha2-256

6. Внедрение ограничения скорости и обнаружения вторжений (Fail2Ban)

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

Установка и настройка (Общие шаги)

  1. Установите Fail2Ban:
    ```bash
    # Debian/Ubuntu
    sudo apt update && sudo apt install fail2ban

    RHEL/CentOS/Fedora

    sudo dnf install fail2ban
    `` 2. **Настройте «тюрьму» (Jail) SSH:** Fail2Ban использует конфигурации, называемые «тюрьмами». Стандартная тюрьмаsshdочень эффективна для мониторинга/var/log/auth.log` (или эквивалентного) на предмет повторяющихся сбоев службы SSH и автоматического применения временных блокировок.

  2. Убедитесь, что служба запущена:
    bash sudo systemctl enable fail2ban sudo systemctl start fail2ban

Fail2Ban значительно снижает эффективность автоматизированных атак методом перебора и считается обязательным для серверов, доступных из Интернета.

7. Другие важные директивы для усиления безопасности SSH

Эти незначительные настройки помогают управлять сеансами и уменьшают потенциальное окно атаки:

Директива Рекомендуемое значение Назначение
ClientAliveInterval 300 Отправляет нулевой пакет каждые 300 секунд (5 минут) для поддержания активности сеанса.
ClientAliveCountMax 3 Максимальное количество неудачных проверок «живости» перед отключением (всего 15 минут простоя).
UsePAM yes Включает PAM (Pluggable Authentication Modules) для дополнительных политик безопасности локальной системы.
PermitEmptyPasswords no Запрещает вход пользователям с пустыми паролями (по умолчанию должно быть no).

Сводная таблица мер по усилению безопасности SSH

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

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

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