web-dev-qa-db-ja.com

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

私はネットワーク管理に非常に慣れていないので、まだ経験はありません。

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,...

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

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

現時点では、サーバーにアクセスできません。

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

23
user219534

アクセス方法は?

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

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

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

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

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

ブルートフォースログオンを防ぐ最善の方法は?

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

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

Fail2banはDenyHostsに似ていますが、SSHに焦点を当てたDenyHostsとは異なり、fail2banは、ログファイルにログイン試行を書き込むサービスを監視するように構成でき、/ etc/hosts.denyを使用してIPアドレス/ホストのみをブロックする代わりに、fail2banはNetfilter/iptablesとTCP Wrappers /etc/hosts.deny。

ブルートフォースログインを防止するために検討する必要のある重要なセキュリティ技術がいくつかあります。

SSH:

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

応用:

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

この攻撃を抑制して次の攻撃を防ぐ方法

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

vi /etc/ssh/sshd_config

ポート22ポート1122に編集しますが、これでは不十分です。

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

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

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

4
theMiddle

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

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
2
Mark

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

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

     #/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
0
David Lash

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

0
indy99