Как предотвратить входы по паролю SSH без раскрытия имен пользователей

Вопрос или проблема

Я добавил следующее в свой sshd_config:

Match User USERNAME
  PasswordAuthentication no
Match all

и хотя это действительно блокирует входы по паролю через ssh, это также выявляет имя пользователя, выводя

Permission denied (publickey)

до того, как будет введён пароль.

Как я могу предотвратить вход по паролю через ssh, не раскрывая существование пользователя? Если кто-то пытается войти как USERNAME, я хочу, чтобы сервер тратил их время, притворяясь, что собирается принять пароль, аналогично тому, как PermitRootLogin prohibit-password работает для пользователя root. Можно ли это сделать?

С помощью

DenyUsers USER1 USER2 USER3

любая попытка войти как один из этих пользователей даст тот же результат, что и неверный пароль.

Смотрите man sshd_config для подробностей.

Ответ или решение

Для предотвращения входа по паролю через SSH без утечки информации о наличии пользователя, необходимо более тщательно настроить конфигурацию sshd_config. Проблема с подходом, используемым во фрагменте конфигурации, заключается в том, что она явно указывает на существование пользователя, возвращая сообщение "Permission denied (publickey)" до запроса пароля.

Шаги по решению проблемы:

  1. Попробуйте использовать Directive PermitRootLogin:

    Параметр PermitRootLogin prohibit-password позволяет точно то поведение, которое вы хотите для учетной записи root, но его аналогия для других пользователей отсутствует. Можно попытаться адаптировать подобное поведение.

  2. Настройка использование ключа DenyUsers:

    Храните имена пользователей, которым необходимо запретить доступ, в директиве DenyUsers. Это приведет к одинаковому сообщению об ошибке для неверных пользователей и неверных паролей:

    DenyUsers USERNAME

    Таким образом, даже если пользователь существует, попытка входа будет выглядеть как неправильный ввод пароля.

  3. Использование PAM Modules для задержки:

    Интеграция PAM (Pluggable Authentication Modules) может помочь в добавлении задержки при аутентификации, что оригинально обеспечивает искусственное ожидание для злоумышленников. Это усложнит их работу по брутфорсингу:

    auth required pam_faildelay.so delay=5000000

    Директива выше добавляет 5 секундную задержку ко всем неудачным попыткам входа.

  4. Изменить сообщение отклонения:

    Вы также можете изменить стандартные сообщения отказа через конфигурацию PAM или используя кастомные скрипты.

  5. Использование Fail2ban:

    Установите и настройте Fail2ban для блокировки IP адресов после нескольких неудачных попыток входа. Это обеспечит дополнительный уровень безопасности, защищая ваш сервер от несанкционированных попыток подключения.

Дополнительные рекомендации:

  • Отключение паролей глобально: Если возможно, отключите парольную аутентификацию полностью и позвольте доступ только через ключи:

    PasswordAuthentication no
  • Логирование и мониторинг: Всегда следите за логами ssh и используйте инструменты мониторинга, чтобы замечать подозрительную активность.

  • Обновление системы: Регулярно обновляйте серверные компоненты безопасности для минимизации уязвимостей.

Данные шаги позволят вам минимизировать риск утечки информации о пользователях и сделают ваш сервер менее уязвимым для атак. Не забудьте протестировать изменения в конфигурации на тестовом сервере заранее.

Оцените материал
Добавить комментарий

Капча загружается...