web-dev-qa-db-ja.com

1分以内に非常に多くの不正な要求があった場合、特定の時間枠でIPを自動的にブラックリストに登録する必要がありますか?

これはツアーに基づいてこの質問をするのに最適なサイトのように思えたので、ここに行きます。私はWordPressブログサイトを持っています。これはカスタムテーマを開発したもので、誰かが悪いリクエストから404.phpファイルにアクセスすると、リクエスト、リモートアドレス、リモートID、レビューのためにCSVファイルを作成するcronがある古いボックスに送信されるユーザーエージェント(ユーザーエージェントが検索エンジン/ボットになることはありません)。 2分以内に同じIPから50〜200のリクエストを受け取ることがあります。これらのリクエストの一部は次のとおりです。

url/wp-content/uploads/bc.php
url/wp-content/themes/THEME/style.php?act=1
url/wp-content/themes/THEME/adodb.class.php
url/wp-content/themes/b374k-2.8.php
url/wp-content/plugins/onleinsfay.php
url/wp-content/plugins/bc.php
url/wp-content/plugins/cache/adodb.class.php
url/wp-content/languages/cache/adodb.class.php
url/templates/_hash.php
url/templates/adodb.class.php
url/SocketIontrol.php
url/wp-content/plugins/hungred-post-thumbnail/js/hpt_ini.js
url/wp-content/plugins/invit0r/lib/php-ofc-library/ofc_upload_image.php
url/wp-content/plugins/mailpress/mp-includes/action.php
url/septii.php
url/wp-content/login.php?login=cmd
url/wp-cache.php
url/wp-content/error-log.php
url/upgrade-network.php

ライブサイトにプラグインがありません。サーバー上でerror_Logが生成されているかどうかを確認しました。すべてのWP更新の前に、デバッグバーでテーマをローカルでテストして、PHPエラーが存在しないことを確認します。 arin でIPアドレスを確認しましたが、場所が異なる場合があります。あなたが実行しているテーマやプラグインを確認するためにテストできるサイトがあると聞いたことがありますが、使用したことはなく、特定する方法もわかりません。これを問題として解決しますか?

PHPで考えていた解決策の1つは、IPアドレスを変数に設定し、現在の時刻を取得して、そのIPが1分以内に404.phpにヒットする回数をカウントすることでした。 404.phpファイルを10回ヒットした場合、IPをtxtファイルに追加し、.htaccess reference itにします。サイトでパフォーマンスの問題が発生するのを防ぐため、24時間ごとに file_get_content() を使用して.txtファイルをクリアする繰り返しイベントをスクリプト化します。

ただし、これが問題なのか、問題に正しくアプローチしているのかはわかりません。これらの悪いリクエストについて何かをする必要がありますか?私のソリューションよりも優れているこれを行うことができる方法はありますか?

しばらく前、明らかに無視できるWordpressパスに関連する私のウェブサイト(Drupal)への多くのヒットに気づきました(ハッカーがすぐに捨てようとしている404ページを生成する膨大な時間の無駄以外は何も起こりません) ...)

それらのWebサイトでは、iplockという名前のツールを実行します(もちろん、まだあります)。ソースはgithub.com here にあります。

アイデアは、どんな手段でも間違ったパスを検出し、そのIPでiplockを呼び出してブロックすることです。 iplockは、すべてのアクセスまたは特定のポート(つまり、HTTP [S]の80および443をブロックできますが、悪意のあるユーザーは100%オフにすることができます...なぜメールサーバー、DNSなどに許可するのですか?)ハッカーであることを既に知っている場合は!)

Apache2のセットアップには、PHPまたは特定のパスで実行できるその他のスクリプトが必要です。たとえば、これらの人々を「特別なページ」に送ることができますが、内部的に(つまり、実際の301リダイレクトはありません)

RewriteEngine On
RewriteRule "^/wp-" "/iplock.php" [passthrough]

iplock.phpは、適切なパラメーターを使用したiplockバイナリへのシステムコールになります(正しいことを確認するためにテストしてください。ここではテストしていません...)

<?php
system("iplock --scheme all --block " . $_SERVER["REMOTE_ADDR"]);

これにより、そのIPアドレスが非常に迅速にブロックされるため、iptables -nvx -Lリストでカウンターが急速に成長する前に、同じIPから2回以上ヒットする可能性は低くなります(少なくともそれは私の経験です)。

