web-dev-qa-db-ja.com

sshd_configでは、 'MaxAuthTries'は接続ごとの認証失敗の数を制限します。接続とは何ですか?

LinuxマシンでMaxAuthTriesを1に設定しました。次に、ローカルネットワーク上の別のマシンからLinuxマシンにsshを挿入しようとしましたが、「Too many authentication failures "。

これは、セットアップ中に障害が発生したことが原因であると想定しています。

manページには次のように書かれています。

MaxAuthTries接続ごとに許可される認証試行の最大数を指定します。失敗の数がこの値の半分に達すると、追加の失敗がログに記録されます。デフォルトは6です。

接続とは何ですか?これは、特定のIPアドレスからのみMaxAuthTriesを取得することを意味しますか?これはTCP接続を参照していますか?新しい接続を作成してsshを再試行できるように、接続を強制終了するにはどうすればよいですか?

https://linux.die.net/man/5/sshd_config

5
ptjetty

SSHの場合、接続はsshdのTCPポート(通常はポート22)への確立された接続の1つです。Omcesshdは、それ以上の認証試行の受け入れを停止します接続を閉じ、この時点で接続が行われます。

ユーザーが認証を試みる前に、SSHプロトコルは暗号化と他のプロトコルオプションのネゴシエーション、セッションキーの確立、およびホストキーの交換を必要とします。そのため、新しい接続ごとにかなりの作業が必要になります。複数のソースからのSSH接続試行の嵐がサーバーのDoSに確実に使用される可能性があります。

認証の試行は、sshd構成で現在有効になっている認証方法の1つの試行です。例えば:

  • クライアントが認証用のSSHキーを提供する場合、提供される各キーは1回の試行としてカウントされます。
  • kerberos/GSSAPI認証方法が有効になっている場合、クライアントがそれを使用して認証できるかどうかを確認すると、1回の試行としてカウントされます
  • パスワード認証プロンプトに入力された各パスワードは、明らかに1つとして数えられます。

最初の2つは、発生している状況を引き起こす可能性があります。MaxAuthTriesを1に設定し、Kerberos/GSSAPI認証が有効になっている場合、パスワード認証を試行する前に、1回の試行が失敗する可能性があります。同様に、SSHクライアントで利用可能な認証キーがあっても、宛先システムの宛先ユーザーの~/.ssh/authorized_keysに公開キーを追加していない場合、公開キー認証の試行は1回の試行で失敗し、 tパスワード認証を試すこともできます。

通常はパスワード認証を処理するPAMライブラリであるpam_unixは、デフォルトでは認証試行の失敗後2秒の遅延を強制します。

主な脅威が、インターネット内の他の危険にさらされたシステム上のパスワードを推測するワームとボットである場合、MaxAuthTriesを減らすのは悪いことかもしれません。ボットは疲れないので、常に再接続して再試行します。試行するたびに、SSHプロトコルネゴシエーションにCPU容量を費やす必要があります。まず、ボットが成功しないであることを確認し、次にボットが可能な限り多くの時間を浪費するで、既存の1つの接続であなたへの最低費用。 1つの接続で複数の認証試行を許可しますが、応答します...非常に...ゆっくりと...それはまさにそれを行います。

これが、パスワード認証が完全に無効になっている場合でも、sshdがクライアントにパスワードを要求する理由でもあります。プロンプトは完全に偽造されており、どのパスワードを入力してもクライアントは拒否されます。しかし、クライアントは確実にそれを知る方法がありません。

もちろん、1つの接続で認証の試行回数が多すぎると、ボットプログラマーがタイムアウトを実装してそのような「タールピット防御」の有効性を制限した場合、ボットは最終的にその側から接続を終了する可能性があります。

8
telcoM

広義には、接続とは、特定のユーザーとして接続しようとする試みのことです。

pam_tallyまたはpam_tally2コマンドは、使用しているディストリビューションに応じて、ここで役立ちます。次のコマンドは、特定のユーザーに対して発生した失敗の数を示します。

pam_tally --user=username

特定のユーザー用にリセットするには:

pam_tally --reset

すべてのユーザー向け:

pam_tally --reset user=username

リセットされたことを確認するには:

pam_tally --username=user

コマンドpam_tallyまたはpam_tally2をオプションなしで実行すると、試行が失敗したかロックアウトされているすべてのユーザーが表示されます。持っている場合は、必ずpam_tally2に変更してください。

1
Nasir Riley

これは少し水晶玉の注視ですが、接続はそれとまったく同じです。クライアントで接続の多重化と残留(ControlMasterControlPersist)に関するオプションを明示的に設定しない限り、接続はすぐに終了します。

私が推測していること(そしてssh -vは検証に役立ちます。「秘密鍵を試す」に注意してください)は、そのマシンに対してパスワードベースの認証を使用したいということです。ただし、クライアントのパスワードなしの認証用のキーペアは~/.sshにある可能性があります。標準の設定では、パスワードよりもキーが優先されるため、sshはキーを提供し、サーバーはそれを好まないため、許可されていない場合は失敗します。 (テーマのバリエーション:複数の鍵ペアがセットアップされていて、そのうちの1つだけがサーバーで許可されている場合があります。)-oPreferredAuthentications=keyboard-interactive,passwordを使用して、提供する認証メカニズムをオーバーライドできます。ベースでは、パスワードプロンプトを使用して、ログインしてサーバーの値をより高く設定できるようにする必要があります。

1
Ulrich Schwarz