Network Firewallのネットワーク構成は様々なパターンが存在しますが、今回はLoad Balancerと組み合わせた場合の構成を紹介します。Load Balancerは、Public Load Balancerとしてインターネットからのアクセスを処理するのですが、Network FirewallをLoad Balancerの前に配置する、後ろに配置するによって設定や動作に違いがあります。
まず最初にLoad BalancerをNetwork Firewallの前に配置する構成を考えてみます。こちらのスライドをご覧ください。
Network Firewallをパブリック・サブネットに配置し、Load BalancerへのすべてのアクセスをNetwork Firewallが一旦全部受けるようになります。メリット、デメリットもそれぞれ記載していますが、Load Balancer以外のパブリック・サブネットにあるコンピュートもNetwork Firewallによってインターネットへの送受信を保護されるので、特にパブリック・サブネットに多くのリソースを配置している環境には適しているかと思います。
では実際に作成するための手順を紹介します。
VCNの作成
VCNウィザードを使用して下記アドレスのVCNを作成する
VCN名 | CIDR | パブリック・サブネット | プライベート・サブネット |
---|---|---|---|
任意 | 172.16.0.0/21 | 172.16.0.0/24 | 172.16.1.0/24 |
下記のように、Load BalancerとNetwork Firewall用のパブリック・サブネットをそれぞれ追加で作成する
Network Firewallの作成
今回は、Network FirewallをIPSとしての動作テストを行うので、通信をブロックさせるポリシーを作成する
まず最初にNetwork Firewallのポリシーをひとつ作成。作成後、ポリシーの詳細設定画面からセキュリティルールの作成をクリックし、すべてデフォルトのままで、最後のアクションだけを侵入防止を指定する
Network FirewallをNFW用のパブリック・サブネットに作成する。ポリシーは上記で作成したものを指定し、NATは有効化せずに作成。作成が完了したらNFWに割り当てられるプライベートIPアドレスを控えておく
ルート・ルールの設定
まず、新規で3つのルート・ルールを作成する
Load Balancerのサブネット用にルート・ルールを作成。すべてのトラフィックは、Network Firewallへ
Network Firewallのサブネット用にルート・ルールを作成。すべてのトラフィックは、Internet Gatewayへ
Internet Gateway用にでルート・ルールを作成。LBのサブネットへのアクセスは、Network Firewallへ
次に、作成したそれぞれのルート・ルールを適用していく
Load Balancerのサブネットの編集から、作成したルート表に変更する
NFWのサブネットのサブネットの編集から、作成したルート表に変更する
インターネット・ゲートウェイのルート表の関連付けを選択し、作成したルート表を割り当てる
デフォルトのパブリックとプライベートのセキュリティリストのイングレス・ルールを下記のように変更する
WEBサーバーの設定
下記の2つのVMを指定のサブネットに作成する
VM名 | サブネット | 用途 |
---|---|---|
PublicVM | Load Balancerのパブリック・サブネット | 通信確認用&踏み台 |
PrivateVM | デフォルトのプライベート・サブネット | LBのバックエンド・サーバ |
まず、作成したPublicVMのインスタンスに接続できるか確認する。この接続は、Network Firewallを経由したアクセスになっているので、接続できない場合は上記のルート・ルールの設定が間違っている。
PublicVMからPrivateVMにログインして、以下のWEBサーバ関連の設定を実行
$ sudo systemctl stop firewalld
$ sudo yum install httpd
$ sudo systemctl start httpd
テスト用のhtmlを作成して配置
$ sudo vi /var/www/html/test.html
<!doctype html>
<html>
<head><meta charset="utf-8"><title>XSS Demo</title></head>
<body>
<h1>XSS Demo</h1>
<form><input name="name"><button>送信</button></form>
<div><script>let p=new URLSearchParams(location.search).get('name'); if(p)document.write(p);</script></div>
</body>
</html>
PublicVMからURLアクセスできるか確認しておく
$ curl http://PrivateVM IP/test.html
<!doctype html>
<html>
<head><meta charset="utf-8"><title>XSS Demo</title></head>
<body>
<h1>XSS Demo</h1>
<form><input name="name"><button>送信</button></form>
<div><script>let p=new URLSearchParams(location.search).get('name'); if(p)document.write(p);</script></div>
</body>
Load Balancerの作成
名前は、任意。サブネットは、LBのパブリック・サブネットを指定
バックエンド・サーバーは、PrivateVMを指定。ヘルスチェックポリシーは、プロトコルをHTTPに変更し、URLパスをHTMLのある/test.htmlにする
リスナーのトラフィック・タイプはHTTPに変更。以降は、ログ・グループなどの指定なので、お好みで指定してLBを作成する
http://Load BalancerのPublic IP/test.htmlでアクセスできれば準備完了
以下のJava Scriptを入力して送信し、接続がリセットされればNetwork FirewallがXSSとして認識してブロックしていることになる
<script>alert("It's XSS ")</script>
Network FirewallのThereat Logを有効化しておけば、ログの詳細を確認できる。ログについて詳しくは、こちらのチュートリアルを参考に
手順としては以上です。プライベートIPからのアウトバウンド・アクセスは、Squidなどのプロキシ・サーバーをロードバランサーのパブリック・サブネットに作成し、そこを経由させることで Private VM -> Squid -> Network Firewall -> Internetという流れで、Network Firewallのトラフィックを検査させることが可能です。
次回は、Network FirewallをLoad Balancerを後ろに配置した構成を紹介します。