web-dev-qa-db-ja.com

SSH / SSHD-最大ログイン試行回数を設定するにはどうすればよいですか?

LAMP環境(yum経由でインストールされたsshd)で最大ログイン試行をセットアップする最も簡単な方法は何ですか?パッケージまたは単純なファイアウォールルールはありますか?

17
John Himmelman

私は Fail2ban を使用します。私は過去に Denyhosts を使用しましたが、これも非常にうまく機能します。 Fail2banは、より構成可能であり、複数の異なるサービス(たとえば、sshdとWebアプリのログインページを同時に監視することを処理できる)を支持しています(失敗をログに記録する場合)。

考慮すべきもう1つの方法は、iptablesにLIMITルールを実装することです。 Shorewall をインストールしたくない限り、残念ながら私はこれを手伝うことはできません。それから、LIMITルールを構成する方法について、そのサイトの優れたドキュメントを紹介します。サーバーをブルートフォース攻撃する能力を制限します。

11
Kromey

サードパーティのツールを使用したくない。したがって、ssh構成とファイアウォール設定の組み合わせを使用しました。次の解決策を使用すると、攻撃者は2分間に正確に3つのフォールトログインを生成することができます。そうしないと、120秒間ブロックされます。

1)/etc/ssh/sshd_configに次の行を追加します

MaxAuthTries 1

これにより、接続ごとに1回のログインのみが許可されます。 sshサーバーを再起動します。

2)次のファイアウォールルールを追加します

新しいチェーンを作成します

iptables -N SSHATTACK
iptables -A SSHATTACK -j LOG --log-prefix "Possible SSH attack! " --log-level 7
iptables -A SSHATTACK -j DROP

各IPアドレスを120秒間ブロックし、120秒以内に4つ以上の接続を確立します。 4回目の接続試行の場合、リクエストはSSHATTACKチェーンに委任されます。これは、可能性のあるssh攻撃のロギングを担当し、最終的にリクエストをドロップします。

iptables -A INPUT -i eth0 -p tcp -m state --dport 22 --state NEW -m recent --set
iptables -A INPUT -i eth0 -p tcp -m state --dport 22 --state NEW -m recent --update --seconds 120 --hitcount 4 -j SSHATTACK

3)/var/log/syslogの可能なSSH攻撃のログエントリを参照してください

Dec 27 18:01:58 ubuntu kernel: [  510.007570] Possible SSH attack! IN=eth0 OUT= MAC=01:2c:18:47:43:2d:10:c0:31:4d:11:ac:f8:01 SRC=192.168.203.129 DST=192.168.203.128 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=30948 DF PROTO=TCP SPT=53272 DPT=1785 WINDOW=14600 RES=0x00 SYN URGP=0
44
My-Name-Is

これを設定するためのSSHに関連付けられた特定のパッケージはありません。ただし、ConfigServerとファイアウォールであるCSFをインストールできます。

[〜#〜] csf [〜#〜]

私が提案する2つの構成変更は、ファイルで行われます:/ etc/ssh/sshd_config

Sshサーバーが同時に処理する認証されていない接続の最大数を制限します。これが小さければ小さいほど、スクリプトキディが複数の接続で並行して調整されたクラッキングを試みるのが難しくなります。 sshd_configを編集して、MaxStartupsをデフォルトの「10」から「3:50:10」に変更します。コロンで区切られた値は、sshサーバーに対して、「3人のユーザーが同時にログインを試行できるようにし、3回から最大10回までの接続試行をランダムに、そして徐々にドロップすることを許可します」と指示します。注:相当数の有効なSSHユーザーがログインしているサーバーでは、これを増やす必要があります。

  • デフォルト:MaxStartups 10
  • MaxStartups 3:50:10

切断する前に正常にログインできる最大時間を減らします。デフォルトの2分は、認証されていない接続試行をオープンにしておくには長すぎる時間です(上記を参照)。 30秒は、ログインに十分な時間です。

  • デフォルト:LoginGraceTime 2m
  • LoginGraceTime 30
4
Brendan

私はこれにこれらのIPTablesルールを使用します:

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 300 --hitcount 4 --rttl  --name SSH -j DROP

これにより、IPアドレスからポート22へのTCP/SYNパケットは5分で4つしか許可されません。それ以上の試行を行う場合、ドアは5分が経過するまで閉じられます。

3
timkofu

サーバーのsshd_configファイルに追加できるオプションがあります。

 MaxAuthTries
         Specifies the maximum number of authentication attempts permitted per
         connection.  Once the number of failures reaches half this value, additional 
         failures are logged.  The default is 6.
1
mdpc