Введение в безопасность SSH на Ubuntu
SSH (Secure Shell) — это протокол удаленного управления сервером, обеспечивающий защищенное соединение между клиентом и сервером. На Ubuntu серверах SSH обычно реализуется через демон
sshd, который настраивается через файл /etc/ssh/sshd_config. Несмотря на то, что SSH построен на надежных криптографических принципах, его неправильная настройка может создать уязвимости, позволяющие злоумышленникам получить доступ к системе.Эта статья охватывает комплексные меры защиты SSH на Ubuntu, включая управление ключами, настройку аутентификации, ограничения входа и интеграцию с системами защиты, такими как Fail2Ban.
Основные компоненты SSH на Ubuntu
На Ubuntu серверах SSH реализуется через пакет
openssh-server, который включает демон sshd и клиентские утилиты. Конфигурация демона осуществляется через файл /etc/ssh/sshd_config. Этот файл поддерживает множество директив, позволяющих настроить поведение SSH-сервера в зависимости от требований безопасности.Файл
/etc/ssh/sshd_config может включать дополнительные конфигурационные файлы из директории /etc/ssh/sshd_config.d/. Это позволяет разбивать конфигурацию на части и управлять отдельными аспектами безопасности.Управление аутентификацией через ключи
Использование аутентификации по ключам — один из важнейших способов повышения безопасности SSH. В отличие от пароля, ключи не подвержены атакам типа "brute-force" и могут быть защищены паролем.
Для настройки аутентификации по ключам необходимо:
- Генерировать пару ключей на клиенте с помощью
ssh-keygen.
- Копировать открытый ключ на сервер в файл
~/.ssh/authorized_keys.
- Отключить аутентификацию по паролю в файле
/etc/ssh/sshd_config.
Примеры директив для настройки аутентификации:
Код:
PubkeyAuthentication yes
PasswordAuthentication no
PermitRootLogin no
Важно: даже если
PasswordAuthentication выключена, PubkeyAuthentication должен быть включен, чтобы разрешить аутентификацию по ключам.Отключение входа под root
Включение входа под пользователем
root через SSH считается плохой практикой. Это делает сервер более уязвимым к атакам типа "brute-force", поскольку root — это самый привилегированный пользователь.Для отключения входа под
root в файле /etc/ssh/sshd_config необходимо установить:
Код:
PermitRootLogin no
Эта директива запрещает вход под
root через SSH, но не влияет на другие способы входа, такие как sudo.Использование Fail2Ban для защиты SSH
Fail2Ban — это инструмент, который автоматически блокирует IP-адреса, которые пытаются взломать SSH. Он следит за журналами и применяет правила, чтобы ограничить количество попыток входа.
Для установки Fail2Ban на Ubuntu:
Bash:
sudo apt install fail2ban
После установки необходимо настроить файл
/etc/fail2ban/jail.conf или создать собственный файл в /etc/fail2ban/jail.local.Пример конфигурации для SSH:
Код:
[sshd]
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
ignoreip = 127.0.0.1/8 ::1
Этот конфигурационный блок:
- Ограничивает количество попыток входа до 3.
- Блокирует IP на 1 час после превышения лимита.
- Исключает локальные адреса из блокировки.
Настройка SSH для устойчивости к атакам
Для повышения безопасности SSH рекомендуется изменить стандартные параметры:
- Смена порта SSH
По умолчанию SSH работает на порту 22. Смена порта на нестандартный может снизить частоту автоматизированных атак.
Пример:
Код:
Port 2222
- Ограничение времени бездействия
Директива
ClientAliveInterval позволяет завершать неактивные соединения, что снижает нагрузку на сервер и предотвращает использование устаревших сессий.Пример:
Код:
ClientAliveInterval 300
ClientAliveCountMax 3
Это означает, что соединение будет автоматически закрываться, если клиент не отправляет данные в течение 5 минут (300 секунд).
- Ограничение количества попыток аутентификации
Директива
MaxAuthTries позволяет ограничить количество попыток аутентификации:
Код:
MaxAuthTries 3
Настройка шифрования и алгоритмов
SSH поддерживает различные алгоритмы шифрования, хэширования и обмена ключами. Для повышения безопасности рекомендуется использовать современные алгоритмы.
Примеры директив:
Код:
Ciphers [email protected],[email protected],[email protected],aes256-ctr,aes128-ctr
MACs [email protected],[email protected],[email protected]
KexAlgorithms [email protected],diffie-hellman-group-exchange-sha256
HostKeyAlgorithms [email protected],[email protected],ssh-ed25519,ssh-rsa
Эти директивы:
- Задают список допустимых алгоритмов шифрования.
- Выбирают безопасные алгоритмы хэширования.
- Указывают безопасные алгоритмы обмена ключами.
Работа с пользовательскими правами и ограничениями
Для управления доступом к SSH можно использовать директивы
AllowUsers и DenyUsers.Пример:
Код:
AllowUsers alice bob
DenyUsers evil_user
Это позволяет ограничить доступ к SSH только определённым пользователям.
Использование chroot для изоляции пользователей
Директива
ChrootDirectory позволяет изолировать пользователя в отдельную директорию, что ограничивает его доступ к системным файлам.Пример:
Код:
ChrootDirectory /home/%u
Для работы
ChrootDirectory необходимо:- Создать необходимые файлы и устройства внутри директории.
- Убедиться, что права доступа к директории корректны.
- Запустить демон
sshdс правамиroot.
Логирование и мониторинг SSH
Для мониторинга активности SSH рекомендуется использовать логи в
/var/log/auth.log и /var/log/syslog.Для повышения безопасности рекомендуется:
- Включить подробное логирование в
/etc/ssh/sshd_config:
Код:
LogLevel VERBOSE
- Использовать инструменты мониторинга, такие как
auditd, для отслеживания действий пользователей.
Безопасные практики настройки SSH
- Не использовать стандартные порты
Изменение порта SSH на нестандартный (например, 2222) снижает частоту автоматизированных атак.
- Использовать только аутентификацию по ключам
Отключение аутентификации по паролю устраняет риск взлома с использованием слабых паролей.
- Ограничивать количество попыток входа
Директива
MaxAuthTries помогает противостоять атакам типа "brute-force".- Использовать современные алгоритмы шифрования
Использование современных алгоритмов шифрования повышает безопасность соединений.
- Включать Fail2Ban
Fail2Ban автоматически блокирует IP-адреса, которые пытаются взломать SSH.
Проверка конфигурации SSH
После внесения изменений в файл
/etc/ssh/sshd_config необходимо проверить его корректность:
Bash:
sudo sshd -t
Если конфигурация корректна, команда не выведет ошибок. После этого необходимо перезапустить демон
sshd:
Bash:
sudo systemctl restart sshd
Обновление и безопасность
Регулярное обновление пакетов
openssh-server и openssh-client помогает устранять уязвимости, найденные в прошлом.Для обновления:
Bash:
sudo apt update && sudo apt upgrade
Заключение
Настройка SSH на Ubuntu — это комплексный процесс, включающий управление аутентификацией, ограничения доступа, шифрование и мониторинг. Использование современных алгоритмов, отключение входа под
root, применение Fail2Ban и другие меры безопасности позволяют значительно повысить уровень защиты сервера.Следуя рекомендациям, описанным в этой статье, можно значительно снизить риски, связанные с использованием SSH на Ubuntu.
Чек-лист безопасности SSH
- [ ] Изменить стандартный порт SSH на нестандартный
- [ ] Отключить вход под
rootчерез SSH
- [ ] Отключить аутентификацию по паролю
- [ ] Включить аутентификацию по ключам
- [ ] Установить
MaxAuthTriesна 3
- [ ] Включить
ClientAliveIntervalиClientAliveCountMax
- [ ] Использовать современные алгоритмы шифрования
- [ ] Установить Fail2Ban
- [ ] Проверить конфигурацию через
sshd -t
- [ ] Перезапустить
sshdпосле изменений
- [ ] Обновить пакеты
openssh-serverиopenssh-client
- [ ] Включить подробное логирование
- [ ] Ограничить доступ по IP через
AllowUsers/DenyUsers
- [ ] Настроить
ChrootDirectoryпри необходимости
