Настройка SSH. Поднимаем безопасность на новый уровень

12/23/2019

Ниже вы найдете 5 простых шагов, позволяющих поднять безопасность SSH на новый уровень. Если вы любите Ansible, то эти, а также другие настройки доступны для автоматизированного развертывания в нашем GitLab репозитории

Держите ваш SSH свежим

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

Примените IP фильтр или смените порт по-умолчанию

Если вы по тем или иным причинам не можете применить статический IP фильтр для входящих подключений, то изменените порт по-умолчанию (22). Это сразу отсечет армию ботов, сканирующих интернет на предмет открытых портов TCP 22.

Для изменения порта отредактируйте конфигурационный файл демона SSH - /etc/ssh/sshd_config. Найдите строку, начинающуюся с "Port.." (если нет, добавьте) и выставите запоминающийся для вас номер порта:

Protocol 2
ListenAddress 0.0.0.0
Port 2490

На заметку: для работы в окружении selinux ssh необходимо поднастроить, чтобы не потерять доступ к системе. Точнее нужно зарегистрировать новый номер порта в качестве разрешенного порта ssh, иначе selinux не даст sshd стартануть

semanage port -a -t ssh_port_t -p tcp 2490

После чего перезапустите SSH

Отключите рута

SSH не раскрывает имена пользователей, зарегистрированных в системе для того, чтобы злоумышленник не сел подбирать пароль для конкретного пользователя. Но вот пользователь root есть в каждой системе, и вот он-то представляет лакомый кусочек. Заведите себе непривилегированного пользователя - не используйте рута! Также вам стоит не создавать пользователя с хорошо известными именами, такими как user, share, man и т.д. Старайтесь сделать имя вашего пользователя максимально уникальным, чтобы избежать подбора по словарю

В SSH запретить root пользователя просто. Измените или добавьте в /etc/ssh/sshd_config следующую строку:

PermitRootLogin no

Ограничьте использование старых алгоритмов шифрования

Если вы регулярно обновляете SSH, то из коробки уже идут довольно неплохие настройки по-умолчанию. Однако вы можете ограничить используемые алгоритмы, выбрав более новые и совершенные, чем алгоритмы по-умолчанию. Добавьте или измените следующие строки в вашем /etc/ssh/sshd_config

Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com
KexAlgorithms curve25519-sha256@libssh.org

Используйте ключи вместо паролей

В ssh настройка доступа по ключу - это, пожалуй, самое важное что вы можете сделать. Главный недостаток паролей - они коротки. Даже если попытаться запомнить реально длинный пароль, его все равно неудобно вводить каждый раз, как вы захотите получить доступ к серверу. Да и тягаться с компьютером в запоминании длинных фраз не стоит.

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

Только помните, приватный ключ SSH нужно держать в строжайшей секретности. Лучше даже приватный ключ сам зашифровать с помощью пароля. Т.е. даже, если ключ будет скомпрометирован, атакующий еще должен будет потратить время на подбор пароля, а вы тем временем ключи уже поменяете. Самым надежным форматом ключей на начало 2020-ого года является ED25519. Но так как он все еще не стал форматом по умолчанию, вам надо явно попросить ssh keygen сгенерировать именно ED25519. Т.е. по-умолчанию вам сгенерирует старый добрый RSA. Получить ED25519 можно так, разумеется подставив свой реальный email:

ssh-keygen -o -a 100 -t ed25519 -C "user@example.com"

Вас спросят куда сохранить ключи. Путь по-умолчанию подойдет в 99% случаев. Параметр "-a" указывает сколько раз зашифровать пароль. Большее число раз требует больше вычислений для атакующего, пытающегося подобрать пароль. В принципе, вам следует менять ключи хотя бы раз в год, даже если есть уверенность, что ключ в безопасности - это нормальная практика криптографической гигиены

Теперь берем содержимое публичного ключа, логинимся на сервер и кладем его в файл .ssh/authorized_keys в домашнем каталоге пользователя, следуя принципу один публичный ключ - одна строка в файле. Да, вы можете таким образом зарегистрировать несколько доверенных ключей для одного пользователя

После тестирования SSH авторизации по ключу, вам остается только выключить парольный вход совсем. Для этого добавьте или выставите в "no" следующие параметры в /etc/ssh/sshd_config

PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no

Темы:

Добавить комментарий