Я получаю много атак на вход в систему по протоколу SSH и хочу сократить их количество. Есть ли способ указать команду для выполнения openssh и проверить возвращаемое ею значение, а также разрешить попытку входа только в том случае, если эта команда возвращает 0?
Причина этого в том, что я хотел бы иметь возможность иметь более сложные правила входа в систему, которые я мог бы выразить в скрипте, а не через простые правила на основе файлового экрана/IP.
решение1
Да, с достаточно современным openssh есть трюк: используйте AuthorizedKeysCommand. Этот параметр конфигурации позволяет вам указать внешнюю команду для получения ключей SSH. Здесь вы можете поместить логику, например, получение ключей SSH из LDAP, но также и любую другую логику, которую вы хотите. Пока вы принимаете только аутентификацию на основе ключей, отсутствие возврата ключей приведет к сбою аутентификации.
В старых версиях openssh можно использовать ForceCommand, но это принудительная команда.послеаутентификация, а не команда, которая выполняетсядоаутентификация. Однако он работает как с аутентификацией на основе пароля, так и с аутентификацией на основе ключа.
Если вы хотите поддерживать аутентификацию на основе пароля и хотите подключиться к фазе аутентификации, вам нужно будет написать свой собственный модуль PAM и сделать его обязательным для аутентификации SSH. Это не самый тривиальный способ, и он не вызывается для аутентификации на основе ключа.
Если все, что вам нужно, — это заблокировать IP-адреса, на которых слишком много неудачных попыток аутентификации, fail2ban также может вам помочь, не требуя никаких изменений в настройках SSH.