web-dev-qa-db-ja.com

Bruteforce SSH攻撃からubuntuサーバーを保護する方法は?

パスワードは安全に保護されていますが、ブルートフォース攻撃が行われているときにサーバーのパフォーマンスが大幅に低下するという苦情を聞いたことがあります。 ubuntu 10.10サーバーをこのような攻撃から保護するにはどうすればよいですか?このための装甲プロファイルはありますか?またはそれに対処する他の方法はありますか?

21
Dziamid

さまざまな解決策があります。最良の方法は、公開鍵/秘密鍵を使用してユーザーを認証するRSA認証を使用することです。

さまざまなアプローチについては、この素晴らしいマニュアルを参照してください(RSA認証を含む): http://www.la-samhna.de/library/brutessh.html

私はサーバーで 番目のソリューション を使用しています。なぜなら、技術に詳しくないユーザーにとっては複雑にしたくないからです。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 recent --update --seconds 60 --hitcount 4 --rttl --name SSH -j LOG --log-prefix "SSH_brute_force "
iptables -A INPUT -p tcp --dport 22 -m recent --update --seconds 60 --hitcount 4 --rttl --name SSH -j DROP

前述のように、 here :これにより、60秒以内に任意のIPアドレスから3つのポート22接続が許可され、接続の許可を再開するまで60秒の接続試行は必要ありません。 --rttlオプションは、パケットの照合時にデータグラムのTTLも考慮に入れて、スプーフィングされた送信元アドレスに対する緩和に努めます。

前述のガイドで述べたように、ホワイトリストを使用して、信頼できるユーザーをこれらのルールから分離することをお勧めします。

iptables -N SSH_WHITELIST

次に、信頼できるホストを追加します。

iptables -A SSH_WHITELIST -s $TRUSTED_Host -m recent --remove --name SSH -j ACCEPT

その後、ルールを作成します。

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j SSH_WHITELIST
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 --rttl --name SSH -j ULOG --ulog-prefix SSH_brute_force
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 --rttl --name SSH -j DROP
19
Pedram

サーバーでブルートフォースのssh攻撃が1日に1〜2の割合で発生します。 denyhosts (ubuntuパッケージ:denyhosts)をインストールしました。これは、その目的のための非常にシンプルですが効果的なツールです。基本的にログを定期的にスキャンしてブルートフォース攻撃を検出し、これらの攻撃の発信元のIPを/etc/hosts.denyファイルに入れます。あなたは再び彼らから話を聞くことはなく、あなたの負荷はかなり減らされるはずです。構成ファイル/etc/denyhosts.confを介して非常に構成可能であり、攻撃を何回試行するかなどの問題を調整します。

透過的な動作により、何が起こっているかを簡単に確認でき(電子メール通知:「あぁ、もう1つの卑劣な攻撃が阻止されました!」)、ユーザーがパスワードを繰り返し間違って入力したことによるミスを元に戻します。

もちろん、他の認証方法への切り替えについて前述したことはすべて有効ですが、要件がユーザーの要件と一致しない場合があります。

また、iptablesでの新しい接続レート制限は、hosts.denyを介したアクセスを拒否するよりも良い選択かもしれません。したがって、fail2banもご覧ください。ただし、ssh brute-forceが主な懸念事項であることがわかっている場合(手動で/var/log/auth.logを調べて確認してください)、この非常に簡単で影響の少ないツールを使用してください。

8
DrSAR
  1. Sshdポートを非標準のものに変更します
  2. knockdを使用してport-knockingシステムを実装します
  3. Iptablesのrecentおよびhashlimit一致を使用して、連続したSSH試行を制限します
  4. パスワードを使用しないで、代わりにSSHキーを使用します
6
pepoluan

まず、パスワードを使用せず、代わりにキーを使用することを検討する必要があります。パスワードを使用する必要はありません。これがうまくいく場合は、パスワードログインに反応しないようにOpenSSHサーバーを構成できます。

https://help.ubuntu.com/10.04/serverguide/C/openssh-server.html

Fail2banを使用することもオプションです。

https://help.ubuntu.com/community/Fail2ban

3
ddeimeke

世界中へのSSHサービスを許可するつもりですか?または、特定の場所のチームメンバーにのみ?私の答えはあなたの挑戦の厳しさに少し依存します。

いずれの場合でも、SSHサーバーがルートユーザーのパスワードログインを許可しないようにする必要があります。

  1. / etc/ssh/sshd_configで、SSHキーを使用しない限り、rootログインを許可しないでください。

私のシステムでは、この設定を持っています

PermitRootLogin without-password

しかし、私は彼らが持っている新しいUbuntuで気づきます

PermitRootLogin prohibit-password

「man sshd_config」を読んだ場合、この新しい「禁止パスワード」は同じことを意味し、確かに意味がより明確であることを意味すると思います。これは一部のLinuxシステムではデフォルトではありませんが、おそらくそうであるはずです。

さて、あなたの問題について。システムサーバーは特定の場所の一部のユーザーのみですか?これを行う!

  1. /etc/hosts.denyを編集して挿入

    すべて:すべて

