SSH авторизація з ключем безпеки в CentOS 8 та Ubuntu 22.04

Кожного дня питання безпеки 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. Процес займе деякий час.

PuTTY Key Generator

Скопіюйте даний ключ у блокнот, а також збережіть файл ключа — він знадобиться надалі. Також наполегливо рекомендуємо зробити його резервну копію та зберігати у безпечному сховищі.

Налаштування 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‑сервер:

sudo systemctl restart sshd

Готово, тепер помилка Server refused our key усунута і на сервері дозволено доступ за ключем.

Авторизація в CentOS з ключем

Тепер спробуємо авторизуватися на сервері за ключем. Запускаємо PuTTY. У підменю Auth вибираємо файл ключів, створений у PutTTYGen. Як бачите, файл збережено у форматі .ppk — це розширення для приватних ключів PuTTY:

SSH авторизація за ключем

Авторизація в CentOS за ключем

Спробуємо підключитися. Якщо все зроблено правильно, то в терміналі з’явиться повідомлення про успішну авторизацію за допомогою ключа безпеки:

SSH авторизація за ключем

Відключення SSH‑авторизації за паролем

Якщо на сервері декілька користувачів і ви не бажаєте відключати авторизацію за паролем, просто пропустіть цей пункт.

Для відключення SSH‑авторизації за паролем на сервері відкриваємо файл конфігурації sshd‑сервера:

nano /etc/ssh/sshd_config

Знаходимо рядок:

PasswordAuthentication yes

І змінюємо значення yes на no:

PasswordAuthentication no

Важливо! Ми повинні саме замінити значення змінної, а не закоментувати рядок, інакше це не принесе жодного результату!

Перезавантажуємо sshd:

systemctl restart sshd

Перевіряємо. Для цього виконуємо авторизацію на сервері без ключа (звичайним способом). Якщо все зроблено правильно, то з’явиться наступна помилка:

Авторизація в CentOS за ключем

Висновок

Даний підхід є оптимальним, якщо мова йде про приватні сервери. SSH‑авторизація за ключем і заборона доступу до сервера за паролем допомогли вирішити одразу кілька проблем:

  • Запобігання brute‑force атак по SSH‑протоколу;
  • Забезпечення безпечного підключення до сервера;
  • За суб’єктивною оцінкою, швидший та зручніший доступ до сервера без введення пароля.
Оцініть статтю