前回ご紹介した、ジュニパーネットワークス社 SRXシリーズのAPBR活用法 第2弾として、Secure Web Proxy機能を使い、プロキシサーバを利用中のネットワーク環境であってもLBO(Local Break Out:ローカルブレイクアウト)させる設定方法をご紹介します。
■前回の記事はこちら↓
前回ブログ記事:「ジュニパーネットワークス社 SRXシリーズのAPBR活用法」
■あわせて読まれている資料:
CROSS for Juniper Mist(ネットワークマネージドサービス)
Secure Web Proxyとは
前回ご紹介した、ジュニパーネットワークス社 SRXシリーズのAPBR活用法の第2段となります。第1段と関連する部分もありますので、合わせて前回のブログをご確認いただければと思います。
昨今、組織のポリシーに準拠させる為に、Webサーバから送られてきたコンテンツに不正なコードやマルウェアが含まれていないかチェックしたり、通信内容をログとして記録させる目的として、プロキシサーバを導入するケースがあります。
しかし、クラウドサービスの利用増加に伴い、セッション数増加で、プロキシサーバに想定以上の負荷がかかり、ネットワークやセキュリティのあり方を再考する必要が出てきました。
解決策として、LBOさせるという方法がありますが、これは特定のトラフィックがプロキシサーバを通過せずに直接インターネットにアクセスできることが前提となります。
引用元:ジュニパーネットワークス『Proxy 環境における ローカルブレイクアウトソリューションの 課題と解決 』
プロキシサーバがある場合、特定のトラフィックが直接インターネットにアクセスできるようにする為に、端末の設定やPACファイルで対応となりますが、これはこれで管理が煩雑となります。また、一部のみプロキシサーバを経由しない設計は困難で、LBOのソリューションは導入できないケースもあるかもしれません。
ジュニパーネットワークス社のSRXシリーズで、Secure Web Proxyの機能を使うことで、上記プロキシサーバ環境であっても、端末の設定変更やPACファイル配布をせずに、LBOを実現することができます。
実際に設定して試してみた結果は以下となります。
検証構成
本検証は、SRX320(Junos 22.4R3.25)、Advanced-1(A1)ライセンス適用の環境にて実施しています。
ゾーン定義は、ge-0/0/0側を「LAN」、ge-0/0/2側を「WAN1」とし、FWポリシーでLANからの通信は、プロキシサーバ(192.168.202.200)宛てのTCP8080ポートだけを許可させています。
実際の設定内容は、導入する環境や構成によって異なりますので、ご留意ください。
導入前ネットワーク構成とコンフィグ
root@SRX320TEST> show configuration
version 22.4R3.25;
system {
host-name SRX320TEST;
root-authentication {
encrypted-password "************"; ## SECRET-DATA
}
name-server {
8.8.8.8;
}
}
services {
application-identification;
}
security {
address-book {
global {
address PROXY 192.168.202.200/32;
}
}
policies {
from-zone LAN to-zone WAN1 {
policy LAN_to_WAN1 {
match {
source-address any;
destination-address PROXY;
application TCP8080;
}
then {
permit;
}
}
}
}
zones {
security-zone WAN1 {
interfaces {
ge-0/0/2.0;
}
}
security-zone LAN {
host-inbound-traffic {
system-services {
all;
}
protocols {
all;
}
}
interfaces {
ge-0/0/0.0;
}
}
}
}
interfaces {
ge-0/0/0 {
unit 0 {
family inet {
address 192.168.100.254/24;
}
}
}
ge-0/0/2 {
unit 0 {
family inet {
address 192.168.202.100/24;
}
}
}
}
applications {
application TCP8080 {
protocol tcp;
destination-port 8080;
}
}
routing-options {
static {
route 0.0.0.0/0 next-hop 192.168.202.254;
}
}
root@SRX320TEST> show route
inet.0: 5 destinations, 5 routes (5 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both
0.0.0.0/0 *[Static/5] 00:04:34
> to 192.168.202.254 via ge-0/0/2.0
192.168.100.0/24 *[Direct/0] 00:04:27
> via ge-0/0/0.0
192.168.100.254/32 *[Local/0] 00:04:27
Local via ge-0/0/0.0
192.168.202.0/24 *[Direct/0] 00:04:34
> via ge-0/0/2.0
192.168.202.100/32 *[Local/0] 00:04:34
Local via ge-0/0/2.0
inet6.0: 1 destinations, 1 routes (1 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both
ff02::2/128 *[INET6/0] 00:05:57
MultiRecv
PCは、プロキシサーバ(192.168.202.200)を使用する設定としています。
プロキシサーバを使用してインターネット接続できていることを確認します。
http://checkip.amazonaws.com
同様にプロキシサーバを使用してMicrosoft 365へ接続できることと、接続元が通常回線のIPであることを確認します。
Microsoft 365の接続元は、最近のアクティビティから確認可能です。https://mysignins.microsoft.com/
Secure Web Proxyの設定
プロキシサーバを利用する環境でも、SRXのSecure Web ProxyとAPBRの機能を組み合わせることで、Microsoft 365宛て等の特定通信をLBOさせることが可能です。
APBRの機能を利用する為には、SRXでAppSecure(Junos Software Enhanced(JSE) or A1ライセンス以上)が有効となっている必要があります。
SRXには、AppIDシグネチャがインストールされていることを前提として進めます。
SRXにインストールされているAppIDシグネチャのバージョンは、以下コマンドで確認可能です。
root@SRX320TEST> show services application-identification version
Application package version: 3679
Release date: Tue Feb 20 14:11:12 2024 UTC
① LBO用のインターネット回線の接続させるインターフェイスを作成します。
ge-0/0/3に192.168.203.100のIPを設定します。
root@SRX320TEST# set security zones security-zone WAN2 interfaces ge-0/0/3.0
作成したge-0/0/3.0のゾーンをWAN2として定義します。
root@SRX320TEST# set security zones security-zone WAN2 interfaces ge-0/0/3.0
インターネットへ抜ける時にge-0/0/3インターフェイスのIP(192.168.203.100)でSource NATさせたいので、NATのルールを追加します。
root@SRX320TEST# set security nat source rule-set LAN_to_WAN2 from zone LAN
root@SRX320TEST# set security nat source rule-set LAN_to_WAN2 to zone WAN2
root@SRX320TEST# set security nat source rule-set LAN_to_WAN2 rule source-nat-rule match source-address 0.0.0.0/0
root@SRX320TEST# set security nat source rule-set LAN_to_WAN2 rule source-nat-rule then source-nat interface
LBO用のインターネット回線を収容するインターフェイス(ここではge-0/0/3)には、明示
的に回線に合わせたMTUを指定させておいた方が経験上トラブルが少ないです。
set interfaces ge-0/0/3 unit 0 family inet mtu 1454
② routing-instanceの作成とルーティング、Secure Web Proxyプロファイル、APBR対象(LBO)のプロファイル・ポリシー、FWポリシーを設定します。
routing-instanceの作成と、そのrouting-instanceに対するデフォルトルートを定義します。
root@SRX320TEST# set routing-instances LBO_RI instance-type forwarding
root@SRX320TEST# set routing-instances LBO_RI routing-options static route 0.0.0.0/0 next-hop 192.168.203.254
デフォルトのルート情報を routing-instanceのルーティングテーブルにインポートさせます。
root@SRX320TEST# set routing-options interface-routes rib-group inet APBR_RIGRP
root@SRX320TEST# set routing-options rib-groups APBR_RIGRP import-rib inet.0
root@SRX320TEST# set routing-options rib-groups APBR_RIGRP import-rib LBO_RI.inet.0
LBO対象とするアプリケーションを定義します。今回はMicrosoft 365宛てに関連するシグネチャ(OFFICE365-CREATE-CONVERSATIONとMS-TEAMS)を対象とします。
root@SRX320TEST# set services application-identification application-group SWP_APPGRP applications junos:OFFICE365-CREATE-CONVERSATION
root@SRX320TEST# set services application-identification application-group SWP_APPGRP applications junos:MS-TEAMS
Secure Web Proxyのプロファイルを作成し、インターセプトさせる対象のプロキシサーバとLBO対象とするアプリケーショングループ(SWP_APPGRP)を指定します。
root@SRX320TEST# set services web-proxy secure-proxy profile SWP_PROFILE proxy-address PROXY ip 192.168.202.200/32
root@SRX320TEST# set services web-proxy secure-proxy profile SWP_PROFILE proxy-address PROXY port 8080
root@SRX320TEST# set services web-proxy secure-proxy profile SWP_PROFILE dynamic-web-application-group SWP_APPGRP
APBRのプロファイルを作成し、該当した通信(Microsoft 365宛て)はrouting-instance(LBO_RI)に転送させます。
root@SRX320TEST# set security advance-policy-based-routing profile SWP_LBO_PROFILE rule R1 match dynamic-application-group SWP_APPGRP
root@SRX320TEST# set security advance-policy-based-routing profile SWP_LBO_PROFILE rule R1 then routing-instance LBO_RI
APBRのポリシーを作成し、上記で作成したAPBRのプロファイル(SWP_LBO_PROFILE)を紐づけます。
root@SRX320TEST# set security advance-policy-based-routing from-zone LAN policy SWP_APBR_POLICY match source-address any
root@SRX320TEST# set security advance-policy-based-routing from-zone LAN policy SWP_APBR_POLICY match destination-address PROXY
root@SRX320TEST# set security advance-policy-based-routing from-zone LAN policy SWP_APBR_POLICY match destination-address-excluded
root@SRX320TEST# set security advance-policy-based-routing from-zone LAN policy SWP_APBR_POLICY match application any
root@SRX320TEST# set security advance-policy-based-routing from-zone LAN policy SWP_APBR_POLICY then application-services advance-policy-based-routing-profile SWP_LBO_PROFILE
match destination-addressをanyと指定しても動作しますが、プロキシサーバ(ここでは
192.168.202.200:8080)への通信をLBO対象として認識して、ge-0/0/3から出力してしまう
ことがあります。
その為、プロキシサーバは上記サンプルのように明示的に除外することをお勧めします。
Secure Web Proxyのプロファイル(SWP_PROFILE)をFWポリシーに紐づけます。
LANからプロキシサーバ(192.168.202.200)宛てTCP8080ポートの通信を既に許可しているので、ここに追加します。
root@SRX320TEST# set security policies from-zone LAN to-zone WAN1 policy LAN_to_WAN1 then permit application-services web-proxy profile-name SWP_PROFILE
LANからWAN2への通信を許可させる為、FWポリシーを設定します。
root@SRX320TEST# set security policies from-zone LAN to-zone WAN2 policy LAN_to_WAN2 match source-address any
root@SRX320TEST# set security policies from-zone LAN to-zone WAN2 policy LAN_to_WAN2 match destination-address any
root@SRX320TEST# set security policies from-zone LAN to-zone WAN2 policy LAN_to_WAN2 match application any
root@SRX320TEST# set security policies from-zone LAN to-zone WAN2 policy LAN_to_WAN2 then permit
Secure Web Proxy設定追加後の検証構成
Secure Web Proxy設定追加後ネットワーク構成とコンフィグ
root@SRX320TEST> show configuration
version 22.4R3.25;
system {
host-name SRX320TEST;
root-authentication {
encrypted-password "************"; ## SECRET-DATA
}
name-server {
8.8.8.8;
}
}
services {
application-identification {
application-group SWP_APPGRP {
applications {
junos:MS-TEAMS;
junos:OFFICE365-CREATE-CONVERSATION;
}
}
}
web-proxy {
secure-proxy {
profile SWP_PROFILE {
proxy-address PROXY {
ip 192.168.202.200/32;
port 8080;
}
dynamic-web-application-group SWP_APPGRP;
}
}
}
}
security {
address-book {
global {
address PROXY 192.168.202.200/32;
}
}
nat {
source {
rule-set LAN_to_WAN2 {
from zone LAN;
to zone WAN2;
rule source-nat-rule {
match {
source-address 0.0.0.0/0;
}
then {
source-nat {
interface;
}
}
}
}
}
}
policies {
from-zone LAN to-zone WAN1 {
policy LAN_to_WAN1 {
match {
source-address any;
destination-address PROXY;
application TCP8080;
}
then {
permit {
application-services {
web-proxy {
profile-name SWP_PROFILE;
}
}
}
}
}
}
from-zone LAN to-zone WAN2 {
policy LAN_to_WAN2 {
match {
source-address any;
destination-address any;
application any;
}
then {
permit;
}
}
}
}
zones {
security-zone WAN1 {
interfaces {
ge-0/0/2.0;
}
}
security-zone LAN {
host-inbound-traffic {
system-services {
all;
}
protocols {
all;
}
}
interfaces {
ge-0/0/0.0;
}
}
security-zone WAN2 {
interfaces {
ge-0/0/3.0;
}
}
}
advance-policy-based-routing {
profile SWP_LBO_PROFILE {
rule R1 {
match {
dynamic-application-group SWP_APPGRP;
}
then {
routing-instance LBO_RI;
}
}
}
from-zone LAN {
policy SWP_APBR_POLICY {
match {
source-address any;
destination-address PROXY;
destination-address-excluded;
application any;
}
then {
application-services {
advance-policy-based-routing-profile SWP_LBO_PROFILE;
}
}
}
}
}
}
interfaces {
ge-0/0/0 {
unit 0 {
family inet {
address 192.168.100.254/24;
}
}
}
ge-0/0/2 {
unit 0 {
family inet {
address 192.168.202.100/24;
}
}
}
ge-0/0/3 {
unit 0 {
family inet {
mtu 1454;
address 192.168.203.100/24;
}
}
}
}
routing-instances {
LBO_RI {
instance-type forwarding;
routing-options {
static {
route 0.0.0.0/0 next-hop 192.168.203.254;
}
}
}
}
applications {
application TCP8080 {
protocol tcp;
destination-port 8080;
}
}
routing-options {
interface-routes {
rib-group inet APBR_RIGRP;
}
static {
route 0.0.0.0/0 next-hop 192.168.202.254;
}
rib-groups {
APBR_RIGRP {
import-rib [ inet.0 LBO_RI.inet.0 ];
}
}
}
root@SRX320TEST> show route
inet.0: 7 destinations, 7 routes (7 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both
0.0.0.0/0 *[Static/5] 01:19:03
> to 192.168.202.254 via ge-0/0/2.0
192.168.100.0/24 *[Direct/0] 01:18:55
> via ge-0/0/0.0
192.168.100.254/32 *[Local/0] 01:18:55
Local via ge-0/0/0.0
192.168.202.0/24 *[Direct/0] 01:19:03
> via ge-0/0/2.0
192.168.202.100/32 *[Local/0] 01:19:03
Local via ge-0/0/2.0
192.168.203.0/24 *[Direct/0] 00:07:55
> via ge-0/0/3.0
192.168.203.100/32 *[Local/0] 00:07:55
Local via ge-0/0/3.0
LBO_RI.inet.0: 7 destinations, 7 routes (7 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both
0.0.0.0/0 *[Static/5] 00:07:55
> to 192.168.203.254 via ge-0/0/3.0
192.168.100.0/24 *[Direct/0] 00:11:18
> via ge-0/0/0.0
192.168.100.254/32 *[Local/0] 00:11:18
Local via ge-0/0/0.0
192.168.202.0/24 *[Direct/0] 00:11:18
> via ge-0/0/2.0
192.168.202.100/32 *[Local/0] 00:11:18
Local via ge-0/0/2.0
192.168.203.0/24 *[Direct/0] 00:07:55
> via ge-0/0/3.0
192.168.203.100/32 *[Local/0] 00:07:55
Local via ge-0/0/3.0
inet6.0: 1 destinations, 1 routes (1 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both
ff02::2/128 *[INET6/0] 01:20:42
MultiRecv
LBO_RI.inet6.0: 1 destinations, 1 routes (1 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both
ff02::2/128 *[INET6/0] 00:11:18
MultiRecv
動作確認①
Secure Web ProxyでLBOできているかは、SRXのカウンターやキャッシュ状態を確認することで判断できます。
LBOの対象の通信を発生させて、App rule hit on HTTP Proxy/ALGとRoute changed on HTTP Proxy/ALGのカウンターが上昇していれば、Secure Web ProxyでLBO がされています。
root@SRX320TEST> show security advance-policy-based-routing statistics
Advance Profile Based Routing statistics:
Sessions Processed 1723
App rule hit on cache hit 0
App rule hit by first packet classification 0
App rule hit on HTTP Proxy/ALG 113
Midstream disabled rule hit on cache hit 0
URL cat rule hit on cache hit 0
DSCP rule hit on first packet 0
App and DSCP hit on first packet 0
App rule hit midstream 1
Default rule match 0
Midstream disabled rule hit midstream 0
URL cat rule hit midstream 0
App and DSCP rule hit midstream 0
DSCP rule hit midstream 0
Route changed on cache hits 0
Route changed by first packet classification 0
Route changed on HTTP Proxy/ALG 113
Route changed midstream 0
Default rule applied 0
Zone mismatch 0
Drop on zone mismatch 0
Next hop not found 0
Application services bypass 0
LBO対象アプリケーションのシグネチャがキャッシュされているかも確認観点の一つです。
root@SRX320TEST> show services application-identification application-system-cache
Application System Cache Configurations:
application-cache: on
Cache lookup for security-services: off
Cache lookup for miscellaneous-services: on
cache-entry-timeout: 3600 seconds
pic: 0/0
Logical system name: 0
IP address: 40.99.6.146 Port: 443 Protocol: TCP
Application: SSL:OFFICE365-CREATE-CONVERSATION Encrypted: Yes
Classification Path: IP:TCP:SSL:OFFICE365-CREATE-CONVERSATION
Logical system name: 0
IP address: 52.110.8.45 Port: 443 Protocol: TCP
Application: SSL:OUTLOOK Encrypted: Yes
Classification Path: IP:TCP:SSL:OFFICE365-CREATE-CONVERSATION:OUTLOOK
Logical system name: 0
IP address: 52.97.201.242 Port: 443 Protocol: TCP
Application: SSL:OFFICE365-CREATE-CONVERSATION Encrypted: Yes
Classification Path: IP:TCP:SSL:OFFICE365-CREATE-CONVERSATION
Logical system name: 0
IP address: 52.98.74.178 Port: 443 Protocol: TCP
Application: SSL:OFFICE365-CREATE-CONVERSATION Encrypted: Yes
Classification Path: IP:TCP:SSL:OFFICE365-CREATE-CONVERSATION
Logical system name: 0
IP address: 13.107.213.47 Port: 443 Protocol: TCP
Application: SSL:OFFICE365-CREATE-CONVERSATION Encrypted: Yes
Classification Path: IP:TCP:SSL:OFFICE365-CREATE-CONVERSATION
Logical system name: 0
IP address: 40.101.80.178 Port: 443 Protocol: TCP
Application: SSL:OFFICE365-CREATE-CONVERSATION Encrypted: Yes
Classification Path: IP:TCP:SSL:OFFICE365-CREATE-CONVERSATION
:
:
:
Secure Web Proxyの動作状況は以下で確認可能です。
SRXがプロキシサーバ(Transparent Proxy)として機能しており、動作中のセッションの詳細確認が確認できます。
root@SRX320TEST> show services web-proxy session detail
Web Proxy sessions:
Client Session ID: 3364, Proxy Session ID: 3367
Client: 192.168.100.100/53628 ---> 192.168.202.200/8080
Proxy : 192.168.100.100/53628 ---> 184.26.43.149/443
Proxy Request: CONNECT:res-1.cdn.office.net:443
Dynamic Web App: junos:OFFICE365-CREATE-CONVERSATION
Client Session ID: 3366, Proxy Session ID: 3374
Client: 192.168.100.100/53630 ---> 192.168.202.200/8080
Proxy : 192.168.100.100/53630 ---> 20.190.141.43/443
Proxy Request: CONNECT:graph.microsoft.com:443
Dynamic Web App: junos:OFFICE365-CREATE-CONVERSATION
Client Session ID: 3350, Proxy Session ID: 3351
Client: 192.168.100.100/53622 ---> 192.168.202.200/8080
Proxy : 192.168.100.100/53622 ---> 184.26.43.140/443
Proxy Request: CONNECT:res.cdn.office.net:443
Dynamic Web App: junos:OFFICE365-CREATE-CONVERSATION
Client Session ID: 3404, Proxy Session ID: 3405
Client: 192.168.100.100/53644 ---> 192.168.202.200/8080
Proxy : 192.168.100.100/53644 ---> 52.113.194.132/443
Proxy Request: CONNECT:ecs.office.com:443
Dynamic Web App: junos:OFFICE365-CREATE-CONVERSATION
Client Session ID: 3380, Proxy Session ID: 3383
Client: 192.168.100.100/53636 ---> 192.168.202.200/8080
Proxy : 192.168.100.100/53636 ---> 184.26.43.153/443
Proxy Request: CONNECT:r4.res.office365.com:443
Dynamic Web App: junos:OFFICE365-CREATE-CONVERSATION
Client Session ID: 3422, Proxy Session ID: 3425
Client: 192.168.100.100/53651 ---> 192.168.202.200/8080
Proxy : 192.168.100.100/53651 ---> 52.123.128.14/443
Proxy Request: CONNECT:teams.microsoft.com:443
Dynamic Web App: junos:MS-TEAMS
:
:
:
Secure Web Proxyの動作確認をアクティブセッション数で見る方法もあります。
root@SRX320TEST> show services web-proxy statistics
Active Transparent proxy sessions 31
Active Passthrough sessions 10
Active HTTP passthrough sessions 0
Active HTTPS passthrough sessions 10
Total Transparent proxy sessions 111
Total Passthrough sessions 269
Total HTTP Passthrough sessions 135
Total HTTPS Passthrough sessions 134
また、PC側を確認すると、 通常の通信は***.***.60.69 から行われており、Microsoft 365の通信は***.***.107.117が送信元となっています。
プロキシサーバを使っていても、Secure Web Proxyで通信が正しく分離され、LBOされていることが確認できます。
動作確認②
Secure Web Proxy有無によるSRXのパフォーマンス影響とインターフェイスの使用状況を確認しました。
SNMPでSRXの情報を取得しながら、Teamsで約10分間、画面共有ありで会議を行った時の結果です。
LAN側はPC1台で、新規セッションを発生させていないので、CPUの使用率が高騰している様子は見られませんでした。
インターフェイスの速度の送受信の合計値となります。
Secure Web Proxy有無による、通信速度をCloudflareのSpeed Testで確認しました。ge-0/0/2は100Mbpsの回線になります。
ベストエフォートなので一概には言えませんが、今回の測定では有無で通信速度が大幅に劣化するということ無さそうです。Network Qualityは、Secure Web Proxyが有効の時の方が良くなっているくらい。。。
https://speed.cloudflare.com/
Secure Web Proxy無効時
Secure Web Proxy有効時
まとめ
SRXでSecure Web Proxy機能を使うことで、プロキシサーバがある環境であっても、端末の設定変更やPACファイル配布をせずに、LBOを実現することができました。
本機能の対象となるトラフィックは、HTTPS通信に限定される(HTTPやFTP等も対象外)といった留意事項があります。別件で検証した時は、CPUの使用率が100%近くになったケースやSecure Web Proxyで処理できるセッション数の制限(特に300番台のブランチシリーズでは顕著)もあり、実装する場合は、PoC等で確認が必要です。
ただし、うまく使えれば、既存環境に影響を与えずLBOが可能なソリューションですので、一案としていただければと思います。
※文中の会社名、商品名、ロゴは各社の商標および登録商標です。
■サービス資料一覧はこちら↓
引用元
https://www.juniper.net/content/dam/www/assets/additional-resources/jp/ja/apbr-swp-202004.pdf
https://www.juniper.net/assets/jp/jp/local/pdf/additional-resources/sdwan-skyentseminar-sd-wan.pdf
https://www.juniper.net/content/dam/www/assets/additional-resources/jp/ja/509-secure-web-proxy.pdf