次のようなリクエストがあった場合、サーバーがさまざまな問題に遭遇します。
Started GET "/key/values"
ActionController::RoutingError (No route matches [GET] "/key/values")
Started GET "/loaded"
ActionController::RoutingError (No route matches [GET] "/loaded")
Started GET "/top/left"
ActionController::RoutingError (No route matches [GET] "/top/left")
そのような攻撃からどのように防御すべきですか?これらのリクエストは、応答がない場合でもサイトの速度を低下させますか?
悪意のあるGETリクエストからどのように防御できますか?
これらのリクエストは本当に悪意があるようには見えません。少なくともあなたの説明に基づいて、それらは害を引き起こしません、すなわち、不要なコード実行、SQLインジェクションまたは同様の攻撃はありません。彼らは処理するためにいくつかのリソースを必要とします。表示されているのは、Webサーバーのすべてのオペレーターがログファイルで確認できるものです。誰かがインターネットをスキャンして脆弱なシステムを探しているため、サーバーに存在するものと一致しない多くのリクエストがあります。さらに、これらのリクエストは、以前は有効であったURLが無効になったサイトへの変更によっても引き起こされる可能性がありますが、ロボットは古いURLを記憶し、これらの更新をチェックします。
これらの要求が気になる場合は、アプリケーションを変更して、そのような要求を無視するように(エラーとしてログに記録しない)か、アプリケーションの前にあるサーバー/リバースプロキシでこれらの要求をフィルター処理します。
提案されているWebアプリケーションファイアウォール(WAF)はこのような要求をフィルター処理できますが、これらの無害な要求をフィルター処理するためだけにインストールするのはやり過ぎだと思います。しかし、適切に使用されると(つまり、多くの場合のように、インストールされて忘れられるのではなく、アプリケーションに適応する)、保護の有用なレイヤーになる可能性があります。そして、提案されたfail2banも役立ちますが、これらの要求が少数の単一のIPアドレスからのみ発生する場合にのみ役立ちます。さらに、fail2banに依存すると、有効なユーザーがロックアウトされる可能性があります。これは、サイトへの無効なリンクがメールや他のWebサイトに含まれる可能性があるため、リクエストの発信元IPアドレスは攻撃者ではなく、このリンクへのアクセスで騙された無実のユーザーです。しかし、fail2banは元のIPとエラーメッセージのみを確認し、無実のユーザーをロックアウトします。
あなたがすべきことはあなたのアプリケーションに脆弱性がないことを確認することです [〜#〜] owasp [〜#〜] はWebアプリケーションのセキュリティ保護について学ぶための良いリソースです。アプリケーションが安全である場合は、この種の要求を処理するのに問題はありません。ただし、無効なリクエストによるリソースの使用を制限するには、これらのリクエストがアプリケーションで可能な限り早期に検出および拒否されることを確認する必要があります。つまり、無効なリクエストがデータベースに対してコストのかかるクエリをトリガーすることは好ましくありません。
@SakamakiIzayoiが示唆したことと関連して:
Fail2banはログファイル(例:/ var/log/Apache/error_log)をスキャンし、悪意のある兆候を示すIPを禁止します-パスワードの失敗が多すぎたり、エクスプロイトを探したりします。通常、Fail2Banはファイアウォールルールを更新してIPアドレスを拒否します指定された時間の間、他の任意のアクション(たとえば、電子メールの送信)も構成できます。 Fail2Banには、箱から出して、さまざまなサービス(Apache、courier、sshなど)用のフィルターが付属しています。
ソース 。
最も簡単な防御ソリューションは、Webアプリケーションファイアウォールをインストールすることです。
それらについての詳細な説明は [〜#〜] owasp [〜#〜] および Wikipedia にあります。
リクエストがサイトの速度を低下させるとは思えません。 Webサーバーのリソースを浪費するのにはるかに効果的であるため、攻撃者は既存のアイテムを要求する可能性が最も高くなります。