В современном мире, где всё больше сервисов переходит в облако, обеспечение безопасности удаленного доступа становится критически важным. SSH (Secure Shell) – это стандартный протокол, который обеспечивает безопасное соединение между двумя устройствами, защищая данные от несанкционированного доступа. Однако, не все конфигурации SSH обеспечивают достаточный уровень безопасности.
OpenSSH — это свободная реализация протокола SSH, широко используемая в системах Linux и Unix, в том числе на Ubuntu Server. В Ubuntu 22.04 LTS (Jammy Jellyfish) по умолчанию установлен OpenSSH 8.4, который, несмотря на свою безопасность, требует внимательной настройки.
Проблема заключается в том, что неправильная конфигурация OpenSSH может привести к уязвимостям, которые злоумышленники могут использовать для получения несанкционированного доступа к вашим серверам.
В этой статье мы рассмотрим лучшие практики для обеспечения безопасности SSH на OpenSSH 8.4 в Ubuntu Server 22.04 LTS с использованием ключей RSA, чтобы защитить ваши системы от угроз.
OpenSSH 8.4: ключевые особенности и преимущества
OpenSSH 8.4, поставляемый по умолчанию в Ubuntu 22.04 LTS, предлагает ряд ключевых функций, направленных на повышение безопасности и производительности. Среди них:
- Улучшенная криптография: OpenSSH 8.4 поддерживает более современные алгоритмы шифрования, такие как ChaCha20-Poly1305 и AES-256-GCM, которые обеспечивают более высокую скорость работы и лучшую защиту от криптоанализа. Совместимость с более старыми алгоритмами позволяет OpenSSH 8.4 устанавливать соединения с более ранними версиями OpenSSH.
- Усиленная защита от атак: OpenSSH 8.4 включает новые меры защиты от известных атак, таких как атаки по перебору паролей (brute force) и атаки с использованием уязвимостей в протоколе SSH.
- Повышенная гибкость конфигурации: OpenSSH 8.4 предоставляет более гибкие возможности настройки, что позволяет системным администраторам более точно управлять безопасностью и доступом к серверу.
Важно: Несмотря на преимущества OpenSSH 8.4, настройка безопасности SSH должна осуществляться внимательно. В следующих разделах мы рассмотрим конкретные шаги, которые нужно предпринять для обеспечения надежной защиты вашего сервера.
Ключи RSA: надежный метод аутентификации
Ключи RSA – это один из самых распространенных и надежных методов аутентификации в SSH. Он основан на асимметричной криптографии, которая использует пару ключей: публичный и приватный. Публичный ключ доступен всем, а приватный ключ должен храниться в тайне.
При использовании аутентификации по ключам RSA, клиент генерирует пару ключей RSA. Публичный ключ отправляется на сервер, а приватный ключ хранится на клиенте. Когда клиент пытается подключиться к серверу, он отправляет свой публичный ключ. Сервер проверяет публичный ключ в списке доверенных ключей. Если ключ найден, сервер генерирует случайное число и шифрует его приватным ключом. Зашифрованное число отправляется клиенту. Клиент расшифровывает число используя свой приватный ключ. Если число совпадает, аутентификация проходит успешно.
По данным NIST (Национальный институт стандартов и технологий США), RSA остается одним из наиболее безопасных алгоритмов асимметричного шифрования, используемых для защиты чувствительных данных. В 2020 году NIST выпустил рекомендации по использованию RSA с размером ключа не менее 2048 бит для обеспечения достаточного уровня безопасности.
Преимущества использования ключей RSA для аутентификации в SSH:
- Повышенная безопасность: Ключи RSA делают атаки с перебором паролей практически невозможными.
- Удобство использования: Ключи RSA позволяют избегать необходимости ввода паролей при каждом подключении к серверу.
- Совместимость: Ключи RSA широко поддерживаются в различных операционных системах и программах.
В следующих разделах мы рассмотрим процесс создания и использования ключей RSA в OpenSSH.
Безопасные настройки SSH: конфигурация sshd_config
Файл sshd_config – это главный конфигурационный файл сервера SSH, в котором хранятся все настройки, определяющие его работу. Правильная настройка sshd_config имеет ключевое значение для обеспечения безопасности вашего сервера SSH.
Отключение парольной аутентификации
Отключение парольной аутентификации – один из самых важных шагов по повышению безопасности вашего сервера SSH. Парольная аутентификация представляет собой слабое звено в системе безопасности, поскольку пароли могут быть украдены или угаданы.
По данным Verizon Data Breach Investigations Report за 2023 год, 39% всех кибератак связаны с использованием украденных или угаданных паролей. В этом контексте отключение парольной аутентификации в SSH становится критически важным шагом для защиты вашего сервера.
Чтобы отключить парольную аутентификацию, необходимо изменить настройки файла sshd_config. Найдите строку PasswordAuthentication и измените ее значение с yes на no:
PasswordAuthentication no
После изменения файла sshd_config необходимо перезапустить сервис SSH с помощью команды sudo systemctl restart ssh. После перезапуска сервиса SSH подключение к серверу будет возможно только с использованием ключей RSA.
Ограничение доступа по IP-адресам
Ограничение доступа по IP-адресам – еще один важный шаг по повышению безопасности SSH. Он позволяет запретить подключение к серверу с недоверенных IP-адресов, что делает ваш сервер менее уязвимым для атак.
В файле sshd_config вы можете указать конкретные IP-адреса или диапазоны IP-адресов, с которых разрешено подключение к серверу. Для этого используйте директиву AllowUsers. Например, чтобы разрешить подключение с IP-адреса 192.168.1.100, добавьте следующую строку в файл sshd_config:
AllowUsers user@192.168.1.100
Вы также можете использовать директиву AllowIPs, чтобы указать диапазон IP-адресов. Например, чтобы разрешить подключение с любого IP-адреса в подсети 192.168.1.0/24, используйте следующую строку:
AllowIPs 192.168.1.0/24
Важно заметить, что директивы AllowUsers и AllowIPs являются дополнительными и не отменяют ограничения доступа, установленные другими директивами, такими как PermitRootLogin и Port.
Настройка уровня шифрования
Настройка уровня шифрования в SSH имеет ключевое значение для защиты данных от несанкционированного доступа. OpenSSH 8.4 поддерживает широкий спектр алгоритмов шифрования, и выбор правильного алгоритма может значительно повысить уровень безопасности вашего сервера.
По результатам исследований NIST, алгоритмы шифрования ChaCha20-Poly1305 и AES-256-GCM являются наиболее безопасными и эффективными в настоящее время. Они обеспечивают высокую скорость шифрования и дешифрования и обладают высокой устойчивостью к криптоанализу.
Чтобы настроить уровень шифрования в OpenSSH, используйте директиву Ciphers в файле sshd_config. Например, чтобы использовать алгоритмы ChaCha20-Poly1305 и AES-256-GCM, добавьте следующую строку в файл sshd_config:
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com
После изменения файла sshd_config перезапустите сервис SSH с помощью команды sudo systemctl restart ssh.
Включение «StrictModes»
Директива StrictModes в файле sshd_config управляет строгостью проверки прав доступа к файлам и каталогам в системе SSH. По умолчанию StrictModes отключена, что может привести к уязвимостям, поскольку сервер SSH может позволить клиентам получить доступ к файлам, к которым они не должны иметь доступ.
Рекомендуется включить StrictModes, чтобы увеличить уровень безопасности. Для этого измените значение директивы StrictModes в файле sshd_config с no на yes:
StrictModes yes
После изменения файла sshd_config необходимо перезапустить сервис SSH с помощью команды sudo systemctl restart ssh. Включение StrictModes улучшает безопасность вашего сервера, но может вызвать проблемы с совместимостью с некоторыми старыми клиентами SSH. Если вы столкнулись с проблемами совместимости, вы можете временно отключить StrictModes, но рекомендуется использовать более современные клиенты SSH, которые поддерживают строгие режимы безопасности.
Использование «PermitRootLogin»
Директива PermitRootLogin в файле sshd_config управляет возможностью подключения к серверу от имени суперпользователя (root). По умолчанию PermitRootLogin включена, что делает сервер уязвимым для атак, так как злоумышленники могут попытаться получить доступ к серверу от имени root и получить полный контроль над системой.
Рекомендуется отключить PermitRootLogin, чтобы уменьшить риск компрометации сервера. Для этого измените значение директивы PermitRootLogin в файле sshd_config с yes на no:
PermitRootLogin no
После изменения файла sshd_config необходимо перезапустить сервис SSH с помощью команды sudo systemctl restart ssh. Отключение PermitRootLogin делает сервер более безопасным, но может вызвать проблемы с некоторыми скриптами и приложениями, которые требуют доступа к серверу от имени root. Если вы столкнулись с проблемами, вы можете временно включить PermitRootLogin, но рекомендуется использовать альтернативные методы доступа к серверу от имени root, например, используя sudo или других пользователей с привилегиями.
Аутентификация по ключам: повышение безопасности
Аутентификация по ключам – это наиболее безопасный метод доступа к серверу SSH, который позволяет избежать использования паролей. Вместо пароля используется пара ключей: публичный и приватный. Публичный ключ доступен всем, а приватный ключ должен храниться в секрете.
Генерация ключей RSA
Для генерации ключей RSA в OpenSSH используется утилита ssh-keygen.
Для генерации новой пары ключей RSA с использованием утилиты ssh-keygen выполните следующие шаги:
-
Откройте терминал и введите команду ssh-keygen -t rsa.
-
Вам будет предложено указать имя файла для хранения ключей. По умолчанию используется имя id_rsa. Вы можете изменить имя файла по желанию.
-
Вам будет предложено указать пароль для защиты приватного ключа. Рекомендуется использовать надежный пароль, который содержит не менее и включает в себя заглавные и строчные буквы, цифры и специальные символы.
-
После завершения процесса генерации ключей будет создано два файла: id_rsa (приватный ключ) и id_rsa.pub (публичный ключ).
Важно помнить, что приватный ключ id_rsa необходимо хранить в безопасном месте и не предоставлять его никому. Публичный ключ id_rsa.pub можно предоставлять другим пользователям или серверам, чтобы они могли установить с вами безопасное соединение SSH.
Настройка авторизации по ключам
После генерации ключей RSA необходимо настроить авторизацию по ключам на сервере SSH. Для этого нужно добавить публичный ключ в файл authorized_keys, который расположен в каталоге ~/.ssh на сервере.
Существует два способа добавить публичный ключ:
-
Добавление публичного ключа вручную.
Откройте файл authorized_keys в редакторе и добавьте в него содержимое файла id_rsa.pub, который был создан при генерации ключей RSA.
-
Добавление публичного ключа с помощью команды ssh-copy-id.
Команда ssh-copy-id автоматически добавляет публичный ключ в файл authorized_keys на сервере. Чтобы использовать эту команду, выполните следующие шаги:
-
Подключитесь к серверу SSH с помощью команды ssh user@server.
-
Введите пароль от пользователя user.
-
Введите команду ssh-copy-id user@server.
-
Введите пароль от пользователя user еще раз.
Команда ssh-copy-id автоматически копирует публичный ключ в файл authorized_keys на сервере.
-
После добавления публичного ключа в файл authorized_keys на сервере вы можете подключаться к серверу SSH без использования пароля.
Защита от брутфорса: предотвращение атак
Атаки по перебору паролей (brute force) — это один из самых распространенных методов взлома серверов SSH. Злоумышленники используют специальные программы, которые автоматически перебирают различные комбинации паролей, пока не найдут правильный.
Ограничение количества попыток входа
Ограничение количества попыток входа – эффективный метод защиты от атак по перебору паролей (brute force). Он запрещает подключение к серверу с одного IP-адреса после нескольких неудачных попыток входа.
В файле sshd_config вы можете настроить директивы MaxAuthTries и MaxStartups для ограничения количества попыток входа и запуска соединений SSH.
Директива MaxAuthTries устанавливает максимальное количество неудачных попыток аутентификации перед отключением соединения. По умолчанию ее значение равно 6. Чтобы увеличить безопасность, рекомендуется установить ее значение не менее 10.
Директива MaxStartups устанавливает максимальное количество запущенных соединений SSH с одного IP-адреса. По умолчанию ее значение равно 100. Чтобы увеличить безопасность, рекомендуется установить ее значение не менее 20.
MaxAuthTries 10 MaxStartups 20
После изменения файла sshd_config необходимо перезапустить сервис SSH с помощью команды sudo systemctl restart ssh.
Использование «Fail2ban»
Fail2ban – это бесплатный и open-source инструмент для защиты серверов от различных атак, включая атаки по перебору паролей. Он анализирует журналы системы и блокирует IP-адреса, с которых было зафиксировано слишком много неудачных попыток входа.
Fail2ban является отличным дополнением к стандартным механизмам защиты от брутфорса, так как он может быстро обнаружить и заблокировать злоумышленников, прежде чем они смогут нанести серьезный ущерб.
Чтобы установить Fail2ban в Ubuntu Server 22.04 LTS, используйте следующую команду:
sudo apt install fail2ban
После установки Fail2ban необходимо настроить его для мониторинга журнала SSH и блокировки IP-адресов с неудачными попытками входа. Для этого откройте файл конфигурации Fail2ban /etc/fail2ban/jail.conf и найдите секцию [ssh].
В этой секции вы можете настроить параметры Fail2ban, такие как:
- bantime – продолжительность блокировки IP-адреса в секундах (по умолчанию 600 секунд).
- findtime – промежуток времени в секундах, в течение которого Fail2ban будет мониторить журнал SSH (по умолчанию 600 секунд).
- maxretry – максимальное количество неудачных попыток входа перед блокировкой IP-адреса (по умолчанию 5).
После изменения файла конфигурации Fail2ban необходимо перезапустить сервис Fail2ban с помощью команды sudo systemctl restart fail2ban.
SSH-туннелирование: безопасный удаленный доступ
SSH-туннелирование – это мощный инструмент, который позволяет устанавливать безопасное соединение между двумя устройствами через промежуточный сервер. Он широко используется для безопасного доступа к удаленным ресурсам, таким как веб-серверы, базы данных и другие сервисы.
Настройка SSH-туннелей
Для настройки SSH-туннеля используется утилита ssh с опцией -N.
Например, чтобы настроить туннель с локального компьютера на удаленный сервер server на порт 22, используйте следующую команду:
ssh -N -L 8080:localhost:80 user@server
Эта команда создает туннель от локального порта 8080 на удаленный сервер server на порт 80. Любой трафик, отправленный на локальный порт 8080, будет перенаправлен на удаленный сервер server на порт 80.
Вы также можете использовать опцию -D для создания динамического туннеля. Динамический туннель позволяет перенаправлять трафик с любого локального порта на удаленный сервер.
Например, чтобы создать динамический туннель на локальный порт 1080, используйте следующую команду:
ssh -N -D 1080 user@server
После создания динамического туннеля вы можете использовать прокси-серверы, такие как Tor, через локальный порт 1080.
Использование SSH-туннелей для доступа к локальным ресурсам
SSH-туннели могут использоваться не только для доступа к удаленным ресурсам, но и для защиты доступа к локальным ресурсам.
Например, предположим, что вы находитесь в общественной Wi-Fi сети и хотите безопасно подключиться к веб-серверу, работающему на вашем локальном компьютере. В этом случае вы можете использовать SSH-туннель для перенаправления трафика с веб-сервера на ваш локальный компьютер через безопасное соединение SSH.
Для этого выполните следующие шаги:
-
Подключитесь к удаленному серверу SSH с помощью команды ssh user@server.
-
Создайте туннель от локального порта 8080 на удаленный сервер server на порт 80 с помощью команды ssh -N -L 8080:localhost:80 user@server.
-
Откройте браузер и введите адрес http://localhost:8080.
Теперь вы можете подключиться к веб-серверу, работающему на вашем локальном компьютере, через безопасное соединение SSH.
В этой статье мы рассмотрели лучшие практики для обеспечения безопасности SSH на OpenSSH 8.4 в Ubuntu Server 22.04 LTS с использованием ключей RSA. Мы узнали, как отключить парольную аутентификацию, ограничить доступ по IP-адресам, настроить уровень шифрования и включить StrictModes и PermitRootLogin. Мы также рассмотрели процесс генерации и настройки авторизации по ключам RSA. Кроме того, мы узнали, как защитить сервер от атак по перебору паролей с помощью ограничения количества попыток входа и использования Fail2ban. Наконец, мы рассмотрели возможности SSH-туннелирования для безопасного удаленного доступа к ресурсам.
Важно помнить, что безопасность SSH – это не одноразовая задача, а постоянный процесс. Регулярно обновляйте OpenSSH до последних версий и проверяйте настройки безопасности. Следуйте лучшим практикам и используйте надежные пароли.
Используя эти рекомендации, вы можете значительно увеличить безопасность вашего сервера SSH и защитить его от несанкционированного доступа.
В этой таблице представлены ключевые директивы файла sshd_config и их рекомендации по настройке для обеспечения безопасности SSH на Ubuntu Server 22.04 LTS:
| Директива | Описание | Рекомендуемое значение |
|---|---|---|
| PasswordAuthentication | Разрешает или запрещает парольную аутентификацию. | no |
| PermitRootLogin | Разрешает или запрещает вход от имени root. | no |
| StrictModes | Включает строгие проверки прав доступа к файлам. | yes |
| Port | Устанавливает порт SSH (по умолчанию 22). | Рекомендуется изменить порт на нестандартный. |
| AllowUsers | Указывает пользователей, которым разрешен вход. | Ограничить доступ только необходимым пользователям. |
| AllowIPs | Указывает IP-адреса или подсети, с которых разрешен вход. | Ограничить доступ только необходимым IP-адресам. |
| MaxAuthTries | Ограничивает количество попыток аутентификации перед блокировкой. | 10 или больше. |
| MaxStartups | Ограничивает количество запущенных соединений SSH. | 20 или меньше. |
| Ciphers | Указывает алгоритмы шифрования. | chacha20-poly1305@openssh.com,aes256-gcm@openssh.com |
В этой таблице представлено сравнение различных методов аутентификации в SSH, чтобы вы могли выбрать наиболее подходящий для ваших нужд.
| Метод аутентификации | Описание | Преимущества | Недостатки |
|---|---|---|---|
| Парольная аутентификация | Традиционный метод аутентификации, который требует ввода пароля при каждом подключении. | Прост в использовании. | Небезопасен, так как пароли могут быть украдены или угаданы. |
| Аутентификация по ключам RSA | Использует пару ключей: публичный и приватный. Публичный ключ предоставляется серверу, а приватный ключ хранится на клиенте. | Высокая безопасность, удобство использования. | Требует дополнительной настройки. |
| Аутентификация по ключам ECDSA | Использует алгоритм цифровой подписи на эллиптических кривых (ECDSA) для генерации и верификации цифровых подписей. | Высокая безопасность, более быстрая обработка ключей по сравнению с RSA. | Менее распространенный алгоритм по сравнению с RSA. |
| Аутентификация по SSH агенту | Использует специальный агент для хранения приватных ключей и автоматического ввода паролей для подключения к серверу. | Удобство использования, не требует ввода паролей при каждом подключении. | Небезопасен, если агент не защищен надежным паролем. |
| Аутентификация с помощью SSH ключевых фраз | Использует ключевую фразу для защиты приватного ключа. | Повышенная безопасность по сравнению с паролем. | Требует ввода ключевой фразы при каждом подключении. |
| Аутентификация с помощью Kerberos | Использует систему аутентификации Kerberos для проверки подлинности пользователя. | Высокая безопасность, не требует ввода паролей при каждом подключении. | Требует дополнительной настройки и конфигурации Kerberos. |
FAQ
Вопрос: Какую версию OpenSSH использует Ubuntu Server 22.04 LTS?
Ответ: Ubuntu Server 22.04 LTS использует OpenSSH 8.4.
Вопрос: Какие алгоритмы шифрования рекомендуется использовать в OpenSSH 8.4?
Ответ: Рекомендуется использовать алгоритмы ChaCha20-Poly1305 и AES-256-GCM. Эти алгоритмы обеспечивают высокую скорость шифрования и дешифрования и обладают высокой устойчивостью к криптоанализу.
Вопрос: Как отключить парольную аутентификацию в OpenSSH?
Ответ: Чтобы отключить парольную аутентификацию, измените значение директивы PasswordAuthentication в файле sshd_config с yes на no.
Вопрос: Как ограничить доступ к серверу SSH по IP-адресам?
Ответ: Используйте директивы AllowUsers и AllowIPs в файле sshd_config для указания доверенных пользователей и IP-адресов.
Вопрос: Как генерировать ключи RSA для аутентификации по ключам?
Ответ: Используйте утилиту ssh-keygen. Выполните команду ssh-keygen -t rsa и следуйте инструкциям на экране.
Вопрос: Как защитить сервер от атак по перебору паролей?
Ответ: Используйте ограничение количества попыток входа (директивы MaxAuthTries и MaxStartups) и инструмент Fail2ban для блокировки IP-адресов с неудачными попытками входа.
Вопрос: Как настроить SSH-туннель?
Ответ: Используйте утилиту ssh с опцией -N. Например, чтобы настроить туннель с локального компьютера на удаленный сервер server на порт 22, используйте следующую команду: ssh -N -L 8080:localhost:80 user@server.