Поднимаем VPN на VPS. Часть 3. Настройка SSH (вход по сертификату)

Поднимаем VPN на VPS. Часть 3. Настройка SSH (вход по сертификату)

Шифропанк


SSH (Secure Shell )— сетевой протокол прикладного уровня, позволяющий производить удалённое управление операционной системой и туннелирование TCP-соединений. Шифрует весь трафик, включая и передаваемые пароли. SSH допускает выбор различных алгоритмов шифрования. SSH-клиенты и SSH-серверы доступны для большинства сетевых операционных систем.

SSH поддерживает возможность аутентификации по RSA-ключу, что обеспечивает максимальный уровень безопасности для канала передачи данных, а также двухфакторную аутентификацию удалённых пользователей.


Для начала зайдем на наш сервер и обновим систему. Для входа используем команду:

ssh [username]@[ip-server] (пример: ssh root@46.134.211.165)

Вводим пароль который нам прислал хостер на почту. Далее обновим систему командой:

apt update && apt upgrade

Если у вас на сервере стоит CentOS, то команда одна

yum update

После обновления можем выйти с сервера для создания RSA-ключей

exit


RSA-ключи

Протоколы RSA-аутентификации имеют в основе два специально созданных криптографических ключа, «приватный» и «публичный». Преимущество использования этой системы аутентификации в том, что в большинстве случаев они позволяют устанавливать безопасные соединения без необходимости набирать пароль вручную.


Чтобы сгенерировать RSA-ключи, воспользуемся командой:

ssh-keygen -t rsa -b 4096 -f id_rsa

где:

-t - это тип ключа (rsa1, rsa, dsa, ecdsa)

-b - количество бит ключа (по умолчанию для rsa -2048)

-f - путь к папке в которой будут созданы ключи (по умолчанию это папка ~/.ssh/)

При запросе, вводим ключевую фразу (пароль) для ключа, таким образом ваш приватный ключ будет бесполезен для того, кто этой фразы не знает.

Создано 2 ключа id_rsa (приватный) и id_rsa.pub (публичный).



Создаются они в папке /home/[user]/.ssh/ где [user] это ваш username на ПК. Можете проверить наличие ключей.

Далее закинем на сервер публичный ключ командой:

ssh-copy-id -i id_rsa.pub [username]@[ip-server]

Вводим пароль от сервера. Готово.

Теперь присвоим ПК приватный ключ командой:

ssh-add ~/.ssh/id_rsa

Проверяем.

ssh-add -l

Логинимся на сервер:

ssh [username]@[ip-server]

Проверим добавился ли ключ на сервер (я использую nano, заранее установив его командой apt install nano (yum install nano для Centos))

nano .ssh/authorized_keys

Там должна быть строка с ключом, совпадающим с id_rsa.pub на вашем ПК.

Далее, чтобы включить аутентификацию по ключу нам нужно отредактировать файл /etc/ssh/sshd_config командой:

nano /etc/ssh/sshd_config

Раскомментируем строчку, т.е убираем #

#AuthorizedKeysFile %h/.ssh/authorized_keys

Теперь мы можем входить на сервер без ввода пароля.

НО это еще не все. Наш сервер все еще может авторизовывать по паролю, нам это не нужно, так что уберем эту функцию. Для этого в этом же файле (sshd_config) ищем строку:

#PasswordAuthentication yes

и меняем на

PasswordAuthentication no

Сохраняем и перезагружаем ssh-сервер

service ssh restart

Теперь наш сервер принимает только ssh-ключ. На этом можно закончить.

Но если вам нужна повышенная криптоустойчивость ключа, то с помощью PKCS#8 мы можем повысить защиту.


Повышаем защиту ключа с помощью PKCS#8

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


Для начала отвязываем приватный ключ от своего компьютера командой:

ssh-add -d ~/.ssh/id_rsa

где ~/.ssh/id_rsa это путь к нашему приватному ключу

далее переименовываем:

mv ~/.ssh/id_rsa id_rsa_old

и шифруем командой:

openssl pkcs8 -topk8 -v2 des3 -in id_rsa_old -out id_rsa

При первом запросе пароля вводим, тот пароль, который вы вводили при генерации rsa-ключа, во втором запросе вводим новый пароль (можно и старый повторить т.к ключ id_rsa_old нам больше не понадобится).

Даем новому ключу 600 права

chmod 600 id_rsa

и привязываем к ПК

ssh-add ~/.ssh/id_rsa

Все готово. Теперь мы имеем авторизацию на сервере по ключу с повышенной защитой.


Предыдущая часть (Часть 2. Выбор хостинга и аренда VPS)

Следующая часть (Часть 4. Настройка OpenVPN)


Больше информации об анонимности и безопасности личных данных в сети на канале Шифропанк