Блог "Дети ОИТа"
/поиск

Базовый чек-лист SSH: ключи, конфиги и аудит

Компактный чек-лист по SSH: ключи Ed25519, безопасная конфигурация sshd, клиентские конфиги, jump-хосты и аудит.

Базовый чек-лист SSH: ключи, конфиги и аудит

Введение

SSH — основной канал управления Linux-инфраструктурой. Ниже — компактный чек-лист для приведения хостов к единому безопасному стандарту: от генерации ключей до аудита конфигураций и логов.

Ключи и аутентификация

  • Предпочитайте Ed25519: ssh-keygen -t ed25519 -a 100. RSA 4096 — только при требованиях совместимости.
  • Отключите парольную аутентификацию: PasswordAuthentication no в /etc/ssh/sshd_config.
  • Ограничьте методы: PubkeyAuthentication yes, KbdInteractiveAuthentication no, GSSAPIAuthentication no (если не используется Kerberos).
  • Принудительно используйте SSHv2: Protocol 2.

Ключи в инфраструктуре

  • Храните приватные ключи в менеджере секретов или HSM; на хостах — только при крайней необходимости и с chmod 600.
  • Для доступа по CI/CD используйте отдельные сервисные ключи с ограничением по command= и from= в authorized_keys.
  • Регулярно ротируйте ключи; применяйте Valid Lifetime и напоминания в трекере.

Конфигурация сервера

Минимальный набор в /etc/ssh/sshd_config:

Port 22
Protocol 2
PasswordAuthentication no
PubkeyAuthentication yes
PermitRootLogin prohibit-password
AllowUsers admin_ops
LoginGraceTime 30
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 2
X11Forwarding no
AllowTcpForwarding no
PermitTunnel no

После изменений: systemctl reload sshd (или sshd -t для проверки синтаксиса).

Конфигурация клиента

~/.ssh/config для единообразия:

Host *
  AddKeysToAgent yes
  UseKeychain yes
  ServerAliveInterval 60
  ServerAliveCountMax 3
  IdentitiesOnly yes

Host git-*
  User git
  IdentityFile ~/.ssh/id_ed25519_git
  IdentitiesOnly yes

Host db-*
  User admin
  IdentityFile ~/.ssh/id_ed25519_db
  ProxyJump jump.example.com

Аудит и мониторинг

  • Логи: /var/log/auth.log (Debian/Ubuntu) или /var/log/secure (RHEL). Мониторьте «Failed password», «Invalid user», «Accepted publickey».
  • Включите verbose-аудит при инцидентах: LogLevel VERBOSE.
  • Периодически проверяйте sshd -T для эффективной конфигурации.
  • Сканируйте конфигурацию автоматикой (CIS, Lynis) и фиксируйте drift.

Jump-хосты и Bastion

  • Один входной узел с MFA и строгим AllowUsers/AllowGroups.
  • Принудительный ProxyJump для всех внутренних хостов; прямой доступ из интернета закрыт.
  • Логируйте сессии (если допустимо) через auditd или специализированные решения.

Типовые ошибки

  • «Permission denied (publickey)» — неверные права на ~/.ssh (должно быть 700) и authorized_keys (600); проверьте владельца.
  • «Connection closed by port 22» — блокировка фаерволом или AllowUsers/DenyUsers.
  • «no mutual signature algorithm» — несовпадение алгоритмов; обновите клиент/сервис или добавьте PubkeyAcceptedAlgorithms.

Заключение

Единый стандарт SSH снижает поверхность атаки и упрощает расследование инцидентов. Чек-лист можно превратить в Ansible-роль и прогонять регулярно.

Теги

#ssh #openssh #безопасность #Linux #автоматизация #ключи #аудит