6

当社の ASP.NET Web サイトは、Windows サーバー 2008 および IIS7 でホストされています。

最近、特定の IP からの「攻撃」に問題があり、無効なパラメーターを含むさまざまなフォームを送信することで多くのエラーが発生します。

asp.net コードから生成されたリストに基づいて、IP アドレスのリストを 24 時間ブロックできるようにしたいと考えています。Web.config - ipSecurity Tag を使用してこれを実現できることはわかっています。次の例を見つけました。

http://www.dantor.com/support/misc/web-config-ip-address-restriction.aspx

問題は、web.config を変更/更新すると、Web サイトが再起動/リサイクルされることです。

プールをリサイクルせずに、ブロックされた IP リストを更新することはできますか?

編集:

おそらく、HttpModule を使用してこれを実装することをお勧めします。Scott Hanselman は、この件に関する投稿をブログに書いてい ます。

これはパフォーマンスに影響を与えると思いますか? httpmodule を介してすべての Web サイト要求をルーティングすると、ページの読み込み時間に影響を与える可能性があります。これを行う方法について他に何か考えはありますか?

編集2:

Web サイトは Fortigate 200a ファイアウォールで保護されていますが、私の知る限り、ファイアウォールはエラーを生成したり SQL インジェクションを実行しようとしたりする IP を自動的にブロックできません。

4

2 に答える 2

5

プールをリサイクルせずに、ブロックされた IP リストを更新することはできますか?

ここに首を突っ込んで、そうではないと言います。

HttpModule を使用するとパフォーマンスが低下すると思いますか?

はい。重要なものですが、おそらくそうではありません。ただし、IP アドレス検索部分が非常に効率的であることを確認してください。たとえば、リストをHashSetにキャッシュし、毎回ファイルからリストを読み取らないでください。

問題は、まだ Web リクエスト処理能力を使用してダフ リクエストをかわしていることです。ただし、これは、IP をブロックしない場合にリクエストがダフかどうかを調べるために行う処理よりも少ない可能性が高いため、全体的には実際にはパフォーマンスが向上する可能性があります。ただし、これらの IP アドレスから非常に多くのリクエストを受け取り、サーバーを圧倒するリスクがあります。

その他のオプション

ソフトウェア ファイアウォールをインストールするか、Windows に組み込まれているファイアウォールを使用することも可能です。

他の人が言っているように、ハードウェア ファイアウォールを取得すると、サーバーの負荷が完全に軽減されます。IP アドレスを禁止するために、Web サーバーによって動的に更新できるものを取得できます。私は一度も使用したことがないので、推奨したり、どれだけうまく機能するかについてコメントしたりすることはできません. クラウドベースのセットアップを使用している場合は、サービス プロバイダーと何ができるかについて話し合う価値があるかもしれません。

ファイアウォールを更新する際に考慮すべきことの 1 つは、ファイアウォールを更新できるセキュリティ特権を Web アプリケーションに本当に許可するかということです。セキュリティ上の欠陥が発生するのを待っているように聞こえるので、これがどのように行われるかについて細心の注意を払い、セキュリティ権限がブロック リストへの IP の追加のみを許可するようにしてください。

本当に攻撃を受けている場合は、VeriSign のこのようなサード パーティのddos​​ 保護サービスを介してすべてのトラフィックをルーティングできます。しかし、特権のためにお金を払うことを期待してください.

アプリプールのリサイクルはそんなに悪いことですか?

もう 1 つ思いついたのは、アプリケーション プールをリサイクルすることは、思っているほど悪くないかもしれないということです。共有状態サーバーを使用していると仮定すると、ユーザーの誰も実際にこれに気付かない可能性があります。その理由は、IIS は通常、リサイクル中に 2 つのプロセスを短時間並行して実行するため、新しいリクエストは新しいプロセスによって処理され、既に開始されているリクエストは古いプロセスで終了するためです。IIS が古いプロセスを強制終了するのは、すべての未処理の要求が古いプロセスによって処理された場合のみです。状態をメモリに保存していない限り、これは通常、サイトのユーザーが切り替えに気付かないことを意味します。

于 2014-12-05T18:12:59.543 に答える
0

私は DavidG に参加しています。NetShell を使用して、コマンド ラインからルールを追加するか、コード ( c# example ) からルールを追加することもできます。これは、再起動せずにすぐに影響するはずです。

リクエストを受信したい場合にのみ HTTP モジュールを使用します (たとえば、IP アドレスが企業またはホットスポットに属しており、リクエストを終了する前に Cookie を分析したい場合)。ファイアウォールは、データが送信されるずっと前に接続を拒否します。サーバ。

于 2014-12-07T14:01:11.213 に答える