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サーバ タブ へ移動します。

  1. web1用「バックエンドWebサーバ」の作成
    「+ 新規バックエンドWebサーバ」をクリックし、「リアルWebサーバの追加」にて、名前は任意ですが「lb-test-web1」とし、タイプは「平文 (HTTP)」を選択し、ポートは「80」のままとします。
    「ホスト」の「 + 」をクリックして「ネットワークオブジェクトを追加」にて、こちらも名前は任意ですが「lb-test-web1」とし、タイプで「ホスト」を選択します。
    IPv4アドレスには「192.168.0.11」と入力し、「ネットワークオブジェクトを追加」内の「保存」ボタンをクリックし、次に「リアルWebサーバの追加」内の「保存」ボタンをクリックします。
  2. web2用「バックエンドWebサーバ」の作成
    「+ 新規バックエンドWebサーバ」をクリックし、「リアルWebサーバの追加」にて、名前は任意ですが「lb-test-web2」とし、タイプは「平文 (HTTP)」を選択し、ポートは「80」のままとします。
    「ホスト」の「 + 」をクリックして「ネットワークオブジェクトを追加」にて、こちらも名前は任意ですが「lb-test-web2」とし、タイプで「ホスト」を選択します。
    IPv4アドレスには「192.168.0.12」と入力し、「ネットワークオブジェクトを追加」内の「保存」ボタンをクリックし、次に「リアルWebサーバの追加」内の「保存」ボタンをクリックします。
  3. 2台分の「バックエンドwebサーバ」が作成されたか確認します。

 

証明書の作成

  1. Webサーバプロテクション > 証明書管理 >証明書 タブへ移動し、「+ 新規証明書」をクリックします。
  2. 名前は任意ですが「test cert」とし、メソッドは「生成」を選択、VPN IDタイプは「IPアドレス」を選択、VPN ID には、Sophos UTM に付与されたグローバルIPアドレスを入力します。その他はデフォルトのままで「保存」ボタンをクリックします。
  3. 証明書が作成されたか確認します。

 

仮想Webサーバの作成

  1.  Webサーバプロテクション > WAF > 仮想Webサーバ タブへ移動し、「+ 新規仮想Webサーバ」をクリックします。
  2. 名前は任意ですが「v-lb-test-web」とし、インターフェイスは「External (Address)」を選択、今回のタイプは「暗号化 (HTTPS)」を選択し、ポートはデフォルトの「443」とし、証明書は、先ほど作成した「test cert」を選択します。「パス’/’用の実際のウェブサーバ」は、先ほど作成した バックエンドWebサーバの「lb-test-web1」と「lb-test-web2」にチェックを入れ、ファイアウォールプロファイルは以前に作成した「TEST Protection」を選択して「保存」ボタンをクリックします。
  3. トグルスイッチをクリックして、作成した仮想Webサーバを有効にします。
  4. リロードをクリックして、仮想Webサーバと紐づけられたバックエンドWebサーバが有効(緑)になっていることを確認します。

 

ロードバランスの動作確認

設定が完了しましたので、追加したWebサーバ2台のバランシングを確認します。

  1. ブラウザで下記のURLを表示させます。
    https://Sophos UTMに付与されたグローバルIPアドレス/
    web1のindex.htmlの内容が表示されます。
  2. 「 F5 」を押し、ページを更新させますと、web2のindex.htmlの内容が表示されます。

何度か「 F5 」を押すと、その度 web1 と web2 の表示が切り替わり、ラウンドロビンでバランシングされていることが確認できます。

 

ロードバランス後のセッション維持について

ロードバランスした際に、バックエンドWebサーバとのセッション維持が必要になる場合は、下記のように設定します。

  1. Webサーバプロテクション > WAF > サイトパスルーティング タブへ移動し、「v-lb-test-web」の「編集」をクリックします。
  2. 「詳細」を開き、「セッション維持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 を導入される際の参考になれば幸いです。