SSH (Secure Shell) — это распространенный протокол удаленного управления сервером.
Одной из самых популярных реализаций протокола Secure Shell является набор утилит OpenSSH, который присутствует в BSD Unix, macOS, дистрибутивах Linux, а также в актуальных версиях Windows. В этой статье мы рассмотрим наилучшие практики и наиболее важные настройки службы sshd, которые позволяют защитить узел от злоумышленников, основной целью которых является получение несанкционированного удаленного доступа к системе.
Служба sshd — это серверный процесс OpenSSH, который прослушивает порт TCP и ожидает приема входящих подключений от пользователей (администраторов). Просмотреть справку демона в ОС Linux можно комадной:
$ man sshd
Рассмотрим практики, которых следует придерживаться для обеспечения должного уровня безопасности при использовании службы SSH:
- Аутентификация по паролю для пользователей должна быть отключена, пользователи должны аутентифицироваться исключительно по ключевой паре;
- Для создания ключевых пар необходимо использовать криптостойкие алгоритмы: к примеру EdDSA (эллиптические кривые Ed25519, Ed448); ECDSA (nistp256, nistip384, nistp521);
- В конфигурации sshd необходимо явно запретить обмен ключами по протоколу Диффи-Хеллмана;
- Для пользователя root должен быть запрещен удаленный вход в систему;
- Рекомендуется задать имена пользователей или группы, для которых разрешен удаленный вход в систему;
- Рекомендуется задать максимальное количество пользователей, одновременно подключенных к серверу;
- В случае, если перенаправление X11 не планируется использовать, его необходимо отключить;
- В целях защиты от DoS (CVE-2002-20001) , в конфигурационном файле sshd должны быть заданы параметры, ограничивающие максимальное количество процессов-обработчиков в привязке к IP-адресу клиента (OpenSSH 8.5+);
- В случае, если перенаправление портов по SSH использовать не планируется, его необходимо отключить;
- Необходимо задать лимит для неаутентифицированных подключений к демону SSH.
В ОС Linux конфигурационный файл sshd располагается по пути /etc/ssh/sshd_config
. Полный перечень параметров конфигурации доступен в документации. Мы рассмотрим те из них, которые важны для безопасности системы, применительно к практикам, представленным выше:
PasswordAuthentication No
— отключаем аутентификацию по паролю (параметр можно применить только в случае, если ключ ssh для пользователя уже сгенерирован и установлен в профиле пользователя);PermitRootLogin No
— запрещаем удаленный вход в систему для суперпользователя (root);AllowUsers user1, user2, user3
— разрешаем удаленный вход в систему только указанным пользователям.AllowGroups remote1, remote2
— разрешаем удаленный вход в систему только для тех пользователей, которые являются членами указанных групп. При необходимости, можно указать подсеть.MaxSessions 2
— ограничиваем количество одновременно активных пользовательских сессий до двух;PerSourceMaxStartups 1
— указываем, что на одного подключившегося пользователя демоном sshd может быть выделен только один процесс-обработчик;PerSourceNetBlocksize 8:32
— задает количество бит адреса клиента. Этот параметр работает в связке с PerSourceMaxStartups. Значение указывается в формате IPv4:IPV6 и по умолчанию равно 32:128 (что означает, что каждый адрес рассматривается индивидуально);AllowTcpForwarding No
— запрещаем перенаправление портов, если этот функционал не используется;KexAlgorithms -diffie-hellman-group1-sha1,diffie-hellman-group1-sha256,diffie-hellman-group14-sha1,diffie-hellman-group14-sha256,diffie-hellman-group15-sha256,diffie-hellman-group15-sha512,diffie-hellman-group16-sha256,diffie-hellman-group16-sha512,diffie-hellman-group17-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha512
— явно запрещаем обмен ключами по протоколу Диффи-Хеллмана (защита от эксплуатации CVE-2002-20001);MaxStartups 5:30:60
— задаем максимальное количество неаутентифицированных подключений к демону SSH. Параметр имеет вид «start:rate:full» и его следует читать следующим образом: «sshd будет отклонять попытки подключения с вероятностью rate/100 (30%), если в настоящее время количество неаутентифицированных сессий достигло 5. Вероятность увеличивается линейно и все попытки подключения будут отклонены, если количество неаутентифицированных сессий достигло 60»;MaxAuthTries 3
— отключать пользователя после трёх попыток неудачной аутентификации;X11Forwarding No
— запрещаем перенаправление X11, если не используется;LoginGraceTime 30s
— указываем максимальное время в 30 секунд на ввод пароля (по умолчанию 2 минуты).
Пример файла конфигурации
Внести корректировки в текущие параметры sshd можно следующим образом:
- Создайте файл
/etc/ssh/sshd_config.d/00-hardening.conf
- Внесите в файл содержимое, аналогичное следующему (пример) и сохраните изменения:
PasswordAuthentication No
PermitRootLogin No
AllowUsers user1, user2, user3
AllowGroups 192.168.0.0/16
MaxSessions 2
PerSourceMaxStartups 1
PerSourceNetBlocksize 8:32
AllowTcpForwarding No
KexAlgorithms -diffie-hellman-group1-sha1,diffie-hellman-group1-sha256,diffie-hellman-group14-sha1,diffie-hellman-group14-sha256,diffie-hellman-group15-sha256,diffie-hellman-group15-sha512,diffie-hellman-group16-sha256,diffie-hellman-group16-sha512,diffie-hellman-group17-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha512
MaxStartups 5:30:60
MaxAuthTries 3
X11Forwarding No
LoginGraceTime 30s
- В зависимости от дистрибутива, выполните команду перезагрузки службы:
# Для RHEL, CentOS, Debian
$ sudo systemctl restart sshd
# Для Ubuntu
$ sudo systemctl restart ssh
После применения параметров и перезапуска службы, проверить действующую конфигурацию OpenSSH можно с помощью команды sshd -T
.
Больше про OpenSSH hardening можно прочитать в соответствующем руководстве на GitHub.