SSH (Secure Shell) — это протокол, который обеспечивает защищённый доступ к удалённым серверам. Это один из самых важных инструментов для системных администраторов и разработчиков, особенно когда речь идет о безопасности. В этом посте я объясню, как настроить SSH для безопасной аутентификации, чтобы защитить ваш сервер от несанкционированного доступа.
Шаг 1: Генерация SSH-ключей
Что такое SSH-ключи?
SSH-ключи — это пары ключей, состоящие из приватного и публичного ключа. Публичный ключ размещается на сервере и используется для аутентификации, а приватный ключ хранится на локальном компьютере пользователя и должен быть защищён.
Как создать SSH-ключи?
Для генерации SSH-ключей используйте команду ssh-keygen:
ssh-keygen -t ed25519
Алгоритм Ed25519 рекомендуется за его высокую безопасность и производительность. Вы также можете использовать RSA с ключом длиной 4096 бит:
ssh-keygen -t rsa -b 4096
После выполнения команды вам будет предложено указать место для сохранения ключа и создать парольную фразу для дополнительной защиты приватного ключа.
Шаг 2: Настройка сервера для использования SSH-ключей
Копирование публичного ключа на сервер
Для добавления публичного ключа на сервер используйте команду ssh-copy-id:
ssh-copy-id user@server_address
Эта команда добавит ваш публичный ключ в файл ~/.ssh/authorized_keys на сервере.
Добавление ключа вручную
Вы можете вручную скопировать содержимое вашего публичного ключа (файл .pub) и вставить его в файл ~/.ssh/authorized_keys на сервере.
Шаг 3: Улучшение безопасности SSH
Отключение входа по паролю
Отключение входа по паролю значительно улучшает безопасность, так как исключает возможность взлома паролей:
Откройте файл конфигурации SSH /etc/ssh/sshd_config.
Найдите строку PasswordAuthentication и измените её на no.
PasswordAuthentication no
Перезапустите SSH-сервер:
sudo systemctl restart sshd
Отключение входа под root
Вход под root даёт полный доступ к системе, что крайне опасно. Для отключения входа под root:
В файле конфигурации SSH /etc/ssh/sshd_config найдите строку PermitRootLogin и измените её на no.
PermitRootLogin no
Перезапустите SSH-сервер.
Изменение порта по умолчанию
Изменение порта SSH с 22 на другой номер может снизить вероятность автоматических атак:
В файле конфигурации SSH /etc/ssh/sshd_config измените строку Port на желаемый номер порта, например:
Port 2222
Перезапустите SSH-сервер.
Настройка двухфакторной аутентификации
Двухфакторная аутентификация добавляет дополнительный уровень безопасности. Вы можете использовать Google Authenticator или аппаратные токены (например, YubiKey). Настройка двухфакторной аутентификации может включать установку и настройку PAM (Pluggable Authentication Modules).
Шаг 4: Отключение ненадежных алгоритмов и настройка надежных ключей
Отключение ключей ECDSA
Алгоритм ECDSA связан с технологиями NIST, что не всегда надежно. Чтобы предотвратить генерацию и использование этих ключей, создадим неработающие символические ссылки:
cd /etc/ssh
rm ssh_host_ecdsa_key*
rm ssh_host_key*
ln -s ssh_host_ecdsa_key ssh_host_ecdsa_key
ln -s ssh_host_key ssh_host_key
Отключение ключей DSA
Ключи DSA ограничены размером в 1024 бита, что не считается безопасным. Для их отключения:
cd /etc/ssh
rm ssh_host_dsa_key*
ln -s ssh_host_dsa_key ssh_host_dsa_key
Генерация RSA-ключа большего размера
Для более надежной аутентификации стоит сгенерировать RSA-ключ длиной 4096 бит:
cd /etc/ssh
rm ssh_host_rsa_key*
ssh-keygen -t rsa -b 4096 -f ssh_host_rsa_key < /dev/null
Генерация клиентских ключей
Для создания клиентских ключей используйте следующие команды:
ssh-keygen -t ed25519
ssh-keygen -t rsa -b 4096
Заключение
Из этого поста можно сделать вывод, что настройка SSH для безопасной аутентификации — это важный шаг в защите ваших серверов. Используйте SSH-ключи, отключите вход по паролю, измените стандартный порт, настройте двухфакторную аутентификацию и отключите ненадежные алгоритмы для максимальной безопасности. Помните, что безопасность — это процесс, и регулярное обновление и проверка ваших настроек — залог защиты ваших данных.
Сообщения блогов группы «Личные блоги» (www.securitylab.ru)