iplockツールは、ルールを追加するiptablesへの呼び出しよりもnotherであることに注意してください。使用できるのはiptablesです。これはもう少し複雑で、多くの可能性を管理できないため、実行するにはrootである必要があります。コンピテンシーのレベルに応じて、複雑になる可能性のある多くの要素があります。

iptablesコマンドは、iplockall.confで次のようになります。

block=[command] -I [chain] [num] -i [interface] -p tcp -m tcp -s [ip] -j DROP
  • [command]iptablesです
  • [chain]INPUTまたはその目的のために作成したチェーン
  • [num]は、新しいルールが挿入される位置です。ほとんどの場合、最初に新しいルールを追加するのが好きです。追加するのは遅くなりますが、現在のユーザーをブロックするのはずっと速くなります(最初に表示されますIPをすばやくブロックします)
  • [interface]eth0のようなものです
  • [ip]$_SERVER["REMOTE_ADDR"]アドレスです

セキュリティ上の理由から、Apacheにiptablesを直接実行する許可を与えることは本当に悪い考えであることを覚えておいてください。 iplockツールはその部分を隠します。これは、安全なファイルを使用して安全なコマンドを実行するためです。

今...あなたのサイトがWordpressサイトである場合、すべての/wp-*パスをブロックすることはうまくいきませんが、静的IPアドレスを持っている場合は、IPを許可することができますこのようにして、ここに示すように他の人をブロックします。これは、Apacheセットアップの1つの追加ルールを意味します。

RewriteEngine On
RewriteCond %{REMOTE_ADDR} !^1\.2\.3\.4$
RewriteRule "^/wp-" "/iplock.php" [passthrough]

このRewriteCondルールは、Rewrite...REMOTE_ADDRと一致しない場合にのみ、次の1.2.3.4コマンドを実行します。したがって、1.2.3.4を静的IPアドレスにすると、ブロックされることはありませんが、他のすべてのユーザーはブロックされます。

また、顧客のためにそれを行うこともできますが、仕事、自宅、旅行などでウェブサイトにアクセスしたい場合があるため、複雑になる可能性があります...開発者の場合、IPを登録するように依頼することでそれを回避できます最初に何らかの自動方法でアドレスを入力します(つまり、blah.comのページに移動すると、現在のIPアドレスのドアが開きます。8時間後、再び開いたドアを一時的にすることもできます...)

警告:人々は/wp-content/wp-pluginsにアクセスする必要があるので、上記のパターンは^/wp-admin

最後に、使用しない/wp-...パスが存在する可能性があります(つまり、インストールしていないプラグインが必要になります)。これらは、上記の静的IPアドレスのトリックがなくてもブロックできます。したがって、次のようになります。

RewriteEngine On
RewriteRule "^/wp-(language|remote)" "/iplock.php" [passthrough]

「/ wp-language」と「/ wp-remote」をブロックします。しかし、そんなことはあまりないと思います。特定のコンテンツパスやプラグインパスなど、より複雑なパスにすることもできます。

1
Alexis Wilke

これらは脆弱性プロファイリングのように見えます。基本的に、彼らは悪用する脆弱性を探しています。

これらをブロックできる場合は、そうする必要があります。

これらは、オープンプロキシから発生している可能性があります。 「ハッカー」ログファイルを消去する代わりに、許しモデルを使用することをお勧めします。これは、ある期間、長い期間(日)動作するIPアドレスであれば、ファイルから削除できることを意味します。残りは、許し期間内にアクティブである限り残ります。ユーザーブロックでIPアドレスをブロックしていないことに注意してください。これらは、ホストネットワーク上にある可能性のある侵害されたコンピューターです。そのため、ユーザーをブロックする危険はありません。ハッカーはユーザーブロックを使用しなくなりました。捕まるのは簡単すぎるし、自動化されたスクリプト(スクリプトキディ)を使用すると、ハッカーを追跡せずにハックを発射し、そのままハックを実行するのも簡単です。

私はもう少し洗練された何かをしますが、確かな解決策があるように聞こえます。

4
closetnoc

IPアドレスに基づいてテキストファイルを使用または作成し、PHPなどのバックエンド言語の助けを借りてフェッチし、特定のIPアドレスのリクエストが非常に短時間で届くかどうかを確認できます。期間を約300ミリ秒に設定してから、特定のIPアドレスで使用されるサイトをブロックすることができます。

これを行うには、ユーザーまたはボットに警告メッセージを与えるだけで、非常に短時間でリクエストを送信するだけです。

1
Saurabh Sharma