Каждый день вопросы безопасности Linux-серверов становятся всё более актуальными. Помимо привычных атак, таких как DDoS, SYN-flood и других, особое внимание следует уделить атакам методом brute-force (подбор паролей). SSH авторизация по ключу является эффективным способом предотвращения данного типа атак, а также устранения уязвимостей в системе и повышения безопасности Linux-серверов в целом. В данной статье мы рассмотрим настройку SSH авторизации по ключу на примере серверов, работающих на базе CentOS 8 и Ubuntu 22.04.
Вступление
С данным типом атак сталкивается большинство Linux-серверов, подбор паролей к учетным записям пользователей ведется по всем доступным протоколам. Особую опасность несёт brute-force атака по подбору root-пароля. О вреде, который может нанести злоумышленник, получив root-права, говорить не стоит.
Есть разные способы борьбы с brute-force, среди которых, блокировка атакующих IP адресов на уровне firewall после нескольких неудачных попыток авторизации. С этим отлично справляется утилита fail2ban, однако, одна из атак может иметь неблагоприятный исход, поэтому мы прибегнем к другому способу – полностью запретим авторизацию по SSH протоколу с использованием пароля.
SSH авторизация по ключу безопасности возможна без полного запрета подключения по паролю по SSH протоколу на сервере. Для этого просто не выполняйте последний шаг, описанный в данной статье!
Генерация приватного RSA-ключа
Для настройки безопасного SSH-подключения, Вам понадобится сгенерировать приватный RSA-ключ. Для этого воспользуйтесь утилитой PuTTYGen (оф. сайт). Откройте скачанное приложение, в поле Number of bits in a generated key измените значение на 4096, таким образом мы увеличиваем сложность ключа, повышая его надёжность. Нажимаем Generate. Процесс займёт некоторое время.
Скопируйте данный ключ в блокнот, а так же сохраните файл ключа – он пригодится в дальнейшем. Так же настоятельно рекомендуем сделать его резервную копию и разместить безопасном хранилище.
Настройка SSH авторизации по ключу
В данной статье мы рассматриваем настройку на примере CentOS 8 и Ubuntu 22.04, однако Debian и других ОС настройка будет схожей.
В первую очередь, нам следует создать директорию для хранения ключей:
mkdir ~/.ssh
Теперь необходимо создать сам файл ключей и скопировать в него RSA-ключ, сгенерированный с помощью PuTTYGen:
vi ~/.ssh/authorized_keys
Сохраняем файл и закрываем редактор.
Важным фактором являются права на директорию и файл ключей. Если файл будет доступен для чтения, ssh авторизация по ключу не удастся! Для этого выполняем следующие команды:
chmod 0700 ~/.ssh chmod 0600 ~/.ssh/authorized_keys
Теперь следует выполнить настройку sshd-сервера:
vi /etc/ssh/sshd_config
Ищем строку и раскомментируем её:
#PubkeyAuthentication yes
Теперь следует указать путь к файлу ключей. Для этого ищем переменную AuthorizedKeysFile и меняем на:
AuthorizedKeysFile ~/.ssh/authorized_keys
Перегружаем sshd-сервер:
systemctl restart sshd
Готово! SSH авторизация по ключу на стороне сервера настроена.
Ошибка Server refused our key в Ubuntu 22.04
При попытке авторизации с помощью приватного ключа в Ubuntu 22.04 зачастую возникает ошибка Server refused our key, которая вызвана тем, что sshd не поддерживает ключи, сгенерированные утилитой PutTTYGen, поэтому мы должны разрешить их в настройках сервера.
Открываем в редакторе конфигурационный файл sshd:
vi /etc/ssh/sshd_config
Добавляем следующие параметры:
HostKeyAlgorithms +ssh-rsa PubkeyAcceptedAlgorithms +ssh-rsa
Сохраняем измененный конфиг и перегружаем sshd сервер:
HostKeyAlgorithms +ssh-rsa PubkeyAcceptedAlgorithms +ssh-rsa
Готово, теперь ошибка Server refused our key устранена и на сервер разрешен доступ по ключу.
Авторизация в CentOS по ключу
Теперь попробуем авторизироваться на сервере по ключу. Запускаем PuTTY. В подменю Auth выбираем файл ключей, созданный в PutTTYGen. Как видите, файл был сохранён в формате .ppk – это расширение для приватных ключей PuTTY:
Пробуем подключиться. Если Вы сделали всё правильно, то в терминале увидите уведомление, что авторизация выполнена с помощью ключа безопасности:
Отключение SSH авторизации по паролю
Если на сервере несколько пользователей и Вы не желаете отключать авторизацию по паролю, то просто пропустите данный пункт.
Для отключения SSH авторизации по паролю на сервере, откроем файл конфигурации sshd-сервера:
nano /etc/ssh/sshd_config
Находим строку:
PasswordAuthentication yes
И меняем значение yes на no:
PasswordAuthentication no
Важно! Мы должны именно заменить значение переменной, а не закомментировать строку, иначе это не принесёт нам никакого результата!
Перезагружаем sshd:
systemctl restart sshd
Проверяем. Для этого производим авторизацию на сервере без ключа (обычным способом). Если всё было сделано правильно, то мы увидим следующую ошибку:
Заключение
Данный подход является оптимальным, если речь идёт о приватных серверах. SSH авторизация по ключу и запрет доступа к серверу по паролю помогла решить нам сразу же несколько проблем:
- Предотвращение brute-force атак по ssh-протоколу;
- Обеспечение безопасного подключения к серверу;
- По субъективному мнению, более быстрый и удобный доступ к серверу без ввода пароля.