次に/etc/hosts.allowを編集して、SSHの使用を許可するIP番号または範囲をリストします。 111.222.65.101から111.222.65.255のようなIP番号を持つすべてのシステムを許可する場合、hosts.allowにこのようなエントリを入力するため、表記は少しわかりにくいです。

ALL: 127.0.0.1
sshd: 111.222.65.
sshdfwd-X11: 111.222.65.

それはブルートフォースの強力なソリューションです。 IP範囲でユーザーを列挙できる場合は、実行してください!

このソリューションは、IPテーブルが作成される前から存在していましたが、管理ははるかに簡単です(ただし、IPテーブルソリューションほど良くはありません)。なぜなら、IPテーブルルーチンは、hosts.allowおよびhostsによって駆動されるプログラムよりも早く敵を発見するからです.deny。しかし、これは確かな火事であり、SSHだけでなく、多くの問題を解決する簡単な方法です。

自分で作成した問題に注意してください。 FTPサーバー、Webサーバーなどを開くには、ホストのエントリを許可する必要があります。

Iptablesとファイアウォールをいじることで、同じ基本的な目的を達成できます。ある意味では、外側の境界で敵をブロックしているため、これは好ましい解決策です。 Ubuntuには「ufw」(複雑でないファイアウォール)があり、「man ufw」には多くの例があります。私はむしろこれを通り抜けるニースのGUIを持ちたいです、私はこれをいつもする必要はありません。たぶん他の人が今あるかどうかを教えてくれるかもしれません。

  1. ここの他の投稿では、ユーザーのみにSSH公開キーを使用することを提案しています。それは確かに、ユーザーの複雑さとフラストレーションを犠牲にして役立ちます。このラボには15台のコンピューターがあります。ユーザーはコンピューター間を行き来します。 SSHキー認証を要求すると、ユーザーは1台のコンピューターから次のコンピューターに移動するため、大きな手間がかかります。

一部のユーザーがさまざまなサーバーの異なるsshキーを蓄積すると、フラストレーションの別の原因が発生します。約12の異なるプロジェクトのSSHキーがあるため、公開キーが多すぎるためsshが失敗します(「ssh -o PubkeyAuthentication = false」または.ssh/configファイルにエントリを作成する必要があります。これはPITAです)

  1. 広い世界からSSHに対してサーバーを開いたままにする必要がある場合は、拒否ルーチンを使用して、頻繁にログインしようとする場所をブロックする必要があります。これには2つの素晴らしいプログラムがあります。使用したプログラムはdenyhostsとfail2banです。 。これらのプログラムには、好きな期間、犯罪者を禁止できる設定があります。

Centos Linuxシステムでは、denyhostsパッケージが削除され、fail2banのみが提供されていることに気付きました。面倒なユーザー/ IP範囲のリストを作成し、hosts.denyでそのリストが記録されたため、denyhostsが気に入った代わりにfail2banをインストールしましたが、問題ありません。私の理解では、サーバーの外側のエッジでこれらの悪いユーザーをブロックしたいので、fail2banのようなIPテーブルベースのブロッカーは実際には優れています。 Denyhostsはセカンダリレベルで動作し、敵がiptablesを通過した後、sshdデーモンによって拒否されます。

これらのプログラムの両方で、ユーザーがパスワードを忘れてログインを数回試みた場合、ユーザーを刑務所から退出させるのは少し退屈です。ログインミスをしたときにユーザーを元に戻すのは少し難しいです。ポイントしてクリックするだけでポイントして、人々を元に戻すことができるGUIがあると推測していましたが、そうではありません。私はこれを数ヶ月ごとに行うだけで、その間の方法を忘れているので、自分のウェブページに自分のための指示を書きました http://pj.freefaculty.org/blog/?p=301

0
pauljohn32

Fail2banに代わるものはCSFです: ConfigServer Security&Firewall

LFD:さまざまなサービスで複数回失敗したログイン試行を検出でき、問題のIPアドレスを(一時的または永続的に)ブロックするログイン失敗デーモンが付属しています。

フラッド攻撃を防ぎ、侵入を検出する可能性のある他のオプションがいくつかあります。

短所:

  • LFDが機能するためには、CSFをファイアウォールとして使用する必要があります。したがって、既存のファイアウォールがある場合は、それをCSFに置き換え、構成を移植する必要があります。
  • Ubuntu用にはパッケージ化されていません。 configserver.comからの自動更新を信頼するか、自動更新を無効にする必要があります。
  • それは非常に人気があると聞いたので、賢い侵入者はおそらく侵入検知を検出する前に無効にする方法を知っているでしょう!
0
joeytwiddle

サーバーはネットワーク上でどれくらい広く公開されていますか?おそらく、ネットワーク管理者と話し合い、サーバーへのネットワークアクセスを監視および制限できるかどうかを確認できます。アカウントへのログインが安全であっても、サーバーは単純なDoS/DDoS攻撃を受ける可能性があるようです。

0
bitwelder