回答:
「エラーメッセージ」とは、クライアントプログラムによって表示されているテキスト文字列を意味していると思います。「メッセージ」という言葉は、後で参照するSSH認証プロトコルRFCで何らかのコンテキストを持っていますが、それがあなたがそれを使用している意味合いではないと思います。
SSHはTELNETのようなものだと思っていると思います。サーバーデーモンによって送信された任意のテキスト文字列がクライアントによって表示されます。SSHは、トークン化されたメッセージをバイナリ値の形式でクライアントとサーバーの間でやり取りする認証プロトコルを使用します。これらのトークン化されたメッセージの1つである「SSH_MSG_USERAUTH_BANNER」は、クライアントに任意のテキスト文字列を表示するように指示するために使用できます(必要に応じて)、これらのメッセージを適切なタイミングで送信するようにSSHデーモンを変更する必要があります。OpenSSHに、認証プロセスの任意の時点でSSH_MSG_USERAUTH_BANNERメッセージを送信する組み込み機能があるとは思いません。
認証が失敗した理由に関する追加情報をリモートの攻撃者に提供する理由を質問します。SSHクライアントは、SSHデーモンからトークン化されたメッセージを受信し、それに反応して失敗を通知するため、失敗したことを知っています。
編集:Evan Andersonは私よりも速く入力し、メッセージがサーバーサイズでカスタマイズできないことを確認しているようです。
バナーファイルはsshd_configで指定できます。バナーは、ログインプロンプトの前にすべてのユーザーに表示され、特定のドメインおよびアドレスからのログインのみが許可されることを示します。
SSHは、ログインをunix / bin / loginコマンドに渡すことができます。お使いのOSによっては、プロンプトとエラーをカスタマイズするオプションがありますか?
他に考えられることは、コードの編集と再コンパイルを意味するでしょう。また、攻撃者が情報を収集するのを防ぐために、エラーメッセージがサーバーからクライアントに文字列として送信されるのではなく、コードとして送信される可能性があります。(文字列でカスタマイズ可能な場合、誰かが「ログイン失敗。OpenSSH_3.7_p221032004」に設定します)
これは特にのipフィルターでsshd_config
は機能しませんが、を使用してPAMによって実装されたアクセス制御で機能しpam_echo.so
ます。
例えば:
account [success=2 default=ignore] pam_lastlog.so inactive=30
account optional pam_echo.so file=/path/to/lastlog_error_message.txt
account requisite pam_deny.so
account ...
このシナリオでは、認証されたユーザーが過去30日以内にログインしなかった場合/path/to/lastlog_error_message.txt
、SSH接続が閉じられる前に、その内容が標準出力にエコーされます。それらがチェックに合格した場合pam_lastlog
、評価はpam_echo
およびpam_deny
呼び出しをスキップして、残りのPAMモジュールの評価を続行します。