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

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

  • Удаленное управление сервером: Выполнение команд, управление файлами, мониторинг системы.
  • Безопасная передача файлов: Копирование файлов между вашим компьютером и сервером с помощью scp (secure copy) или sftp (secure file transfer protocol).
  • Туннелирование: Создание защищенных каналов для других протоколов, таких как HTTP или FTP.

Настройки аутентификации через SSH-ключи

Аутентификация с помощью SSH-ключей — значительно более безопасный метод, чем аутентификация по паролю. Он основан на асимметричной криптографии:

  • Приватный ключ: он подобен вашему паролю и никогда не должен быть передан кому-либо.
  • Публичный ключ: Этот ключ можно безопасно распространять. Он используется сервером для проверки подлинности вашего подключения.

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

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

$ ssh-keygen -t rsa

Команду необходимо выполнять на своей рабочей станции от имени пользователя, который будет в дальнейшем подключаться к удаленному компьютеру. Путь к хранению ключей можно оставить по умолчанию или изменить:

$ ssh-keygen -t ed25519 -f /путь/к/файлу

Теперь следует скопировать ключ на удалённый сервер, для этого выполним следующую команду:

$ ssh-copy-id -i ~/.ssh/id_rsa.pub s468197@95.223.114.215

В примере 95.223.114.215 — это IP-адрес удаленного сервера. После ввода пароля, ключ копируется папку .ssh домашней директории пользователя.

После копирования, проверим доступ при помощи созданной пары ключей:

$ ssh antoniusfirst@95.213.154.235

Успешное SSH подключение означает, что настройки были выполнены корректно.

Возможные алгоритмы хеширования SSH-ключей

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

  • RSA: Один из старейших и широко распространенных алгоритмов, но его криптостойкость под вопросом в отношении квантовых компьютеров.
  • DSA: Другой старый алгоритм, также менее безопасный, чем более современные варианты.
  • ECDSA: Эллиптическая криптография, считается более безопасной и эффективной, чем RSA и DSA. Рекомендуется использовать ECDSA.

Правильная настройка SSH

Настройка SSH включает несколько важных аспектов, особенно касающихся безопасности:

  • Запрет root-доступа по паролю: это ключевой момент безопасности. Доступ к root-аккаунту напрямую по паролю создаёт значительную уязвимость. Вместо этого следует использовать SSH‑ключи или ограничить доступ к root-аккаунту через sudo:
$ sudo vim /etc/ssh/sshd_config

Затем следует раскомментировать (если это закомментировано) директиву PermitRootLogin и установите для нее значение no, как показано на скриншоте

Как только вы закончите, сохраните и закройте файл. Затем перезапустите службу sshd, чтобы применить последние изменения в конфигурации.

$ sudo vim /etc/ssh/sshd_config
  • Изменение порта по умолчанию (22): Атаки на SSH-серверы часто направлены на порт 22. Изменение порта на менее распространенный затрудняет автоматизированные атаки. Для этого вам нужно отредактировать файл конфигурации SSH-сервера. Он обычно расположен в /etc/ssh/sshd_config. Для редактирования используйте текстовый редактор с правами root, например, nano или vim:
$ sudo nano /etc/ssh/sshd_config

Найдите строку, начинающуюся с Port. По умолчанию она будет выглядеть так:

$ Port22

Измените значение 22 на желаемый номер порта.

$ Port 2222

Сохраните изменения в файле конфигурации. Для nano это делается комбинацией клавиш Ctrl+X, затем Y и Enter. Для vim это зависит от режима редактирования (:wq для сохранения и выхода).

Чтобы изменения вступили в силу, необходимо перезапустить службу SSH-сервера.

$ sudo systemctl restart sshd

Если у вас настроен файрвол (например, iptables, firewalld или ufw), вам необходимо разрешить входящие соединения на новый порт. Например, для ufw:

$ sudo ufw allow 2222/tcp
  • Настройка файрвола.

Настройка файрвола для разрешения доступа к новому SSH-порту зависит от используемой вами системы и типа файрвола. Рассмотрим наиболее популярные варианты:

  • ufw (Uncomplicated Firewall) - Ubuntu и другие Debian-based дистрибутивы:

ufw — это простой в использовании файрвол. Если он установлен (проверьте командой sudo ufw status), то для разрешения доступа к порту, например, 2222, выполните:

$ sudo ufw allow 2222/tcp

Это разрешит входящие подключения по TCP-протоколу на порт 2222. Для проверки статуса:

$ sudo ufw status

Чтобы разрешить подключения из определенного IP-адреса:

$ sudo ufw allow from to any port 2222 proto tcp

Замените на IP-адрес, с которого разрешается подключение.

  • firewalld - Fedora, CentOS, RHEL и другие systemd-based дистрибутивы:

firewalld — более сложный, но гибкий файрвол. Для разрешения доступа к порту 2222:

$ sudo firewall-cmd --permanent --add-port=2222/tcp $ sudo firewall-cmd --reload

Первая команда добавляет правило на постоянной основе, а вторая перезагружает файрвол, чтобы применить изменения. Для проверки:

$ sudo firewall-cmd --list-all

Для разрешения доступа из определенного IP-адреса:

$ sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="<IP-адрес>" port protocol="tcp" port="2222" accept'sudo firewall-cmd --reload

Замените '<IP-адрес>' на IP-адрес, с которого разрешается подключение.

  • iptables - Более низкоуровневый файрвол, используемый во многих дистрибутивах:

iptables предоставляет гораздо больше возможностей для тонкой настройки, но и сложнее в использовании. Пример для разрешения доступа к порту 2222:

$ sudo iptables -A INPUT -p tcp --dport 2222 -j ACCEPT $ sudo iptables-save > /etc/iptables/rules.v4 # Сохранение правил

-A INPUT добавляет правило в цепочку INPUT (входящие пакеты), -p tcp указывает TCP-протокол, --dport 2222 — номер порта, -j ACCEPT — разрешить. Важно сохранить правила, чтобы они применялись после перезагрузки системы. Проверьте вашу систему, как именно сохраняются правила iptables, это может отличаться в разных дистрибутивах.

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

Начать дискуссию