Вопрос или проблема
Я добавил следующее в свой 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)" до запроса пароля.
Шаги по решению проблемы:
-
Попробуйте использовать Directive
PermitRootLogin
:Параметр
PermitRootLogin prohibit-password
позволяет точно то поведение, которое вы хотите для учетной записи root, но его аналогия для других пользователей отсутствует. Можно попытаться адаптировать подобное поведение. -
Настройка использование ключа
DenyUsers
:Храните имена пользователей, которым необходимо запретить доступ, в директиве
DenyUsers
. Это приведет к одинаковому сообщению об ошибке для неверных пользователей и неверных паролей:DenyUsers USERNAME
Таким образом, даже если пользователь существует, попытка входа будет выглядеть как неправильный ввод пароля.
-
Использование PAM Modules для задержки:
Интеграция PAM (Pluggable Authentication Modules) может помочь в добавлении задержки при аутентификации, что оригинально обеспечивает искусственное ожидание для злоумышленников. Это усложнит их работу по брутфорсингу:
auth required pam_faildelay.so delay=5000000
Директива выше добавляет 5 секундную задержку ко всем неудачным попыткам входа.
-
Изменить сообщение отклонения:
Вы также можете изменить стандартные сообщения отказа через конфигурацию PAM или используя кастомные скрипты.
-
Использование Fail2ban:
Установите и настройте Fail2ban для блокировки IP адресов после нескольких неудачных попыток входа. Это обеспечит дополнительный уровень безопасности, защищая ваш сервер от несанкционированных попыток подключения.
Дополнительные рекомендации:
-
Отключение паролей глобально: Если возможно, отключите парольную аутентификацию полностью и позвольте доступ только через ключи:
PasswordAuthentication no
-
Логирование и мониторинг: Всегда следите за логами ssh и используйте инструменты мониторинга, чтобы замечать подозрительную активность.
-
Обновление системы: Регулярно обновляйте серверные компоненты безопасности для минимизации уязвимостей.
Данные шаги позволят вам минимизировать риск утечки информации о пользователях и сделают ваш сервер менее уязвимым для атак. Не забудьте протестировать изменения в конфигурации на тестовом сервере заранее.