ブルートフォーシングに対するSSHサーバーの保護


14

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

私はサーバーをより新しくてより良いオプティプレックスに更新し、古いサーバーを少し調べ始めました。問題が発生してから削除しました。ログを確認すると、その総当たり攻撃と、何らかの形で誰かが私のマシンに入ることに成功しています。この人は、「ルート」と「スワップ1」などの2つのディレクトリを持つ「knarkgosse」と呼ばれる追加のボリュームを作成しました。彼らが何をして何をするのかはよくわからないが、これが二度と起こらないようにしたい。パスワードは数か月ごとに変更するため、パスワードは常にランダムな文字と数字で構成されているため、これは少し奇妙に感じます...総当たりするのは簡単ではありません。

rootのログインを防ぎ、sudoersを使用して、SSHポートを変更できることは知っていますが、他に何ができますか?

そこで、いくつか質問があります。

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

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

  3. サーバーに安全性を適用するには、さらに何ができますか?

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


回答:


17

Fail2banPort Knockingは、ほとんどのニーズに対応するはずです。

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

追加のセキュリティ対策を追加することで収益が減少するポイントに達する可能性があると主張することができますが、それでも、「十分に安全」であるかどうかを判断するのはあなた次第です。

また、rootログインを許可しないことをお勧めします。


2
私はdenyhostsを使用していますが、fail2ban afaikとほとんど同じです。
pfyon

Fail2Banサウンドはおなじみです...それについて見ていきます。
ポールピーレン

1
+1 Fail2Ban、5回の試行失敗= 5分のIPブロック。途方もなく簡単なパスワードをお持ちでない限り、毎分1つのパスワードでブルートフォースされることはありません。
クリスS

@Chris S Yea、それは私のお気に入りの1つです。スクリプトキディーは通常...タイムアウトに対処する方法がわからない
gWaldo

1
@gWaldo、確認バイアスは、読んだものを書き直して、あなたがすでに本当だと思うことを言うのに大いに役立ちます。
クリスS

7

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

Fail2Banには、あなたが尋ねたすべてを設定する方法の良い例がいくつかあります...しかし、それは悪いアドレスの普遍的なリポジトリを持っていません。別のIP(dhcp更新/ボットネット攻撃など)を簡単に取得できるため、このようなリポジトリはどこにもないと思います。また、一般的な「管理者」タイプのユーザー名(root / admin / administrator / sysop / etc。)を使用したssh経由のログインを無効にします。


素晴らしい答え。私はあなたに大胆なテキストに完全に同意します...したがって、数字のパスワードと組み合わせた文字。キー認証はこのサーバーには少々多すぎますが、良い考えです。私は今、Fail2banをインストールしましたが、再設定する必要はないようですあなたのアドバイスを!
ポールピーレン

1
Spamhausは、既知のスパマーネットワークのリストを公開しています。これは、ボットネットをカバーしていない、それは単に知られています「プロ」スパマー:spamhaus.org/drop
クリス・S


4

ここには多くの良い提案があります。これを比較的安全にするために、次の3つのことをお勧めします。

  1. ランダムな高ポートでsshdを実行します。ボットは通常、ポート22および2222のようなポート22のバリエーションの後にのみ移動します。
  2. sshd構成でパスワードベースの認証を無効にします。

UsePAMいいえ

  1. 事前共有SSHキーペアを介してのみ、このサイトで認証します。PKIベースの認証を開始するためのssh-keygenの男。

お役に立てれば。


2
非常に低ストレスのソリューションのために、私は間違いなく非標準ポートでsshを2回実行しています。私が見たものから、これはあなたのsshサーバーへのブルートフォース接続の試行を桁違いに落とすでしょう。1週間にわたって、私のサーバーの1つ(標準ポートでsshを実行)が134回の無効な接続試行を受け取りました。その同じ期間、同じサーバー(非標準ポートでsshを実行)上の仮想インスタンスは0
DF

1

私は常にCSF / LFDの大ファンであり、ブルートフォース、ポートスキャン、およびその他のオプションを試みる人々のIPアドレスをブロックできます。基本的にIPテーブル用の巨大なperl-wrapperですが、設定ファイルを読むのは難しくなく、ドキュメントも悪くありません。


サーバー上でポートスキャンが実行されるたびに警告する方法があるかどうか(電子メールなど)を知っていますか?
ポールピーレン

1

sshguardを調べることもできます。私はそれを使用していませんが、良いことを聞いています。

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

http://www.sshguard.net/

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

「Sshguardはロギングアクティビティからサーバーを監視します。ログが誰かが悪いことをしていることを伝えると、sshguardは少しブロックして反応します。ますます固くなっています。」


これはきちんと聞こえます...私はそれを見ていきます。thnx
ポールピーレン

1

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

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

それが役に立てば幸い!


1

これを行うにはより良い方法があります。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

0

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

これは実際のセキュリティではなく、自動化されたブルートフォース攻撃の数を減らすだけであることを強調する必要があります。私が推測するすべてのポートをチェックするのは大変です。


主にポート22に別のサーバーがあったため(これを停止しました)、ポート23に切り替えて、それを行いました。
ポールピーレン

2
telnetただし、23は予約ポートです。多くの場合、予約されていないポート(> 60kなど)を使用することをお勧めします。iana.org/assignments/port-numbersは、予約済みのポート番号のリストを提供します。
チャフィンク

ヒントをありがとう。私は(まだ)このマシンでtenetを使用していませんが、ポートを変更します。私はプロのサーバーで使用する52000〜59000のポート範囲を持っていますが、このサーバーにも同じポートを使用することを考えています。
ポールピーレン

1
@ポール:I don't use te[l]net on this machine-そのままにしてください。さまざまな理由でtelnet クライアントが必要ですが、sshが利用可能な場合にtelnetサーバーを実行する理由はありません。有線の平文パスワードは悪いです。
mlp

0

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


一般的に、私はあなたの解決策に同意します。私はこれが私が働いている会社の標準だと信じています...しかし、これは私にとって何かとは思いません。問題は、主に自宅(ローカルネットワーク)、職場(静的IP)、または外出先(3Gモデム/ iPhoneを使用)でMacbook Proを使用していることです。最後に、VPNを持っていない場合の問題は、やりすぎだと思います。答えてくれてありがとう。
ポールピーレン

0

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

ただし、公開キー認証を使用してパスワードのログ記録を無効にすることは、おそらく最善の方法です。総当たり攻撃を打ち負かします。


0

私にとって効果的なもの:

  1. 他の人が言ったように、rootログインなし、sshd_configでPasswordAuthenticationをno(キー付きのログインのみ)に設定

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

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

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

  5. そして、私のお気に入り:多くのブルートフォース条件と他のエラーのアラートもブロックするOSSECのアクティブレスポンスモジュール。yの時間内にx回の無効なログインを検出し、一定期間ブロックします(iptables firewall-dropコマンドを使用)。楽しみのために約12時間ブロックしています。:)

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

Apacheを実行している場合、apache-rulesに違反するものもブロックできます。NATの問題だけでこれらをブロックするのではなく、大学全体または何かをブロックすることについて考えたいと思います。:)さらに、ログファイル内の特定の条件でブロックするカスタムルールを作成できます。これは非常に役立ちます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.