Настройка SSH ключей - увеличиваем безопасность на VDS/VPS

Руководство Настройка SSH ключей - увеличиваем безопасность на VDS/VPS

Поддерживаемые версии
  1. Отсутствует

Вступление​

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

Сегодня же хочу поговорить о не менее важной вещи, которая может значительно повысить безопасность вашего сервера - SSH ключах. Дело в том, что даже сейчас далеко не каждый задумывается об этом и держит SSH с входом по паролю (зачастую ещё и на стандартном 22 порту с паролем от хостера). И как бы не казалось что это безопасно, это далеко не всегда так.



Теория​

Для начала быстро рассмотрим что вообще такое ключи. Если кратко, ключи это набор символов для шифрования и расшифровки каких-либо данных. Ключи могут быть публичными и приватными. А в чём разница?

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

Итак, с ключами разобрались. А как же они относятся к SSH? Дело в том, что SSH это зашифрованный протокол и для работы он как раз и использует ключи. Если интересно почитать подробнее, можете загуглить.



Практика​

С теорией разобрались, теперь приступим к практике: для начала нам нужно сгенерировать эти самые ключи. Сразу скажу, что в данном примере мы не будем использовать сторонние программы, такие как Putty, а воспользуемся внутренними средствами ОС.

Примечание: чтобы подключиться по SSH указать порт используйте команду вида:
Bash:
ssh user@123.123.123.123 -p 19253
Где:
  • user - имя пользователя
  • 123.123.123.123 - IP адрес сервера
  • 19253 - порт, на котором открыт SSH, по умолчанию 22. Если не меняли, аргумент -p порт можно не указывать

SSH ключи могут быть для разных алгоритмов шифрования. Из популярных: RSA, ECDSA и ED25519. Самый старый из них RSA будет поддерживаться везде. Сейчас рекомендуется использовать ED25519, но он может не поддерживаться на старых ОС, и тогда остаётся использовать ECDSA, но он уязвим к квантовым атакам. Мы же будем использовать как раз ED25519, так как это один из самых используемых алгоритмов шифрования на данный момент.

Открываем командную строку и пишем: ssh-keygen -t формат. Например, для ED25519 это будет выглядеть как ssh-keygen -t ed25519. Также по желанию можно добавить комментарий аргументом -c "комментарий", он используется для идентификации ключей если их много.

Приступим: при вводе команды у нас запрашивает путь для сохранения ключа, оставим стандартный /home/username/.ssh/id_ed25519, для этого нажмём ENTER. Далее у нас запрашивает кодовую фразу (пароль), придумываем и пишем (при вводе символы не показываются) и вводим её второй раз.

Готово! После использования нам выведет куда сохранён ключ и визуализация этого ключа:
Код:
Your identification has been saved in /home/username/.ssh/id_ed25519
Your public key has been saved in /home/username/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:y0yvOrfcxrGSSddUkAlZ0MjbGiraLw8sbpOVzYjnRs4 username@hostname
The key's randomart image is:
+--[ED25519 256]--+
|         .oBo+   |
|          + + .  |
|           o .   |
|          o o    |
|     . =S. =     |
|    ..B+=o+ .    |
|    .@oo+=.o     |
|   .=.Eo=o+      |
|   ..o.B*+.      |
+----[SHA256]-----+

Примечание: ~ это путь к домашней папке пользователя (например, /home/username или C:\Users\username для пользователя username).

У нас создались 2 файла в папке ~/.ssh:
  • id_ed25519 - приватный ключ
  • id_ed25519.pub - публичный ключ

Публичный ключ id_ed25519.pub
Код:
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKYC8jCyHhhR/z8t2fElyqInj/0kJDjAEoHfe0wOGJQR username@hostname

Приватный ключ id_ed25519
Код:
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
QyNTUxOQAAACCmAvIwsh4YUf8/LdnxJcqiJ4/9JCQ4wBKB33tMDhiUEQAAAJgeZngnHmZ4
JwAAAAtzc2gtZWQyNTUxOQAAACCmAvIwsh4YUf8/LdnxJcqiJ4/9JCQ4wBKB33tMDhiUEQ
AAAEB9Ldi0kJt8UbvEHwBDF63PuybGrBXBQw27/+KY0rAVYaYC8jCyHhhR/z8t2fElyqIn
j/0kJDjAEoHfe0wOGJQRAAAAEmRyYWtvc2hhc2x2QHVidW50dQECAw==
-----END OPENSSH PRIVATE KEY-----

БУДЬТЕ ОСТОРОЖНЫ И НЕ РАСПРОСТРАНЯЙТЕ РЕАЛЬНЫЙ ПРИВАТНЫЙ КЛЮЧ

ВНИМАНИЕ: Не перепутайте приватный и публичный ключи!!!

Следующий шаг: добавить этот ключ на сервер. Просто подключаемся по SSH к нашему серверу как обычно и открываем файл /root/.ssh/authorized_keys через любой текстовый редактор, например nano, который мы и будем использовать в этом примере.

Итоговая команда будет выглядеть как:
Bash:
nano /root/.ssh/authorized_keys

Открываем файл и вставляем наш публичный ключ через CTRL + SHIFT + V, сохраняем через CTRL + S и закрываем документ через CTRL + X. Теперь перезагрузим SSH на сервере:

Если у вас Debian/Ubuntu используем команду:
Bash:
sudo service ssh restart

Если у вас CentOS/Fedora/Rocky используем команду:
Bash:
sudo service sshd restart

Теперь проверяем: отключимся и заново подключимся через встроенный SSH клиент в системе:
Bash:
ssh user@123.123.123.123
Если вы всё сделали правильно то у нас не запросит пароль.



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

Bash:
sudo nano /etc/ssh/sshd_config

Нас в них интересуют такие строки как PasswordAuthentication и Port. В строке PasswordAuthentication ставим no:
Код:
PasswordAuthentication no

А в Port ставим любое число от 0 до 65535. Например, можно сгенерировать случайное число тут. В примере импользуем 19253:
Код:
Port 19253

Теперь точно также как и выше сохраняем через CTRL + S и закрываем через CTRL + X.

Оставлять стандартный 22 порт крайне нежелательно, поскольку ваш сервер могут начать брутить (brute force - метод "грубой силы", полный перебор значений).

Итак, теперь важно открыть этот порт (в нашем примере - 19253) чтобы вы могли подключиться к серверу.

Если у вас Ubuntu/Debian используем команду:
Bash:
sudo ufw allow 19253/tcp
sudo ufw reload

Если у вас CentOS/Fedora/Rocky используем команду:
Bash:
sudo firewall-cmd --zone=public --add-port=19253/tcp --permanent
sudo firewall-cmd --reload



Теперь перезагрузим службу SSH

Если у вас Ubuntu/Debian используем команду:
Bash:
sudo service ssh restart

Если у вас CentOS/Fedora/Rocky используем команду:
Bash:
sudo service sshd restart



Готово! Теперь вы используете для авторизации по SSH связку ключей. Если вы считаете что есть чем дополнить статью, пишите в обсуждение
Автор
MrDrag0nXYT
Просмотры
311
Первый выпуск
Обновление
Оценка
0.00 звёзд 0 оценок

Другие ресурсы пользователя MrDrag0nXYT

Поделиться ресурсом

Назад
Сверху Снизу