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

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

私はネットワーク管理に関しては非常に初心者なので、まだ経験が浅いことをご了承ください。

Plesk パネルを備えた Ubuntu ルート サーバーを所有しています。

昨日、友人と私は、TS3 の音声品質が非常に悪くなっていることに気付きました。サーバーに ping をいくつか送信したところ、パケット損失が非常に高かったのです。その後、少し Google で検索して、 があることを知りました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 時間あたり 17 MB しかありませんでした。バックボーンは 100 Mbit なので、データ転送自体には問題がないようです。

現時点では、いかなる方法でもサーバーにアクセスできません。

私の質問は、どうすれば再びアクセスできるようになるのか、どうすればこの攻撃を抑制し、次の攻撃を防ぐことができるのかということです。

答え1

どうやってアクセスするのですか?

アカウントにアクセスできない理由は不明です。

マシンが攻撃を受けている場合や負荷が高い場合は、アクセスを制限する (IP 制限) か、サーバーをオフラインにする (インターネットから切断する) ことについてプロバイダーに相談してください。

帯域外アクセスが必要になる場合もありますが、プロバイダーが対応してくれる可能性があります。

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

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

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

まず、攻撃者がマシンにアクセスできないようにしてください。ホストに到達する前に、あるいは SSH レベルでブルート フォース攻撃を阻止する方法はたくさんあります。

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

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

ブルートフォース ログインを防ぐために考慮すべき重要なセキュリティ手法がいくつかあります。

: ...

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

応用:

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

答え2

この攻撃を抑制し、次の攻撃を防ぐにはどうすればよいですか

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

vi /etc/ssh/sshd_config

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

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

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

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

答え3

私はこれをまとめて、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

答え4

これはSSH攻撃に対する私の代替ソリューションです。使用していない場合はSSHデーモンを閉じ続けるというアイデアです。ポートが開いていなければ攻撃はありません。ぜひ試してみてください。オープンソースです。 https://github.com/indy99/nnet_port_guard

関連情報