環境
機器 | バージョン |
---|---|
vThunder | 5.2.1-p5, build 114 |
FortiGate-VM | v6.4.13 build2092 (GA) |
WindowsServer | Windows Server 2019 |
CentOS8 | CentOS 8.5.2111 |
httpd | 2.4.37-43 |
openssl | 1.1.1.k-5 |
mod_ssl | 2.4.37-43 |
構成イメージ図

webサーバ構築
以下を参照
https://qiita.com/motimotinoyamayama/items/6b3a3ee0ff8db9471219
証明書類を作成
以下を参照。
ルートCA証明書と鍵はvThunderに適用、サーバ証明書と鍵はwebサーバに適用する。
https://qiita.com/motimotinoyamayama/items/344ba7797caca61eef5b
Clientの設定
ブラウザにルートCA証明書のPEMファイルをインポートする
Forigate-VM
I/Fの設定。port3は管理セグメント。
AccessModeとして動作させるため、物理I/Fに設定している。
Foriは平文のパケットを通過させるだけなので、全てのパケットを許可する。
NATはvThunder exのaclが100.0.0.0 /24を指定しているので、無効化にする。
vThunder
ADP作成
vThunderでSSLiする際、システムpromiscuous モードを設定
promiscuousモードとは、ネットワーク上を流れる全てのデータパケットを受信するモード。
A10(config)#system promiscuous-mode
同一筐体の複数パーティションを連結する際のMacアドレス重複を避けるために設定を行い、リロードする。
A10(config)#system ve-mac-scheme system-mac
A10(config)#write memory
A10(config)#exit
A10#reload
SSL Insight 用の ADP(内側パーティション・外側パーティション)を作成します。パーティション設定。
アプリケーションデリバリコントローラ(ADC)とは、サーバの負荷分散装置の一種で、高度な制御機能やサーバ負荷の一部を肩代わりする機能を持ったもの。
A10(config)# partition in id 1 application-type adc
A10(config)# partition ex id 2 application-type adc
Partition Name Id L3V/SP Parent L3V App Type Admin Count Active
--------------------------------------------------------------------------------------
in 1 L3V - ADC 0 *
ex 2 L3V - ADC 0 *
Partition in 作成
internalパーティションへ移動
A10(config)# active-partition in
CA証明書と鍵のインポート
GUIで操作。
ルートCA証明書のインポート。
ネットワークの設定
vlan 10
untagged ethernet 1
router-interface ve 10
exit-module
!
vlan 50
untagged ethernet 2
router-interface ve 50
exit-module
!
!
interface ethernet 1
enable
exit-module
!
interface ethernet 2
enable
exit-module
!
interface ve 10
ip address 100.0.0.1 255.255.255.0
ip allow-promiscuous-vip
exit-module
!
interface ve 50
ip address 10.0.5.1 255.255.255.0
exit-module
!
!
ip route 0.0.0.0 /0 10.0.5.254
SSLiの対象となるClientNetworkをACLで定義
a10[in](config)#access-list 100 permit ip 100.0.0.0 /24 any vlan 10
realserverの設定
復号化トラフィックの転送先を定義。
slb serverにはサーバ名とIPアドレス、portには、ポート番号とL4プロトコルの種別を指定します。
8080番ポートは80番ポートの代替。
0番ポートはエニーポート(any port)と呼ばれ、アプリケーションに対して、動的に別番号の空きポートを割り当てるために用意された特殊なポート番号。
health-check-disable はリアルサーバに対してpingによるヘルスチェック、公開ポートに対してL4ポートのヘルスチェックを無効にする(デフォルトは有効)
a10[in](config)#slb server gw1 10.0.5.254
a10[in](config-real server)#port 0 tcp
a10[in](config-real server-node port)#health-check-disable
a10[in](config-real server)#port 0 udp
a10[in](config-real server-node port)#health-check-disable
a10[in](config-real server)#port 8080 tcp
a10[in](config-real server-node port)health-check-disable
service groupに割り当て
real server から service group を作成します。
service group により real server をグループ化します。 このグループ化されたサーバ群に対して、ロードバランシングが実行されます。
slb service-groupには、サービスグループ名とL4プロトコルの種別を指定。memberには、リアルサーバの設定で指定したサーバ名とポート番号を指定。
a10[in](config)#slb service-group gw-http tcp
a10[in](config-slb svc group)#member gw1 8080
a10[in](config)#slb service-group gw-tcp tcp
a10[in](config-slb svc group)#member gw1 0
a10[in](config)#slb service-group gw-udp udp
a10[in](config-slb svc group)#member gw1 0
client-ssl template の設定
SSL Insight の内側デバイスとして動作させるよう定義します。
SSLオフロードの復号化処理を行う。
SSLテンプレートを作成し、先ほどimportした証明書と秘密鍵を紐付けます。
A10[in](config)#slb template client-ssl cs1
A10[in](config-client ssl)#forward-proxy-ca-cert ca1
A10[in](config-client ssl)#forward-proxy-ca-key ca1
A10[in](config-client ssl)#forward-proxy-enable
virtual server の設定
SSL通信を受け入れる wild card VIP を設定します。
slb virtual-serverには、バーチャルサーバ名と、ロードバランサ自身で保持する仮想IPを指定します。
A10[in](config)#slb virtual-server wc1 0.0.0.0 acl 100
portには、バーチャルサーバがリッスンするポート番号とL4プロトコルの種別を指定します。このポートは、リアルサーバのポート番号と異なる番号を指定することも可能です。
service-groupには、負荷分散先のリアルサーバが所属するサービスグループ名を指定します。
no-dest-nat は受信したパケットの宛先NATをしない。(デフォルトはリアルサーバのIPアドレスにNATするので、これを抑止)
anyポートとanyポートに紐づけられたtcp、udp以外のL4プロトコルを指定。サービスグループはgw-udpを紐づけ。
A10[in](config-slb vserver)#port 0 others
A10[in](config-slb vserver-vport)#service-group gw-udp
A10[in](config-slb vserver-vport)#no-dest-nat
anyポートとtcpを指定。サービスグループはgw-tcpを紐づけ。
A10[in](config-slb vserver)#port 0 tcp
A10[in](config-slb vserver-vport)#service-group gw-tcp
A10[in](config-slb vserver-vport)#no-dest-nat
anyポートとudpを指定。サービスグループはgw-udpを紐づけ。
A10[in](config-slb vserver)#port 0 udp
A10[in](config-slb vserver-vport)#service-group gw-udp
A10[in](config-slb vserver-vport)#no-dest-nat
443ポートとhttpsを指定。サービスグループはgw-http、先ほど定義したclient-ssl templateを紐づけ。
port-translation を指定した場合、宛先Portはリアルサーバのものに変更。
A10[in](config-slb vserver)#port 443 https
A10[in](config-slb vserver-vport)#service-group gw-http
A10[in](config-slb vserver-vport)#no-dest-nat port-translation
A10[in](config-slb vserver-vport)#template client-ssl cs1 ※
Partition ex 作成
externalパーティションへ移動
A10(config)#active-partition ex
ACLの設定
SSL Insight の対象となるクライアントネットワーク(および宛先)をACLで定義
A10[ex](config)#access-list 100 permit ip 100.0.0.0 0.0.0.255 any ethernet 3
ネットワークの設定
vlan 30
untagged ethernet 4
router-interface ve 30
exit-module
!
vlan 60
untagged ethernet 3
router-interface ve 60
exit-module
!
!
interface ethernet 3
enable
exit-module
!
interface ethernet 4
enable
exit-module
!
interface ve 30
ip address 10.0.2.1 255.255.255.0
exit-module
!
interface ve 60
ip address 10.0.6.1 255.255.255.0
ip allow-promiscuous-vip
exit-module
!
!
ip route 0.0.0.0 /0 10.0.6.254
server-ssl templateの設定
SSL Insight の外側デバイスとして動作させるよう定義します。
SSLオフロードの暗号化処理を行う。
A10[ex](config)#slb template server-ssl ss1
A10[ex](config-server ssl)#forward-proxy-enable
real server の設定
暗号化トラフィックの転送先を定義。
slb serverにはサーバ名とIPアドレス、portには、ポート番号とL4プロトコルの種別を指定します。
A10[ex](config)#slb server gw1 10.0.2.254
A10[ex](config-real server)#port 0 tcp
A10[ex](config-real server-node port)#health-check-disable
A10[ex](config-real server)#port 0 udp
A10[ex](config-real server-node port)#health-check-disable
A10[ex](config-real server)#port 443 tcp
A10[ex](config-real server-node port)#health-check-disable
service group の設定
real server から service group を作成します。
service group により real server をグループ化します。 このグループ化されたサーバ群に対して、ロードバランシングが実行されます。
slb service-groupには、サービスグループ名とL4プロトコルの種別を指定。memberには、リアルサーバの設定で指定したサーバ名とポート番号を指定。
A10[ex](config)#slb service-group gw-http tcp
A10[ex](config-slb svc group)#member gw1 443
A10[ex](config)#slb service-group gw-tcp tcp
A10[ex](config-slb svc group)#member gw1 0
A10[ex](config)#slb service-group gw-udp udp
A10[ex](config-slb svc group)#member gw1 0
virtual server の設定
wildcard VIP を作成し、クライアントからのトラフィクを処理。
slb virtual-serverには、バーチャルサーバ名と、ロードバランサ自身で保持する仮想IPを指定します。
A10[ex](config)slb virtual-server wc1 0.0.0.0 acl 100
portには、バーチャルサーバがリッスンするポート番号とL4プロトコルの種別を指定します。このポートは、リアルサーバのポート番号と異なる番号を指定することも可能です。
service-groupには、負荷分散先のリアルサーバが所属するサービスグループ名を指定します。
no-dest-nat は受信したパケットの宛先NATをしない。(デフォルトはリアルサーバのIPアドレスにNATするので、これを抑止)
use-rcv-hop-for-respはサーバからのリプライパケットをリクエストパケットのソースMACアドレス宛に戻したい場合に利用。これがない場合はルーティングテーブルを参照しネクストホップのMACアドレスに戻す。
anyポートとanyポートに紐づけられたtcp、udp以外のL4プロトコルを指定。サービスグループはgw-udpを紐づけ。
A10[ex](config-slb vserver)port 0 others
A10[ex](config-slb vserver-vport)service-group gw-udp
A10[ex](config-slb vserver-vport)use-rcv-hop-for-resp
A10[ex](config-slb vserver-vport)no-dest-nat
anyポートとtcpを指定。サービスグループはgw-tcpを紐づけ。
A10[ex](config-slb vserver)port 0 tcp
A10[ex](config-slb vserver-vport)service-group gw-tcp
A10[ex](config-slb vserver-vport)use-rcv-hop-for-resp
A10[ex](config-slb vserver-vport)no-dest-nat
anyポートとudpを指定。サービスグループはgw-udpを紐づけ。
A10[ex](config-slb vserver)port 0 udp
A10[ex](config-slb vserver-vport)service-group gw-udp
A10[ex](config-slb vserver-vport)use-rcv-hop-for-resp
A10[ex](config-slb vserver-vport)no-dest-nat
8080ポートとhttpを指定。サービスグループはgw-http、先ほど定義したserver-ssl templateを紐づけ。
A10[ex](config-slb vserver)port 8080 http
A10[ex](config-slb vserver-vport)service-group gw-http
A10[ex](config-slb vserver-vport)use-rcv-hop-for-resp
A10[ex](config-slb vserver-vport)template server-ssl ss1
A10[ex](config-slb vserver-vport)no-dest-nat port-translation
SSL Insight 検証
Forigateのport1でパケットキャプチャ取得するため、port1を指定してキャプチャをスタートさせる。
Forigate-VMのport1で取得したキャプチャ。
WebサーバからWebブラウザへ送られるHTTPステータスコード(200 OK)に平文化されたことで、webフォームに入力した文字列WebServer_test
を確認出来る。