SSH ログイン攻撃を頻繁に受けているので、それを減らしたいと思っています。openssh に実行させるコマンドを指定してその戻り値をチェックし、このコマンドが 0 を返す場合にのみログイン試行を許可する方法はありますか?
その理由は、単純なファイルウォール/IP ベースのルールではなく、スクリプトで表現できる、より複雑なログイン ルールを設定できるようにしたいからです。
答え1
はい、十分に新しい openssh には、AuthorizedKeysCommand を使用するというトリックがあります。この構成オプションを使用すると、SSH キーを取得するための外部コマンドを指定できます。ここには、LDAP から SSH キーを取得するなどのロジックを配置できますが、その他の必要なロジックも配置できます。キーベースの認証のみを受け入れる限り、キーを返さないと認証は失敗します。
opensshの古いバージョンではForceCommandを使用できますが、これは強制コマンドです。後実行されるコマンドではなく認証前に認証。ただし、パスワードとキーベースの認証の両方で機能します。
パスワード ベースの認証をサポートし、認証フェーズにプラグインする場合は、独自の PAM モジュールを作成し、それを SSH 認証に必須にする必要があります。これは最も簡単な方法ではなく、キー ベースの認証では呼び出されません。
認証失敗が多すぎる IP アドレスをブロックしたいだけの場合は、SSH 設定を変更することなく、fail2ban も役立ちます。