web-dev-qa-db-ja.com

bruteforcingからSSHサーバーを保護する

私は小さなSVNサーバー、debianを実行している古いDell optiplexを持っています。ほんの少しのSVNサーバーなので、サーバーにそれほど高い要求はありません...しかし、安全であることを望んでいます。

サーバーをより新しく、より優れたOptiPlexに更新し、古いサーバーを少し調べ始めました。問題が発生した後、削除しました。ログを確認すると、ブルートフォース攻撃でいっぱいで、どういうわけか誰かが私のマシンに侵入することに成功しました。この人物は、「root」と「swap1」の2つのディレクトリを持つ「knarkgosse」と呼ばれる追加のボリュームを作成しました。なぜ、何をしているのかはよくわかりませんが、これが二度と起こらないようにしたいと思います。数か月かそこらでパスワードを変更し、パスワードは常にランダムな文字と数字を組み合わせたものであるため、これは少し奇妙だと思います...ブルートフォース攻撃は簡単ではありません。

Rootがログインするのを防ぎ、sudoersを使用してSSHポートを変更できることはわかっていますが、これ以上何ができますか?

だから私はいくつかの質問があります:

  1. X回の不正な試行の後、5分間ログインできないようにするにはどうすればよいですか。または、正しくない試行のたびにゆっくりと試行しますか?

  2. サーバーが接続できるある種の中央ブラックリストはありますか? 「安全ではない」IPアドレスを追跡し、アクセスを許可してはならないブラックリスト?

  3. サーバーに安全性を適用するためにこれ以上何ができますか?

前に言ったように、私はApache(www-dataユーザーの問題?)、svn、mysql、php、phpmyadmin、hudsonでDebian5を実行しています。これは、80、443、8080、8180、23、および22にポート転送を行うホームネットワーク上にあります。

14
Paul Peelen

Fail2ban および Port Knocking は、ほとんどのニーズに対応します。

SSHポートを変更し、キーベースの認証のみを許可することもお勧めします。

セキュリティ対策を追加することで収益が減少するポイントに到達する可能性があると主張できますが、繰り返しになりますが、いつ「十分に安全」であるかを決定するのはあなた次第です。

Rootログインを禁止するのも良い考えです。

18
gWaldo

安全なパスワードとキー認証に代わるものはありません。つまり、 Fail2Ban は、何度も認証を試みたユーザー。ほとんどのディストリビューションでは、ビルド済みパッケージとしても利用できます。注意してください、あなたは誤ってあなた自身が禁止される可能性があるので、あなたが回復ホワイトリストに載っているIPも持っているか、簡単なコンソールアクセスを持っていることを確認してください...

Fail2Banには、すべての設定方法の良い例がいくつかありますが、不良アドレスのユニバーサルリポジトリはありません。別のIP(dhcp renew/bot-netattacksなど)を簡単に取得できるため、このようなリポジトリはどこにもないと思います。また、一般的な「administrator」タイプのユーザー名(root/admin/administrator/sysop/etc ..)を使用して、ssh経由でのログインを無効にします。これは、これらが最も一般的に使用されているためです。

7
TheCompWiz

私は以下でブルートフォース攻撃を止めました:

5
Andreas Rehm

ここでは、いくつかの良い提案が提供されています。私は敬意を表して、これを比較的安全にするために3つのことを提案します。

  1. ランダムなハイポートでsshdを実行します。ボットは通常、ポート22と2222のようなポート22のバリエーションのみを追跡します。
  2. Sshd設定でパスワードベースの認証を無効にします。

UsePAMいいえ

  1. このサイトで認証されるのは、事前共有されたSSH鍵ペアのみです。 PKIベースの認証を開始するssh-keygenの男。

お役に立てれば。

私は常に CSF/LFD の大ファンであり、ブルートフォース、ポートスキャン、およびその他のいくつかのオプションを試行している人々のIPアドレスをブロックできます。これは基本的にIPテーブル用の巨大なPerlラッパーですが、構成ファイルは読みやすく、ドキュメントも悪くありません。

1
Sweet

Sshguardを調べることもできます。使ったことはありませんが、いいことは聞いています。

出典:
http://isc.sans.edu/diary.html?storyid=937

http://www.sshguard.net/

http://www.sshguard.net/docs/faqs/

「Sshguardはサーバーのロギングアクティビティを監視します。ログが誰かが悪いことをしていることを伝えると、sshguardはその人を少しブロックすることで反応します。Sshguardは微妙な性格を持っています。いたずらなタイクがホストの邪魔をすると主張すると、反応します。よりしっかりと。」

1
caleban

