SSH-ключи: безопасный доступ к удалённым серверам
SSH (Secure Shell) — это криптографический сетевой протокол, обеспечивающий безопасное подключение к удалённым серверам. Он шифрует весь трафик между вашим компьютером и сервером, защищая ваши данные от перехвата. SSH используется для различных задач, включая:
- Удаленное управление сервером: Выполнение команд, управление файлами, мониторинг системы.
- Безопасная передача файлов: Копирование файлов между вашим компьютером и сервером с помощью scp (secure copy) или sftp (secure file transfer protocol).
- Туннелирование: Создание защищенных каналов для других протоколов, таких как HTTP или FTP.
Настройки аутентификации через SSH-ключи
Аутентификация с помощью SSH-ключей — значительно более безопасный метод, чем аутентификация по паролю. Он основан на асимметричной криптографии:
- Приватный ключ: он подобен вашему паролю и никогда не должен быть передан кому-либо.
- Публичный ключ: Этот ключ можно безопасно распространять. Он используется сервером для проверки подлинности вашего подключения.
Когда вы подключаетесь к серверу с помощью SSH-ключа, сервер использует ваш публичный ключ для проверки подписи, генерируемой вашим приватным ключом. Если подписи совпадают, вам будет предоставлен доступ.
Для генерации пары ключей достаточно можно выполнить команду
Команду необходимо выполнять на своей рабочей станции от имени пользователя, который будет в дальнейшем подключаться к удаленному компьютеру. Путь к хранению ключей можно оставить по умолчанию или изменить:
Теперь следует скопировать ключ на удалённый сервер, для этого выполним следующую команду:
В примере 95.223.114.215 — это IP-адрес удаленного сервера. После ввода пароля, ключ копируется папку .ssh домашней директории пользователя.
После копирования, проверим доступ при помощи созданной пары ключей:
Успешное SSH подключение означает, что настройки были выполнены корректно.
Возможные алгоритмы хеширования SSH-ключей
SSH-ключи используют алгоритмы асимметричного шифрования, а не хеширование в прямом смысле. Однако, при генерации ключей используются алгоритмы, определяющие тип ключа и его криптостойкость:
- RSA: Один из старейших и широко распространенных алгоритмов, но его криптостойкость под вопросом в отношении квантовых компьютеров.
- DSA: Другой старый алгоритм, также менее безопасный, чем более современные варианты.
- ECDSA: Эллиптическая криптография, считается более безопасной и эффективной, чем RSA и DSA. Рекомендуется использовать ECDSA.
Правильная настройка SSH
Настройка SSH включает несколько важных аспектов, особенно касающихся безопасности:
- Запрет root-доступа по паролю: это ключевой момент безопасности. Доступ к root-аккаунту напрямую по паролю создаёт значительную уязвимость. Вместо этого следует использовать SSH‑ключи или ограничить доступ к root-аккаунту через sudo:
Затем следует раскомментировать (если это закомментировано) директиву PermitRootLogin и установите для нее значение no, как показано на скриншоте
Как только вы закончите, сохраните и закройте файл. Затем перезапустите службу sshd, чтобы применить последние изменения в конфигурации.
- Изменение порта по умолчанию (22): Атаки на SSH-серверы часто направлены на порт 22. Изменение порта на менее распространенный затрудняет автоматизированные атаки. Для этого вам нужно отредактировать файл конфигурации SSH-сервера. Он обычно расположен в /etc/ssh/sshd_config. Для редактирования используйте текстовый редактор с правами root, например, nano или vim:
Найдите строку, начинающуюся с Port. По умолчанию она будет выглядеть так:
Измените значение 22 на желаемый номер порта.
Сохраните изменения в файле конфигурации. Для nano это делается комбинацией клавиш Ctrl+X, затем Y и Enter. Для vim это зависит от режима редактирования (:wq для сохранения и выхода).
Чтобы изменения вступили в силу, необходимо перезапустить службу SSH-сервера.
Если у вас настроен файрвол (например, iptables, firewalld или ufw), вам необходимо разрешить входящие соединения на новый порт. Например, для ufw:
- Настройка файрвола.
Настройка файрвола для разрешения доступа к новому SSH-порту зависит от используемой вами системы и типа файрвола. Рассмотрим наиболее популярные варианты:
- ufw (Uncomplicated Firewall) - Ubuntu и другие Debian-based дистрибутивы:
ufw — это простой в использовании файрвол. Если он установлен (проверьте командой sudo ufw status), то для разрешения доступа к порту, например, 2222, выполните:
Это разрешит входящие подключения по TCP-протоколу на порт 2222. Для проверки статуса:
Чтобы разрешить подключения из определенного IP-адреса:
Замените на IP-адрес, с которого разрешается подключение.
- firewalld - Fedora, CentOS, RHEL и другие systemd-based дистрибутивы:
firewalld — более сложный, но гибкий файрвол. Для разрешения доступа к порту 2222:
Первая команда добавляет правило на постоянной основе, а вторая перезагружает файрвол, чтобы применить изменения. Для проверки:
Для разрешения доступа из определенного IP-адреса:
Замените '<IP-адрес>' на IP-адрес, с которого разрешается подключение.
- iptables - Более низкоуровневый файрвол, используемый во многих дистрибутивах:
iptables предоставляет гораздо больше возможностей для тонкой настройки, но и сложнее в использовании. Пример для разрешения доступа к порту 2222:
-A INPUT добавляет правило в цепочку INPUT (входящие пакеты), -p tcp указывает TCP-протокол, --dport 2222 — номер порта, -j ACCEPT — разрешить. Важно сохранить правила, чтобы они применялись после перезагрузки системы. Проверьте вашу систему, как именно сохраняются правила iptables, это может отличаться в разных дистрибутивах.
Правильная настройка SSH и использование SSH-ключей — это важные аспекты безопасности ваших серверов. Следуйте рекомендациям, чтобы защитить ваши данные и ресурсы.