はじめに
Flow Network Security(FNS)の機能であるIsolate Policyを検証してみました。
環境
- 外部NATサブネットを用いたVPCを構築
- その中でVMを6台稼働(rocky linux 8)
- 2台ずつカテゴリを付与
- 使用するカテゴリは、Environment:Dev、Environment:Testing、Environment:Productionとします
Define Policy
- ここでは適当なポリシー名を付けて、Isolate environments(Isolation Policy)のラジオボタンを有効化します
- Scope of Secured EntitiesではVLAN SubnetsもしくはSubnets inside a VPCを選択可能です
- VPCのタブから作成した場合は図の様に自動的にSubnets inside a VPCが選択されて修正できません
- Policy Hit Logsは文字通り、ポリシーに該当した場合にログに出力する機能となりますが、このポリシーをVMに適用した場合には機能しないため無効化しておきます
Secure Application
カテゴリを用いて通信させたくないVMグループを定義します。
今回は
・DevとProductionのカテゴリを付与したVMは疎通不可
・TestingとProductionのカテゴリを付与したVMは疎通不可
とします。
Review
- ポリシーのモードを選択します。実際にVMに適用する場合はApply(Enforce)を選択します。
- 適用後、Listからポリシーの一覧を確認することが可能です。
検証
今回は次のような条件で検証しました。
linux-vm-1…カテゴリ:Emvironment:Dev、VPCのIP:172.16.200.51、Floating IP:192.168.3.71 linux-vm-2…カテゴリ:Emvironment:Dev、VPCのIP:172.16.200.58、Floating IP:192.168.3.72 linux-vm-3…カテゴリ:Emvironment:Testing、VPCのIP:172.16.200.67、Floating IP:192.168.3.73 linux-vm-4…カテゴリ:Emvironment:Testing、VPCのIP:172.16.200.64、Floating IP:192.168.3.74 linux-vm-5…カテゴリ:Emvironment:Production、VPCのIP:172.16.200.55、Floating IP:192.168.3.75 linux-vm-6…カテゴリ:Emvironment:Production、VPCのIP:172.16.200.54、Floating IP:192.168.3.76
結果(VPC)
[例]1-2:linux-vm-1からlinux-vm-2へpingを実施したことを示す。
Emvironment:Devからの通信
1-2: [root@appliance ~]# ping 172.16.200.58 PING 172.16.200.58 (172.16.200.58) 56(84) bytes of data. 64 bytes from 172.16.200.58: icmp_seq=1 ttl=64 time=2.86 ms 64 bytes from 172.16.200.58: icmp_seq=2 ttl=64 time=1.19 ms
1-3: [root@appliance ~]# ping 172.16.200.67 PING 172.16.200.67 (172.16.200.67) 56(84) bytes of data. 64 bytes from 172.16.200.67: icmp_seq=1 ttl=64 time=3.35 ms 64 bytes from 172.16.200.67: icmp_seq=2 ttl=64 time=1.11 ms
1-4 [root@appliance ~]# ping 172.16.200.64 PING 172.16.200.64 (172.16.200.64) 56(84) bytes of data. 64 bytes from 172.16.200.64: icmp_seq=1 ttl=64 time=4.43 ms 64 bytes from 172.16.200.64: icmp_seq=2 ttl=64 time=0.998 ms
1-5 [root@appliance ~]# ping 172.16.200.55 PING 172.16.200.55 (172.16.200.55) 56(84) bytes of data. From 172.16.200.51 icmp_seq=1 Destination Host Unreachable From 172.16.200.51 icmp_seq=2 Destination Host Unreachable
1-6 [root@appliance ~]# ping 172.16.200.54 PING 172.16.200.54 (172.16.200.54) 56(84) bytes of data. From 172.16.200.51 icmp_seq=1 Destination Host Unreachable From 172.16.200.51 icmp_seq=2 Destination Host Unreachable
本番環境へは開発環境のVMから通信できないことが確認できました。
Emvironment:Testingからの通信
3-1: [root@appliance ~]# ping 172.16.200.51 PING 172.16.200.51 (172.16.200.51) 56(84) bytes of data. 64 bytes from 172.16.200.51: icmp_seq=1 ttl=64 time=9.83 ms 64 bytes from 172.16.200.51: icmp_seq=2 ttl=64 time=6.68 ms
3-2: [root@appliance ~]# ping 172.16.200.58 PING 172.16.200.58 (172.16.200.58) 56(84) bytes of data. 64 bytes from 172.16.200.58: icmp_seq=1 ttl=64 time=4.10 ms 64 bytes from 172.16.200.58: icmp_seq=2 ttl=64 time=2.71 ms
3-4: [root@appliance ~]# ping 172.16.200.64 PING 172.16.200.64 (172.16.200.64) 56(84) bytes of data. 64 bytes from 172.16.200.64: icmp_seq=1 ttl=64 time=6.47 ms 64 bytes from 172.16.200.64: icmp_seq=2 ttl=64 time=1.15 ms
3-5: [root@appliance ~]# ping 172.16.200.55 PING 172.16.200.55 (172.16.200.55) 56(84) bytes of data. From 172.16.200.67 icmp_seq=1 Destination Host Unreachable From 172.16.200.67 icmp_seq=2 Destination Host Unreachable
3-6: [root@appliance ~]# ping 172.16.200.54 PING 172.16.200.54 (172.16.200.54) 56(84) bytes of data. From 172.16.200.67 icmp_seq=1 Destination Host Unreachable From 172.16.200.67 icmp_seq=2 Destination Host Unreachable
Test環境のVMからは本番環境のVMへ通信できないことが確認できました。
Emvironment:Productionからの通信
6-1: [root@appliance ~]# ping 172.16.200.51 PING 172.16.200.51 (172.16.200.51) 56(84) bytes of data. From 172.16.200.54 icmp_seq=1 Destination Host Unreachable From 172.16.200.54 icmp_seq=2 Destination Host Unreachable
6-2: [root@appliance ~]# ping 172.16.200.58 PING 172.16.200.58 (172.16.200.58) 56(84) bytes of data. From 172.16.200.54 icmp_seq=1 Destination Host Unreachable From 172.16.200.54 icmp_seq=2 Destination Host Unreachable
6-3: [root@appliance ~]# ping 172.16.200.67 PING 172.16.200.67 (172.16.200.67) 56(84) bytes of data. From 172.16.200.54 icmp_seq=1 Destination Host Unreachable From 172.16.200.54 icmp_seq=2 Destination Host Unreachable
6-4: [root@appliance ~]# ping 172.16.200.64 PING 172.16.200.64 (172.16.200.64) 56(84) bytes of data. From 172.16.200.54 icmp_seq=1 Destination Host Unreachable From 172.16.200.54 icmp_seq=2 Destination Host Unreachable
6-5: [root@appliance ~]# ping 172.16.200.55 PING 172.16.200.55 (172.16.200.55) 56(84) bytes of data. 64 bytes from 172.16.200.55: icmp_seq=1 ttl=64 time=3.55 ms 64 bytes from 172.16.200.55: icmp_seq=2 ttl=64 time=1.22 ms
開発環境とTest環境のVMへは本番環境のVMから通信できないことが確認できました。
結果(Floating IPs)
今回、NAT外部サブネットを使用してVPCを作成しているため、Floating IPs(外部NAT変換のための仕組みで、VMに外部サブネットのIP Poolから1対1でIPアドレスをVPC内のVMに割り当てることで、VPC外部からの接続を可能にする)を使用できます。このIPアドレス同士で通信させた場合にどうなるのか検証してみます。
6-1: [root@appliance ~]# ping 192.168.3.71 PING 192.168.3.71 (192.168.3.71) 56(84) bytes of data. 64 bytes from 192.168.3.71: icmp_seq=1 ttl=62 time=3.64 ms 64 bytes from 192.168.3.71: icmp_seq=2 ttl=62 time=1.44 ms ^C --- 192.168.3.71 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1002ms rtt min/avg/max/mdev = 1.444/2.541/3.638/1.097 ms 6-3: [root@appliance ~]# ping 192.168.3.73 PING 192.168.3.73 (192.168.3.73) 56(84) bytes of data. 64 bytes from 192.168.3.73: icmp_seq=1 ttl=62 time=3.52 ms 64 bytes from 192.168.3.73: icmp_seq=2 ttl=62 time=1.28 ms ^C --- 192.168.3.73 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1001ms rtt min/avg/max/mdev = 1.282/2.401/3.520/1.119 ms [root@appliance ~]#
このように、Floating IPs同士の通信は可能となります。これを防ぐにはVLAN Subnet側でも同様にIsolate Policyを設定すればよいと思われますが、実際に検証したところ通信できます。
VPCのRulesで通信させたくないVMのFloating IPs同士をDenyするルールを作成するしかないと思われます(未検証)。ステートレスなので行きと戻りの両方で定義してください。
コメント