デフォルトのポートでインターネットに接続されたSSHサーバーがあり、問題を経験したことがありません。

  • sSH用のtcp_wrappers(つまり、hosts.allow hosts.deny)..サポートがコンパイルされていないSSHがそこにあるとは思わない
  • iptablesとtcp_wrappersを組み合わせることで、ランダムポートスキャン/ブルートフォース攻撃の約99%が排除されました。唯一の問題は、これらのIP/IP範囲を許可するためにどこから接続するかを知る必要があることです。私の地域で人気のあるプロバイダーを検索して、IP範囲を確認し、それらを許可します。ほとんどのスキャンは、遠く離れた土地から行われているようです:)
  • パスワードなしのPermitRootLogin(つまり、パスフレーズで暗号化されたRSA/DSAキーペアのみ)は、自動化されたタスクに最適です。ログインして対話するときは、明らかにSudoアクセスで構成されたアカウント(通常)を使用します。
  • sudoers
  • 定期的な更新..私はこのボックスをすべてのセキュリティ/重要な更新で頻繁に更新します
  • パスワード/パスフレーズの変更
  • 時々chkrootkitを実行して、問題が発生していないかどうかを確認します。(この機能を実行するものがいくつかあります)

それが役に立てば幸い!

1
alex

これを行うためのより良い方法があります。fail2banを使用すると、アプリケーションを追加する必要があり、アプリケーション層で動作します。

Iptablesを使用すると、ネットワーク層で動作し、追加のアプリケーションをインストールする必要がないため、より効率的です。

Iptables最近のモジュールを使用 http://www.snowman.net/projects/ipt_recent/

iptables -N SSHSCAN
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j SSHSCAN
iptables -A SSHSCAN -m recent --set --name SSH
iptables -A SSHSCAN -m recent --update --seconds 300 --hitcount 3 --name SSH -j LOG --log-level info --log-prefix "SSH SCAN blocked: "
iptables -A SSHSCAN -m recent --update --seconds 300 --hitcount 3 --name SSH -j DROP
iptables -A SSHSCAN -j ACCEPT
1
topdog

(他のセキュリティ対策に加えて使用される)オプションは、22以外のポートでsshdをリッスンすることです。私自身は試していませんが、ボットによる純粋なブルートフォース攻撃の数を減らすと聞いています。

これは本当のセキュリティではなく、自動ブルートフォース攻撃の数を減らすだけであることを強調しておきます。私が推測するすべてのポートをチェックするにはあまりにも多くの作業。

0
pfyon

私にとって何が効果的でしたか:

  1. 他の人が言っているように、sshd_configではrootログインはなく、PasswordAuthenticationはno(キー付きのログインのみ)に設定されています

  2. 1人または2人のユーザーのみがssh経由でのログインを許可し、一般的なブルートフォースツールのユーザー名リストに含まれていない(つまり、「admin」、「Apache」、「web」、「ジョニー」)

  3. 制限的なファイアウォールルール(基本的に、すべてがブロックされていますが、サービスポートとSSH)。私はpingを制限して、より粗雑なスキャンを回避します(私のパートナーの悔しさの多くに)。

  4. 私のウェブホストでは、特定のいくつかのIPアドレスへのアクセスを制限していますが、これはあなたの選択肢ではないようです。確かに、すべてのホストで自分でそれを行うことはできません。また、「ポートノッキング」を調べることもできます。

  5. そして私のお気に入り:OSSECのアクティブな応答モジュールは、ブルートフォース状態の数をブロックし、他のエラーについても警告します。 y時間以内にx個の無効なログインを検出し、一定期間ブロックします(iptablesfirewall-dropコマンドを使用)。私は楽しみのために今約12時間ブロックしています。 :)

間違ったことをあまりブロックしないようにするためにここで行うことの1つは、/ etc/ossec.confで、アクティブな応答を高レベル(デフォルト構成には存在しない)に設定してから、 sshd_rules.xmlに目を通し、ブロックするルールをそのレベルに設定し、必要に応じてブロックとアラートのしきい値を変更します。

Apacheを実行している場合は、Apacheルールに違反するものもブロックできます。 NATの問題のため、これらをブロックしません。大学全体などをブロックすることを検討したいと思います。:)さらに、特定の条件でブロックするカスタムルールを作成できます。ログファイルで、これは非常に役立ちます。

0
jen_h

ここで言及されておらず、実際にすべきことは、ファイアウォール経由のアクセスを制限することです。これはすべての状況に適しているわけではありませんが、静的IPを使用して一貫した場所からホストに接続している場合は、そのIP以外のSSHを完全にブロックすることができます。これにより、侵入者が侵入できないようになります。ただし、前述したように、特にIPが動的で頻繁に変更される場合は、必ずしもすべての状況に適しているとは限りません。

0
vmfarms

DenyHosts、 http://denyhosts.sourceforge.net/ は、私が運が良かった良いプロジェクトです。同期するようにdenyhostsを設定すると、新しいIPがダウンロードされ、拒否リストに追加された拒否リストに追加され、denyhostsを使用して他のシステムにブルートフォースを適用する必要がありました。また、しばらくブルートフォースを試みていないIPも期限切れになります。

公開鍵認証を使用し、パスワードロギングを無効にすることは、おそらくあなたができる最善のことです。ブルートフォース攻撃を打ち負かします。

0
John Lowry