Sophos UTM でWebセキュリティー対策 第5回 ~ロードバランサー~
目次
前回 (第4回) の内容
株式会社ハイパーボックス -HYPER BOX- の相原と申します。
前回は
- ファイアウォールプロファイルの作成
- WAFで保護する対象のWebサーバ設定
- 新規仮想Webサーバの作成
- 仮想Webサーバ (リバースプロキシ) の作成
- WAFのライブログ確認とフィルタルールのスキップ設定
- インフラストラクチャルール
- WAFの動作確認
を紹介しました。
第5回となる今回は、バックエンドWebサーバのロードバランスについて紹介してまいります。
第1回 | インスタンスの作成から初期設定まで |
第2回 | 簡易的なネットワーク構成の構築、ファイアウォールの設定、DNATの設定 |
第3回 | ネットワークプロテクション 侵入防御(IPS)の設定、高度な脅威防御(ATP)の設定 |
第4回 | Webサーバプロテクション WAFの設定 |
第5回 | Webサーバプロテクション WAFとロードバランシングの設定 |
第5回 Webサーバプロテクション WAFとロードバランシングの設定
今回の概要
Webサーバの追加
ロードバランス用にWebサーバを2台追加
バックエンドWebサーバの作成
追加したWebサーバ、2台分のバックエンドWebサーバを作成
証明書の作成
Sophos UTM で、証明書を作成
仮想Webサーバの作成
仮想Webサーバ (今回はhttps) を作成
ロードバランスの動作確認
追加した2台のWebサーバで、ラウンドロビンされるか確認
Webサーバの追加
下図のようにWebサーバを2台追加します。wordpress-server (192.168.0.2) を経由して、web1とweb2へSSHログインして作業を行います。
- web1の設定内容
[root@web1 ~]# yum -y install httpd [root@web1 ~]# systemctl start httpd [root@web1 ~]# firewall-cmd --add-service=http --zone=public --permanent [root@web1 ~]# firewall-cmd --reload [root@web1 ~]# vi /var/www/html/index.html <html> <HEAD> <TITLE>Sophos UTM test web1</TITLE> </HEAD> <meta http-equiv="content-type" charset="utf-8"> <body bgcolor="#000080"> <h1> </h1> <p><font size="5" color="#ffffff">Sophos UTM</font></p> <h1> </h1> <p><font size="5" color="#ffffff">ロードバランス テスト</font></p> <h1> </h1> <p><font size="5" color="#ffffff">web1</font></p> <h1> </h1> </body> </html> [root@web1 ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 BOOTPROTO=static ONBOOT=yes GATEWAY=192.168.0.1 PREFIX=24 IPADDR=192.168.0.11 DNS1=133.242.0.3 DNS2=133.242.0.4 [root@web1 ~]# apachectl -v Server version: Apache/2.4.6 (CentOS) Server built: Jun 27 2018 13:48:59
- web2の設定内容
[root@web2 ~]# yum -y install httpd [root@web2 ~]# systemctl start httpd [root@web2 ~]# firewall-cmd --add-service=http --zone=public --permanent [root@web2 ~]# firewall-cmd --reload [root@web2 ~]# vi /var/www/html/index.html <html> <HEAD> <TITLE>Sophos UTM test web2</TITLE> </HEAD> <meta http-equiv="content-type" charset="utf-8"> <body bgcolor="#008000"> <h1> </h1> <p><font size="5" color="#ffffff">Sophos UTM</font></p> <h1> </h1> <p><font size="5" color="#ffffff">ロードバランス テスト</font></p> <h1> </h1> <p><font size="5" color="#ffffff">web2</font></p> <h1> </h1> </body> </html> [root@web2 ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 BOOTPROTO=static ONBOOT=yes GATEWAY=192.168.0.1 PREFIX=24 IPADDR=192.168.0.12 DNS1=133.242.0.3 DNS2=133.242.0.4 [root@web2 ~]# apachectl -v Server version: Apache/2.4.6 (CentOS) Server built: Jun 27 2018 13:48:59
バックエンドWebサーバの作成
Webサーバプロテクション > WAF > バックエンドWebサーバ タブ へ移動します。
- web1用「バックエンドWebサーバ」の作成
「+ 新規バックエンドWebサーバ」をクリックし、「リアルWebサーバの追加」にて、名前は任意ですが「lb-test-web1」とし、タイプは「平文 (HTTP)」を選択し、ポートは「80」のままとします。
「ホスト」の「 + 」をクリックして「ネットワークオブジェクトを追加」にて、こちらも名前は任意ですが「lb-test-web1」とし、タイプで「ホスト」を選択します。
IPv4アドレスには「192.168.0.11」と入力し、「ネットワークオブジェクトを追加」内の「保存」ボタンをクリックし、次に「リアルWebサーバの追加」内の「保存」ボタンをクリックします。
- web2用「バックエンドWebサーバ」の作成
「+ 新規バックエンドWebサーバ」をクリックし、「リアルWebサーバの追加」にて、名前は任意ですが「lb-test-web2」とし、タイプは「平文 (HTTP)」を選択し、ポートは「80」のままとします。
「ホスト」の「 + 」をクリックして「ネットワークオブジェクトを追加」にて、こちらも名前は任意ですが「lb-test-web2」とし、タイプで「ホスト」を選択します。
IPv4アドレスには「192.168.0.12」と入力し、「ネットワークオブジェクトを追加」内の「保存」ボタンをクリックし、次に「リアルWebサーバの追加」内の「保存」ボタンをクリックします。
- 2台分の「バックエンドwebサーバ」が作成されたか確認します。
証明書の作成
- Webサーバプロテクション > 証明書管理 >証明書 タブへ移動し、「+ 新規証明書」をクリックします。
- 名前は任意ですが「test cert」とし、メソッドは「生成」を選択、VPN IDタイプは「IPアドレス」を選択、VPN ID には、Sophos UTM に付与されたグローバルIPアドレスを入力します。その他はデフォルトのままで「保存」ボタンをクリックします。
- 証明書が作成されたか確認します。
仮想Webサーバの作成
- Webサーバプロテクション > WAF > 仮想Webサーバ タブへ移動し、「+ 新規仮想Webサーバ」をクリックします。
- 名前は任意ですが「v-lb-test-web」とし、インターフェイスは「External (Address)」を選択、今回のタイプは「暗号化 (HTTPS)」を選択し、ポートはデフォルトの「443」とし、証明書は、先ほど作成した「test cert」を選択します。「パス’/’用の実際のウェブサーバ」は、先ほど作成した バックエンドWebサーバの「lb-test-web1」と「lb-test-web2」にチェックを入れ、ファイアウォールプロファイルは以前に作成した「TEST Protection」を選択して「保存」ボタンをクリックします。
- トグルスイッチをクリックして、作成した仮想Webサーバを有効にします。
- リロードをクリックして、仮想Webサーバと紐づけられたバックエンドWebサーバが有効(緑)になっていることを確認します。
ロードバランスの動作確認
設定が完了しましたので、追加したWebサーバ2台のバランシングを確認します。
- ブラウザで下記のURLを表示させます。
https://Sophos UTMに付与されたグローバルIPアドレス/
web1のindex.htmlの内容が表示されます。
- 「 F5 」を押し、ページを更新させますと、web2のindex.htmlの内容が表示されます。
何度か「 F5 」を押すと、その度 web1 と web2 の表示が切り替わり、ラウンドロビンでバランシングされていることが確認できます。
ロードバランス後のセッション維持について
ロードバランスした際に、バックエンドWebサーバとのセッション維持が必要になる場合は、下記のように設定します。
- Webサーバプロテクション > WAF > サイトパスルーティング タブへ移動し、「v-lb-test-web」の「編集」をクリックします。
- 「詳細」を開き、「セッション維持cookieの有効化」にチェックを入れ「保存」ボタンをクリックします。
上記の設定で、最初にロードバランスにより振り分けられた Webサーバへの接続が維持されます。「 F5 」を押しても切り替わらず、同じWebサーバへ接続されていることが確認できます。
その他
バックエンドWebサーバに指定されたWebサーバのアクセスログにリクエスト元のIPアドレスを出力させる場合は、Webサーバ側に「x-forwarded-for」の設定が必要になります。
「x-forwarded-for」の設定がされていない場合は、下記のように 「Internal Interface」のIPアドレスのみログに出力されます。
[root@web1 ~]# tail -f /var/log/httpd/access_log 192.168.0.1 - - [25/Sep/2018:16:39:32 +0900] "GET / HTTP/1.1" 200 687 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36" 192.168.0.1 - - [25/Sep/2018:16:39:32 +0900] "GET /favicon.ico HTTP/1.1" 404 209 "https://wildcard1.caution.jp/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36" 192.168.0.1 - - [25/Sep/2018:18:37:42 +0900] "GET / HTTP/1.1" 200 684 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36 OPR/55.0.2994.44" 192.168.0.1 - - [25/Sep/2018:18:38:52 +0900] "GET / HTTP/1.1" 200 684 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36 OPR/55.0.2994.44" 192.168.0.1 - - [25/Sep/2018:18:38:53 +0900] "GET / HTTP/1.1" 200 684 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36 OPR/55.0.2994.44" 192.168.0.1 - - [25/Sep/2018:18:39:42 +0900] "GET / HTTP/1.1" 200 684 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36 OPR/55.0.2994.44" 192.168.0.1 - - [25/Sep/2018:18:40:34 +0900] "GET / HTTP/1.1" 200 684 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36 OPR/55.0.2994.44"
「x-forwarded-for」の内容をログに出力するには、httpd.confを以下のように変更します。
# vi /etc/httpd/conf/httpd.conf LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined ↓以下のように書き換える LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{X-Forwarded-For}i\"" combined # systemctl restart httpd
以下のように、末尾に「x-forwarded-for」の内容(リクエスト元のIPアドレス情報)が出力されるようになります。
[root@web1 ~]# tail -f /var/log/httpd/access_log 192.168.0.1 - - [08/Mar/2019:16:30:01 +0900] "GET / HTTP/1.1" 200 395 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36" "203.0.113.235" 192.168.0.1 - - [08/Mar/2019:16:30:03 +0900] "GET / HTTP/1.1" 200 395 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36" "203.0.113.235" 192.168.0.1 - - [08/Mar/2019:16:30:04 +0900] "GET / HTTP/1.1" 200 395 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36" "203.0.113.235" 192.168.0.1 - - [08/Mar/2019:16:30:05 +0900] "GET / HTTP/1.1" 200 395 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36" "203.0.113.235" 192.168.0.1 - - [08/Mar/2019:16:32:43 +0900] "GET / HTTP/1.1" 200 395 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36" "203.0.113.235"
今回はここまで
第5回を通して、仮想Webサーバに対して、複数のバックエンドWebサーバを指定することで、Sophos UTM がロードバランサーとして機能することをご理解いただけたと思います。
また、複数の仮想Webサーバの作成が可能な事から気付いた方もいると思いますが、Sophos UTM は SNI(Server Name Indication)に対応しています。仮想Webサーバ毎に証明書を設定し、バックエンドWebサーバを指定することで実現できます。
最後にまとめ
全5回の連載で、最終的に下図のような構成が完成しました。
今回の連載を通して、Sophos UTM の具体的な導入例として、基本設定や各防御機能の設定、そして、Webサーバがシングル構成のパターンと、冗長構成のパターンを紹介してきました。多機能なアプライアンスになりますので情報量が多く、説明しきれていない部分も多々ございますが、この連載が、Sophos UTM を導入される際の参考になれば幸いです。