Contents [show]
概要
次の記事では、ISPまたはホスティングプロバイダーの実際のユースケースについて説明します。HTTP/ Sロードバランサーリバースプロキシは、すべてのパブリックWebサービスへの主要なアクセスポイントであり、この構成は、高度で強力なWAFの構成がいかに簡単かを示していますブラックリストの送信元IPアドレスに基づいてWebアプリケーションを保護するためのルールセット のVirtualHost 次のようなWebドメインへの接続を1つのパブリックIPで禁止できるように、独自のブラックリストを管理します www.company1.com に接続することを許可 www.company2.com.
この記事では2つのセクションに焦点を当てます。メインセクションでは、HTTPSプロファイルの構成がさまざまなサービスのリストを持つリバースプロキシとして機能し、2番目のセクションでは、 Webアプリケーションファイアウォール HTTP / Sサービスごとに異なるブラックリストを管理するルールセット。
環境
次の図は、Zevenet WAFの内部を示しています。 示されているように、最初のレイヤーはWAFモジュールであり、その目標は、安全な要求のみがロードバランシングモジュールにパススルーされ、バックエンドに要求を転送できるようにすることです。
まず、HTTP ライブ、セミライブ、オンデマンドビデオ ヘッダーが評価され、クライアントIPが既に構成されたブラックリストでチェックされます。 もし ライブ、セミライブ、オンデマンドビデオ ヘッダーとクライアントIPアドレスが一致すると、接続はドロップされ、 禁断403 HTTP応答はクライアントに送信されますが、クライアントIPが要求された場合 ライブ、セミライブ、オンデマンドビデオ ヘッダーが一致しない場合、トラフィックは悪意のないものとして識別され、ロードバランサーモジュールに渡されます。ロードバランサーモジュールでは、HTTPリクエストに基づいて宛先が選択されます。 ライブ、セミライブ、オンデマンドビデオ ヘッダーと最終的に利用可能なバックエンドサーバーに転送されます。
ここでは、特定の例のWebアプリケーションファイアウォール内部のスキーマを見つけることができます。
HTTP仮想サービスの構成
専用の構成 仮想IPアドレス、この例では 192.168.100.58、参照して ネットワーク>仮想インターフェイス>仮想インターフェイスの作成 以下のように:
それでは、HTTP負荷分散サービスの構成に進みましょう。 LSLB>農場 そして、ボタンをクリックします ファームを作成する 以下に示すように、仮想サービスの詳細を入力します。
次に、 創造する.
上部のタブをクリックします サービス 管理するさまざまなウェブサイトと同じ数のサービスを作成しますボタンをクリックします 新サービス、この場合、2つの異なるサービスを作成します。1つは www.mycompany1.com もう一つ www.mycompany2.com.
サービスが作成されたら、追加します 仮想ホスト 下の画像に示されているように、フィルタとバックエンド。
複数のWebサイトがある場合、1つの専用サービスを定義して同じIPアドレスから各Webを管理するために、サービスを追加するだけで済みます。
これで、負荷分散の構成が完了しました。IPDSWebアプリケーションファイアウォールモジュールを構成できます。
ブラックリスト設定
各ブラックリストに目的のIPアドレスを入力してアクセスをブロックするために、Webサービスごとに1つのブラックリストを作成します。 この例では、名前を持つ2つの異なるブラックリストを作成します blacklistmycompany1 及び blacklistmycompany2、サービスごとに1つ。
このブラックリストはパスに保存されます /usr/local/zevenet/config/ipds/blacklists/lists/Blacklistmycompany1.txt.
テスト目的で2 IPアドレスを含めました。必要な数のIPを追加することを検討してください。 また、既存の ブラックリスト IPDS モジュールを使用できます。
この2番目のブラックリストはパスに保存されます /usr/local/zevenet/config/ipds/blacklists/lists/Blacklistmycompany2.txt.
このブラックリストにIPアドレスが含まれていることを考慮してください 192.168.1.191、このIPはテスト目的でのみ使用され、そこからHTTPリクエストを実行します。
Webアプリケーションファイアウォールルールセットの構成
この構成の目的は、ファームアクセスポイント全体で同じブラックリストを保持することを避けるために、Webサイトごとに異なるIPブラックリストを維持することです。
設定します ルールセット、名前付きのルールのグループ ホスティング。 このルールセットは2つの単純なルール(この例ではルールID 1000とルールID 1001)で構成され、各ルールは一致とアクションとして定義され、条件が一致するとアクションが実行されます。 この例では、条件が一致する場合、両方のルールで同じアクションを使用します アクションを拒否 で実行されます 403アクセスが拒否されました 応答。
IPDS> WAF、次にクリックしてください WAFルールセットを作成する この例では、説明的なルールセット名を設定します ホスティング.
フィールドを構成する デフォルトフェーズ 〜へ リクエストヘッダを受信。 このフィールドは、WAFモジュールがクライアントからの着信要求ヘッダーを分析することを意味します。
次に、タブに移動します キャンペーンのルール そして最初の ルール タイプの アクション 以下に示すように。
これで、ルールセットの最初のルールが作成され、各ブラックリストのクライアントIPに一致するための条件を作成できます ライブ、セミライブ、オンデマンドビデオ ヘッダ。 に行く の賃貸条件 に従って条件を作成します REMOTE_ADDR 以下に示すように変数。
次に、別の条件を作成します 仮想ホスト 一致する SERVER_NAME 次のような変数:
この時点で、最初にホストされているWebサイト www.mycompany1.com すでに設定されているブラックリストからWebアプリケーションブラックリストIPアドレスを管理します。 Blacklistmycompany1.txt.
XNUMX番目のWebサイト用に別のルールを作成しましょう www.mycompany2.com 前のルール設定と同じ設定を繰り返しますが、この場合、変更する必要があります SERVER_NAME 〜へ mycompany2.com 以下を参照してください blacklist2.txt.
複合WAFルールセットの構成全体を確認します。
最後に、このルールセットを既に作成されているファームに追加し、タブに移動します 農場 農場を移動します ホスティング、この例では、 有効なファーム セクションを以下に示します。
ファームのWAFルールセットを開始し、アクションをクリックします プレイ このウィンドウの左上のセクションで、システムはファームのHTTPトラフィックのフィルタリングを開始します ホスティング.
Webアプリケーションファイアウォールルールセットのテスト
クライアントIP 192.168.1.191 ウェブサイトをリクエストします http://www.mycompany1.com 及び http://www.mycompany2.com そして、私たちの構成によると、WAFシステムは同じ名前の最初のサービスへの接続を許可しますが、接続は拒否されます mycompany2.com このIPは名前付きのブラックリストに含まれているため ブラックリストmycompany2.
IPアドレス192.168.1.191からVIPにロードバランサーを介してWebサイトwww.mycompany1.comを要求するには:
root@192.168.1.191:# curl -H "Host: www.mycompany1.com" http://192.168.100.58 -v * Rebuilt URL to: http://192.168.100.58/ * Trying 192.168.100.58... * TCP_NODELAY set * Connected to 192.168.100.58 (192.168.100.58) port 80 (#0) > GET / HTTP/1.1 > Host: www.mycompany1.com > User-Agent: curl/7.52.1 > Accept: */* > < HTTP/1.1 200 OK < Server: nginx/1.10.3 < Date: Tue, 10 Sep 2019 15:36:22 GMT < Content-Type: text/html < Content-Length: 11383 < Last-Modified: Thu, 13 Dec 2018 11:01:49 GMT < Connection: keep-alive < ETag: "5c123c1d-2c77" < Accept-Ranges: bytes <
IPアドレス192.168.1.191からVIPにロードバランサーを介してWebサイトwww.mycompany2.comを要求するには:
root@192.168.1.191:# curl -H "Host: www.mycompany2.com" http://192.168.100.58 -v * Rebuilt URL to: http://192.168.100.58/ * Trying 192.168.100.58... * TCP_NODELAY set * Connected to 192.168.100.58 (192.168.100.58) port 80 (#0) > GET / HTTP/1.1 > Host: www.mycompany2.com > User-Agent: curl/7.52.1 > Accept: */* > * HTTP 1.0, assume close after body < HTTP/1.0 403 Request forbidden < Content-Type: text/html < Content-Length: 17 < Expires: now < Pragma: no-cache < Cache-control: no-cache,no-store < * Curl_http_done: called premature == 0 * Closing connection 0 replied forbiddenp
一度 禁断の 応答が生成されると、WAFモジュールはロードバランサーのSyslogファイルで拒否を通知します。
root@zva6000:# tail -f /var/log/syslog Sep 10 15:38:44 zva6000 pound: Hosting, ModSecurity: Warning. Matched "Operator `StrMatch' with parameter `mycompany2.com' against variable `SERVER_NAME' (Value: `www.mycompany2.com' ) [file "/usr/local/zevenet/config/ipds/waf/sets/HostingBlacklisting.conf"] [line "17"] [id "1001"] [rev ""] [msg "Custom Match 2"] [data ""] [severity "0"] [ver ""] [maturity "0"] [accuracy "0"] [hostname "192.168.100.58"] [uri "/"] [unique_id "156812992458.770641"] [ref "v0,13v21,18"] Sep 10 15:38:44 zva6000 pound: Hosting, [WAF,service mycompany2, backend 192.168.100.22:80,] (7f6cfac3c700) [client 192.168.1.191] ModSecurity: Access denied with code 403 (phase 1). Matched "Operator `StrMatch' with parameter `mycompany2.com' against variable `SERVER_NAME' (Value: `www.mycompany2.com' ) [file "/usr/local/zevenet/config/ipds/waf/sets/HostingBlacklisting.conf"] [line "17"] [id "1001"] [rev ""] [msg "Custom Match 2"] [data ""] [severity "0"] [ver ""] [maturity "0"] [accuracy "0"] [hostname "192.168.100.58"] [uri "/"] [unique_id "156812992458.770641"] [ref "v0,13v21,18"] Sep 10 15:38:44 zva6ktpl1 pound: Hosting, service mycompany2, backend 192.168.100.25:80, (7f6cfac3c700) WAF denied a request from 192.168.1.191
HTTP / Sディープパケットインスペクション技術を使用して、Webアプリケーションを保護するカスタムファイアウォールルールセットを構築できるようになりました。