SSHブルートフォースを停止/防止する方法[終了]


22

私はネットワーク管理を始めたばかりなので、まだ経験が浅いことに注意してください。

pleskパネル付きのUbuntuルートサーバーがあります。

昨日、私の友人と私は、TS3の音声品質が非常に悪くなったことに気付きました。サーバーにいくつかのpingを送信しましたが、非常に高いパケット損失がありました。その後、私は少しグーグルで検索して、auth.log。私はそれをダウンロードして少しスクロールしましたが、これが見つかりました:

May 13 10:01:27 rs204941 sshd[9351]: input_userauth_request: invalid user student [preauth]
May 13 10:01:27 rs204941 sshd[9351]: pam_unix(sshd:auth): check pass; user unknown
May 13 10:01:27 rs204941 sshd[9351]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=112.220.198.102 
May 13 10:01:29 rs204941 sshd[9351]: Failed password for invalid user student from 112.220.198.102 port 39806 ssh2
May 13 10:01:29 rs204941 sshd[9351]: Received disconnect from 112.220.198.102: 11: Bye Bye [preauth]
May 13 10:01:31 rs204941 sshd[9353]: Invalid user student from 112.220.198.102

誰かが何度もSSH経由でログインしようとしたようです。私は少しスクロールして、この誰かが多くの異なるユーザー名を使用しようとしていることを見ました:student, tech, psi, news,...

これらの何百ものログインがファイルに表示されました。

データセンターのWebサイトでトラフィック統計を調べました。1時間あたりわずか17MBでした。私は100Mbitバックボーンを持っているので、データ転送自体は問題ではないようです。

現時点では、サーバーにアクセスする方法はありません。

私の質問は次のとおりです。どうすればアクセスを再度取得できますか、この攻撃を抑制して後続の攻撃を防ぐにはどうすればよいですか?


まだこの部門で私のことを学んでいます。...しかし、これはポートノッキングの良い使用ではないでしょうか?
mjrider


回答:


37

アクセスする方法は?

アカウントにアクセスできない理由は明らかではありません。

マシンが攻撃または高負荷にさらされている場合は、アクセスの制限(IP制限)またはサーバーのオフライン化(​​インターネットからの切断)についてプロバイダーに相談する必要があります。

また、プロバイダーが支援できる帯域外アクセスが必要になる場合があります。

誰かがサーバーを侵害した場合は、バックアップから復元するか、リカバリイメージを使用する必要があります。

サーバー、特にSSHへの攻撃を防ぐ方法

ブルートフォースログオンを防止する最良の方法は?

そもそも彼らがあなたのマシンに到達しないようにしてください!ホストに到達する前、またはSSHレベルでブルートフォース攻撃を阻止する方法はたくさんあります。

そうは言っても、fail2banのようなものでオペレーティングシステムを保護することは素晴らしいアイデアです。http://en.wikipedia.org/wiki/Fail2ban

Fail2banはDenyHostsに似ていますが、SSHに焦点を合わせたDenyHostsとは異なり、fail2banは、ログイン試行をログファイルに書き込むサービスを監視するように構成できます。 、fail2banはNetfilter / iptablesおよびTCP Wrappers /etc/hosts.denyを使用できます。

総当たりログインを防止するために考慮すべき重要なセキュリティ技術がいくつかあります。

SSH:

  • rootのログインを許可しない
  • SSHパスワードを許可しない(秘密鍵認証を使用)
  • すべてのインターフェイスでリッスンしないでください
  • SSHのネットワークインターフェイス(eth1など)を作成します。これは、リクエストを処理するインターフェイス(eth0など)とは異なります。
  • 一般的なユーザー名を使用しないでください
  • 許可リストを使用し、SSHアクセスを必要とするユーザーのみを許可する
  • インターネットアクセスが必要な場合... IPの有限セットへのアクセスを制限します。1つの静的IPが理想的ですが、xx0.0 / 16にロックする方が0.0.0.0/0よりも優れています
  • 可能であれば、インターネットアクセスなしで接続する方法を見つけると、SSHのすべてのインターネットトラフィックを拒否できます(AWSを使用すると、インターネットをバイパスする直接接続を取得でき、Direct Connectと呼ばれます)
  • fail2banなどのソフトウェアを使用して、ブルートフォース攻撃をキャッチします
  • 特にセキュリティおよびsshパッケージで、OSが常に最新であることを確認してください

応用:

  • アプリケーション、特にセキュリティパッケージが常に最新であることを確認してください
  • アプリケーションの「admin」ページをロックダウンします。上記のアドバイスの多くは、アプリケーションの管理領域にも適用されます。
  • パスワードは管理領域を保護します。Webコンソール用のhtpasswdのようなものは、基礎となるアプリケーションの脆弱性を投影し、エントリに対する追加の障壁を作成します。
  • ファイルのアクセス許可をロックダウンします。「フォルダのアップロード」は、あらゆる種類の厄介なもののエントリポイントであることで有名です。
  • アプリケーションをプライベートネットワークの背後に配置し、フロントエンドロードバランサーとジャンプボックスのみを公開することを検討してください(これは、VPCを使用したAWSの典型的なセットアップです)

