私のウェブサイトは、アクセスしようとするさまざまなIPから毎日何千ものヒットを取得しています。
/php-myadmin/
/myadmin/
/mysql/
...そして他の何千ものバリエーション。これらのディレクトリは存在せず、サーバーにphpmyadminさえありません。
これらの試みはどれも成功したとは思いませんが、サーバーのリソースに負担をかけ、帯域幅を浪費しているに違いないので、可能であれば停止します。これらのIPの一部をブロックしましたが、新しいIPが返され続けます。これをより永続的に防ぐ方法はありますか?
心配しないでください。 404を提供することは、Webサーバーが行う非常に小さな作業です。おそらく、486を使用して1秒あたり10個の404を処理できます。404あたりの帯域幅はごくわずかです。小さなGETリクエストと小さな404レスポンス。
真剣に;心配しないでください。これは、インターネット上でサーバーを実行するためのほんの一部です。
残念ながら、これがインターネットの仕組みです。無視してください。何千ものボット/トロイの木馬がインターネットをスキャンしています。ソースIPは常にランダムです。治療法はありません。
そのトラフィックを排除するための唯一の100%ソリューションを以下に示します。
別の方法は次のとおりです。
-https/httpでポート80/443から別のものに移動します。ボットは通常、他のすべての65kポートでhttpサーバーを探しません。
-VPNを使用してサーバーに接続します(パブリックWebサイトをホストしている場合、これは不可能だと思います)。
あなたが望むのは Fail2ban (これがLinuxマシンであると仮定して、あなたは言わなかった...)
Fail2banとは何ですか?
Fail2banはシステムログを解析し、ブロックする特定の正規表現を探します。一致(または構成方法に応じて同じIPからの複数の一致)が検出されると、通常はIPTablesを介してブロックされます。通常、これはSSHまたはWebサーバーに対する失敗した認証試行をブロックするために使用されます。
一定の期間(数分になることもあれば、数日になることもあります...永続性に応じて異なります)禁止するように構成します。その後、再試行しない限り、禁止は期限切れになります。
これはどのようにphpmyadminスキャンボットをブロックするのに役立ちますか?
これは、存在しないphpmyadminフォルダーにアクセスしようとするなど、攻撃の一般的な兆候を突き合わせるために簡単に使用できます。そのような試みに一致する正しい正規表現を理解し、正当なユーザーをブロックしないようにする必要があります。
このブログの投稿 で指定された設定は、逐語的に機能するか、設定を調整する必要があります。
なぜブロックする必要があるのですか? 404エラーはそれほどコストがかかりません
Iptablesでそれらをブロックすることにはいくつかの用途があります-phpmyadminの脆弱性をチェックしている場合は、動作するものにヒットするまで、他のサービスの脆弱性も試している可能性があります。それらを禁止すると、ほとんどのボット/スクリプトはしばらくしてあきらめ、より良いターゲットに移動します。
スキャンのコストはそれほど高くありませんが(実際に脆弱性が発見されない限り)、ログが殺到し、攻撃の成功やWebサーバーの問題がわかりにくくなります。
以下のコメントにあるように、Fail2banにはいくつかのシステムリソースが必要です。しかし、それほどではありません。少なくとも、Fail2banが原因である可能性のあるパフォーマンスの問題は一度もなかったと言えます。しかし、非常に攻撃的なスクリプトがブルートフォースパスワードを試行したり、サーバーで毎秒数千のSQLインジェクションの試行やその他のエクスプロイトをスローしたりして、パフォーマンスの問題が発生しました。それらをファイアウォールレベルでブロックすると、サーバー/アプリケーションレベルでブロックするよりもはるかに少ないリソースで済みます。 IPアドレスを禁止するカスタムスクリプトを実行するように拡張することもできます。そのため、IPtablesで禁止する代わりに、ハードウェアファイアウォールで禁止するか、同じ人物が攻撃を続けている場合はメールで不平を言うことができます。 ISPに接続するか、ファイアウォールでファイアウォールをブロックするようにデータセンターに依頼します。
他にヒントはありますか?
自分が制御するいくつかのIPアドレスをホワイトリストに登録して、誤って自分をロックアウトしないようにすることを強くお勧めします。
私がしていることは、小さなスクリプトを適切なディレクトリに置くことです。そのため、誰かが/ phpmyadmin /にアクセスした場合に実行されます。そのスクリプトは他に何もせず、(Linuxで)iptablesを呼び出します。これにより、IPアドレスがスクリプトにアクセスするのを30分間ブロックします(その後、cronジョブがIPアドレスが追加されるiptablesチェーンをフラッシュします)。
Fail2banに対する利点は、syslog/access-logの解析にリソースを使用しないことです。もちろん、欠点は、この非常に特定のアドレスにアクセスする以外は何もチェックしないことです。
なぜこれを行うのですか?確かに、サーバーに404を提供するのは簡単ですが、単純なようにそれらをぶらぶらさせたくありません。私は彼らのツールの時間を浪費し、サーバーが応答するのを待って、最終的にあきらめるまで再試行したいと思います。さらに、それらをブロックしない場合、最終的に先に進む前にたくさんのURLを試します-場合によっては1000以上です。ツールによっては、それが「ナイス」で数時間かけてそれらを配置する場合もあれば、サーバーを気にせずに数分ですべてのサーバーに配置する場合もあります。
なぜ有効なページを提供しないのですか?彼らのツールはあなたをスキャンするのを止めて、それを実行しているスキディーに警告するかもしれません-誰が手動でチェックアウトしなければなりません。これの裏返りは、スキャンによって結果が表示されない場合、サーバーよりもサーバーをより詳細に表示することです。多分、彼らはもう少し、おそらくいくつかのポートスキャンをぶちまけるでしょう、多分あなたは彼らを怒らせ、そして彼らは何ができるかを確認するためにDoSを起動します。それらを単にブロックする-彼らの観点から、phpmyadminスクリプトにアクセスした瞬間にサーバーをタイムアウトにする-不要な注意を避けながら、ツールの時間を無駄にするのに効果的です。
サーバーにphpMyAdminがある場合、効果的な解決策は、それを別のディレクトリに置き、Webサーバーのパスワード制御(Apacheの場合は.htpasswd)を使用して、何かが到達する前にアクセスをブロックすることです。
FWIWでは、/ phpmyadmin /へのアクセスをホワイトリストに登録されたIPアドレスのみに制限しています。
また、(Apache2で)mod_evasiveを使用して、DOS /動作の悪いスクリプト攻撃を阻止します。
mysql管理ツールをマシンのループバックアドレス127.0.0.1にバインドします。
次に、sshとポート転送を使用して、管理バックエンドにアクセスします。
非常に透過的な追加のセキュリティ層を追加します。