1
help.ubuntu.com/community/Fail2ban経由でFail2banをインストールしました。非常に強力で使いやすいようです(メール通知、...)

データセンターからメッセージを受け取りました:洪水攻撃(これは何ですか?)があり、これにより多くのサーバーにとって接続が非常に悪くなりました。特にサーバーへの攻撃ではありませんでした。


1
面白い。したがって、私のデータセンターが攻撃の標的だったようです。しかし、私がこれ以外にブルートフォースを受けたことを知ることは、非常に良いことでもあります。そして、Fail2banは本当に良いツールです。翌日、IptablesとSSH Configについて読み、それをより安全にするようにします。

3
22以外のポートをリッスンするようにopensshを構成し、ポート22に着信するすべてのものをドロップするようにiptablesを構成します。自国以外の国からsshする予定がない場合は、countryipblocks.net / country_selectionでブロックリストを作成します。 phpおよびiptablesで使用します。
トリウムBR

4

どうすればこの攻撃を抑制し、次の攻撃を防ぐことができますか

通常、デフォルトのsshポートを22から1122などの別のポートに変更します。これにより、ボットからの多くの自動攻撃を防ぎますが、単純なポートスキャンで検出できます。とにかく:

vi /etc/ssh/sshd_config

ポート22からポート1122に編集しますが、これでは十分ではありません。

ブルートフォースの自動IPTablesルール

Fail2banの 代わりにlog2iptables https://github.com/theMiddleBlue/log2iptablesを使用します。これは、正規表現でログファイルを解析してiptablesを実行する単純なBashスクリプトだからです。たとえば、5つの一致が発生すると、log2iptablesは特定のIPアドレスをドロップします。Telegram APIを使用し、問題が見つかったときに電話でメッセージを送信できるので、それは素晴らしいことです。

これが役立つことを願っています!


8
プロジェクトURLとSFハンドルの相関から、このプロジェクトに関与していると推測しています。参照してください私たちの指針を「という要件に注目特に、独自の製品を参照するには、あなたがしなければならないあなたの答えであなたの所属を開示します」。
MadHatterはモニカをサポートします

1

これをまとめて、15分ごとにcronjobなどとして実行します。

for z in `grep Invalid /var/log/auth.log | awk '{ print $NF }' | sort | uniq`
do
  count1=`grep $z /etc/hosts.deny | wc -l`
  count2=`grep Invalid /var/log/auth.log | grep $z | wc -l`
  if [ $count1 -eq 0 -a $count2 -gt 10 ] ; then
    current=`egrep "^ssh" /etc/hosts.deny | sed 's/sshd[ :,]*//'`
    sudo cp /etc/hosts.deny.bak /etc/hosts.deny
    sudo chmod 666 /etc/hosts.deny
    if [ $current ] ; then
      echo "sshd : $current , $z" >> /etc/hosts.deny
    else
      echo "sshd : $z" >> /etc/hosts.deny
    fi
    sudo chmod 644 /etc/hosts.deny
  fi
done

0

これは、SSH攻撃の代替ソリューションです。使用しない場合は、SSHデーモンを閉じ続けます。オープンポートも攻撃もありません。あなたはそれを試すことができます。オープンソースです https://github.com/indy99/nnet_port_guard


1
サーバー障害へようこそ!あなたの答えは、質問に対する実行可能な解決策が別のWebサイトから利用可能であることを示唆しています。Q&A WebサイトのStack Exchangeファミリは、他のWebサイトが移動、削除、または変更される可能性があるため、一般的にこのタイプの回答を嫌います。良い答えを書くにはどうすればいいですか?を読んでください問題の解決に必要な手順を含めるように回答を修正することを検討してください。そして、サイトツアーに参加することを忘れないでください。
ポール

0

不正なアクターをブロックするCentos / RHELの自動ソリューション

無効なユーザーアカウントと有効なアカウントの不正なパスワードの両方について、sshが失敗したログインをチェックするCentosのスクリプトを次に示します。送信元IPが3回以上ヒットし、まだ拒否リストにない場合は、拒否リストに追加されます。これをルートのcrontabから15分ごとに実行します。また、sshを介したルートログインも許可していないため、この組み合わせにより物事はかなり静かになります。

     #/bin/bash
     # Save a copy of the existing hosts.deny file for safety
     cp /etc/hosts.deny /etc/hosts.deny.bak
     # Get a list of the offending IP addresses and process them
     for z in `grep "Invalid\|Failed" /var/log/secure | awk '{ print $NF }' | sort | uniq`
     do
     # Get the number of times this IP hit us
     hits=`grep "Invalid\|Failed" /var/log/secure* | grep $z | wc -l`
     # Check whether this IP is already blocked
     blocked=`grep $z /etc/hosts.deny | wc -l`
     # If they hit us more than 3 times and are not already on the deny list
     # add them to the deny list
     if [ $hits -gt 3 -a $blocked -eq 0 ]
     then
          echo "sshd : $z" >> /etc/hosts.deny
     fi
     done

1
fail2ban同じことを行い、テスト済みのバトルを見てください。
パトリックメヴゼク
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.