1. はじめに
(以前、IBM Cloud: VPCにF5 BIG-IP Virtual Editionを導入してみたという記事を書いていました。本稿はその改訂版です)
IBM CloudのVPCではVirtual Network Function(VNF)機能として、現在以下の製品・サービスが利用可能である。
- Check Point CloudGuard IaaS Security Gateway
- Fortinet FortiGate Next-Generation Firewall - A/P HA
- Fortinet FortiGate Next-Generation Firewall - Single VM
- F5 BIG-IP Virtual Edition for VPC
- Check Point CloudGuard IaaS Security Management
- Juniper vSRX Next-Generation Firewall
- Palo Alto VM-Series Firewall
なお、これらの3rd Party製品はBYOL(Bring Your Own License)で提供しており、そのサポートは3rd Partyから受ける必要がある。
注文画面には以下の警告が出る。
例えばF5 for VPCのcaseを起票しようとすると、以下のようにF5社に問い合わせるようなメッセージが表示される。
本稿では、BIG-IP Virtual Edition for VPC
を導入してみる。F5社によるドキュメントは以下になる。
- F5 BIG-IP Virtual Edition in IBM Cloud VPC Gen 2
- Deploy F5 BIG-IP Virtual Edition in IBM Cloud VPC Gen 2
- f5devcentral/ibmcloud_schematics_bigip_multinic_declared
今回はテスト用途なので、30日のトライアルライセンスをここから申請し、メールに送付されてきたライセンス情報を利用した。
2. 注文方法
F5 BIG-IPの導入には内部的にはIBM Cloud Schematics(実装はTerraform)を使っているので、そのworkspace名を指定する必要がある(特にこだわりがなければデフォルトのままで良い)。
以下、今回変更した箇所を記した。
- ライセンス情報は後から入力可能なので、
none
のままで良い。 - TMOSはF5製品のOS(Operating System)であり、adminはブラウザアクセス用の管理IDである。
Parameter | 今回の入力例 | 補足 |
---|---|---|
external_subnet_id | 02e7-b50228c7-2431-4854-ad4c-b68f6c7382a7 |
事前に作成した10.4.0.0/24 のsubnet IDを指定。 |
management_subnet_id | 02e7-ff96ff2a-fa27-4d88-b855-98fb85112636 |
事前に作成した10.0.0.0/24 のsubnet IDを指定 |
region | jp-tok |
今回は東京リージョンを指定 |
ssh_key_name | key-syasuda |
(VSIのプロビジョニングなどにも利用する)事前に登録したSSH鍵の名前 |
tmos_image_name | bigip-17 |
2022年10月現在のデフォルト値のイメージは存在しないためエラーになる。 longest matchingでイメージ名が選択される。以下のnoteも参考に。 pull requestを送っています。 |
resource_group | Default |
Optional Deployment values として定義されているが、デフォルト値であるdefault は不適切。IBM Cloudには標準でDefault というリソースグループが存在するが、Default とdefault は異なるため、default のままだと該当するリソースグループが存在しないというエラーになる。適切なリソースグループを選択する必要があるため、むしろこれはRequired Deployment values に分類されるべき項目。 pull requestを送っています。 |
tmos_admin_password | zaq12wsxcde34rfv |
後からCLIで設定できるが、すぐに使えるように設定。実環境では適切な値に変更してください。 |
2022年10月20日現在、サブネットは指定できても、IPアドレスを指定してプロビジョニングすることはできないようです。改善を期待したいところです。
2022年10月20日現在、以下のバージョンが利用できることを確認しています。利用可能なマイナーバージョンは頻繁にF5社によって変更されているようですが、docsの更新がありません。tmos_image_nameはlongest matchでイメージを決めているようなので、確実にプロビジョニングをしたい場合は、bigip-17などぐらいで指定しておいた方が安全だと思います。
- bigip-15-1-6-1-0-0-10
- bigip-16-1-3-1-0-0-11
- bigip-17-0-0-1-0-0-4
- 2022/10/23追記
適切なtmos_imageが選択されなかった場合は以下のようなエラーになる。
2022/10/20 03:01:40 Terraform apply | Error: External Program Execution Failed
2022/10/20 03:01:40 Terraform apply |
2022/10/20 03:01:40 Terraform apply | on image.tf line 14, in data "external" "tmos_public_image":
2022/10/20 03:01:40 Terraform apply | 14: program = ["python3", "${path.module}/bigip_image_selector.py"]
2022/10/20 03:01:40 Terraform apply |
2022/10/20 03:01:40 Terraform apply | The data source received an unexpected error while attempting to execute the
2022/10/20 03:01:40 Terraform apply | program.
2022/10/20 03:01:40 Terraform apply |
2022/10/20 03:01:40 Terraform apply | Program: /usr/bin/python3
2022/10/20 03:01:40 Terraform apply | Error Message: No image in the public image catalog matched version bigip-18
2022/10/20 03:01:40 Terraform apply | State: exit status 1
2022/10/20 03:01:40 Terraform apply |
2022/10/20 03:01:40 [1m[31mTerraform APPLY error: Terraform APPLY errorexit status 1[39m[0m
2022/10/20 03:01:40 [1m[31mCould not execute job: Error : Terraform APPLY errorexit status 1[39m[0m
このbigip_image_selector.py
という名前から、おそらくこのスクリプトが使われていると想像される。よって、以下を実行することで現時点で有効なスクリプトを確認することができそうである。
$ curl -s https://f5-adc-jp-tok.s3.jp-tok.cloud-object-storage.appdomain.cloud/f5-image-catalog.json | jq -r '."jp-tok"[].image_name'
bigip-14-1-4-5-0-0-7-all-1slot-013122001-jp-tok
bigip-14-1-4-5-0-0-7-ltm-1slot-013122001-jp-tok
bigip-14-1-4-6-0-0-8-all-1slot-jp-tok
bigip-14-1-4-6-0-0-8-ltm-1slot-jp-tok
bigip-14-1-5-1-0-0-6-all-1slot-jp-tok
bigip-14-1-5-1-0-0-6-ltm-1slot-jp-tok
bigip-14-1-5-2-0-0-3-all-1slot-jp-tok
bigip-14-1-5-2-0-0-3-ltm-1slot-jp-tok
bigip-15-1-5-0-0-10-all-1slot-013122001-jp-tok
bigip-15-1-5-0-0-10-ltm-1slot-013122001-jp-tok
bigip-15-1-5-1-0-0-14-all-1slot-jp-tok
bigip-15-1-5-1-0-0-14-ltm-1slot-jp-tok
bigip-15-1-6-1-0-0-10-all-1slot-jp-tok
bigip-15-1-6-1-0-0-10-ltm-1slot-jp-tok
bigip-15-1-7-0-0-6-all-1slot-jp-tok
bigip-15-1-7-0-0-6-ltm-1slot-jp-tok
bigip-16-1-2-1-0-0-10-all-1slot-012722001-jp-tok
bigip-16-1-2-1-0-0-10-all-1slot-013122001-jp-tok
bigip-16-1-2-1-0-0-10-ltm-1slot-012722001-jp-tok
bigip-16-1-2-1-0-0-10-ltm-1slot-013122001-jp-tok
bigip-16-1-2-2-0-0-28-all-1slot-jp-tok
bigip-16-1-2-2-0-0-28-ltm-1slot-jp-tok
bigip-16-1-3-1-0-0-11-all-1slot-jp-tok
bigip-16-1-3-1-0-0-11-ltm-1slot-jp-tok
bigip-16-1-3-2-0-0-4-all-1slot-jp-tok
bigip-16-1-3-2-0-0-4-ltm-1slot-jp-tok
bigip-17-0-0-1-0-0-4-all-1slot-jp-tok
bigip-17-0-0-1-0-0-4-ltm-1slot-jp-tok
$ curl -s https://f5-adc-jp-osa.s3.jp-osa.cloud-object-storage.appdomain.cloud/f5-image-catalog.json | jq -r '."jp-osa"[].image_name'
bigip-14-1-4-5-0-0-7-all-1slot-013122001-jp-osa
bigip-14-1-4-5-0-0-7-ltm-1slot-013122001-jp-osa
bigip-14-1-4-6-0-0-8-all-1slot-jp-osa
bigip-14-1-4-6-0-0-8-ltm-1slot-jp-osa
bigip-14-1-5-1-0-0-6-all-1slot-jp-osa
bigip-14-1-5-1-0-0-6-ltm-1slot-jp-osa
bigip-14-1-5-2-0-0-3-all-1slot-jp-osa
bigip-14-1-5-2-0-0-3-ltm-1slot-jp-osa
bigip-15-1-5-0-0-10-all-1slot-013122001-jp-osa
bigip-15-1-5-0-0-10-ltm-1slot-013122001-jp-osa
bigip-15-1-5-1-0-0-14-all-1slot-jp-osa
bigip-15-1-5-1-0-0-14-ltm-1slot-jp-osa
bigip-15-1-6-1-0-0-10-all-1slot-jp-osa
bigip-15-1-6-1-0-0-10-ltm-1slot-jp-osa
bigip-15-1-7-0-0-6-all-1slot-jp-osa
bigip-15-1-7-0-0-6-ltm-1slot-jp-osa
bigip-16-1-2-1-0-0-10-all-1slot-012722001-jp-osa
bigip-16-1-2-1-0-0-10-all-1slot-013122001-jp-osa
bigip-16-1-2-1-0-0-10-ltm-1slot-012722001-jp-osa
bigip-16-1-2-1-0-0-10-ltm-1slot-013122001-jp-osa
bigip-16-1-2-2-0-0-28-all-1slot-jp-osa
bigip-16-1-2-2-0-0-28-ltm-1slot-jp-osa
bigip-16-1-3-1-0-0-11-all-1slot-jp-osa
bigip-16-1-3-1-0-0-11-ltm-1slot-jp-osa
bigip-16-1-3-2-0-0-4-all-1slot-jp-osa
bigip-16-1-3-2-0-0-4-ltm-1slot-jp-osa
bigip-17-0-0-1-0-0-4-all-1slot-jp-osa
bigip-17-0-0-1-0-0-4-ltm-1slot-jp-osa
3. プロビジョニングの実行
Installを押下すると、IBM Cloud Schematicsのworkspace上で淡々とプロビジョニングが実施される。5分程度で完了する。
なお、プロビジョニングに失敗した際は、再度注文画面に戻る必要はなく、失敗したworkspaceのSettingにて、パラメーター値を編集・上書きし、再度Apply plan
を押下すれば即時に再実行できる。
4. プロビジョニング後の状態
気をつけなければいけないのは、defaultのsecurity groupではなく、新たにsecurity groupが生成されており、しかもそのsecurity groupは全ての通信を許可するような構成になっていることである。Floating IPが割り当てられていないため、このままの状態でインターネットに晒されるわけではないが、実際に利用する際にはInboundだけでも早々に通信元を制限するように構成変更することが望ましい。
5. Web Consoleへのログイン確認とライセンス登録
- SSH port forwarding(
ssh -L 9443:10.0.0.27:443 踏み台サーバーのIPアドレス
)をして、端末上からhttps://localhost:9443/
にアクセスしてF5のコンソールにアクセスする。UserIDはadmin
、Passwordはtmos_admin_password
で設定した値を利用。 - ログイン後の状態。Activateを押下
- ライセンス情報を入力。インターネットに繋がっていないので、Activation MethodはManualを選択。
Next
を押下。 -
Click here to access F5 Licensing Server
を押下。 - 先程の画面で表示された
Dossier
をコピー&ペーストし、Next
- 内容を確認し、
Next
- ライセンスキーを入手した。
- 前項で得られたライセンスキーをStep 3の項目にコピー&ペーストして、
Next
。 - 以下のように再ログインが求められる。
- 再度ログインする
- ライセンス登録が完了した。
6. CLIによるログイン確認・設定確認
適当な踏み台サーバー経由でログインする。
[root@new-syasuda-tok1-vpc1 ~]# ssh root@10.0.0.27
The authenticity of host '10.0.0.27 (10.0.0.27)' can't be established.
ECDSA key fingerprint is SHA256:rqEgAHxbaB9jGmZiJlRWwF4agwgnIHVD5yS8aLRpBac.
ECDSA key fingerprint is MD5:9a:43:95:06:42:ab:af:3f:89:10:bf:81:ba:c0:ac:ab.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.0.0.27' (ECDSA) to the list of known hosts.
[root@f5-ve-01:Active:Standalone] config # tmsh
root@(f5-ve-01)(cfg-sync Standalone)(Active)(/Common)(tmos)# show sys version
Sys::Version
Main Package
Product BIG-IP
Version 17.0.0.1
Build 0.0.4
Edition Point Release 1
Date Fri Jul 15 01:45:12 PDT 2022
root@(f5-ve-01)(cfg-sync Standalone)(Active)(/Common)(tmos)# show sys ip-address
--------------------------------------------------------
Sys::IP Address
Entry Component Object-ID
--------------------------------------------------------
default net route net_1_1_default_gw
8.8.8.8:domain net dns-resolver f5-aws-dns
8.8.8.8:domain net dns-resolver f5-aws-dns
8.8.8.8:domain net dns-resolver f5-aws-dns
10.0.0.1 sys management-route default
10.0.0.27 cm device f5-ve-01.local
10.4.0.12 cm device f5-ve-01.local
10.4.0.12 cm device f5-ve-01.local
10.4.0.12 cm device f5-ve-01.local
161.26.0.7 sys dns n/a
161.26.0.8 sys dns n/a
root@(f5-ve-01)(cfg-sync Standalone)(Active)(/Common)(tmos)# show net route
----------------------------------------------------------------------------------
Net::Routes
Name Destination Type NextHop Origin
----------------------------------------------------------------------------------
net_1_1_default_gw default gw 10.4.0.1 static
127.20.0.0/16 127.20.0.0/16 interface tmm_bp connected
10.4.0.0/24 10.4.0.0/24 interface /Common/net_1_1 connected
127.1.1.0/24 127.1.1.0/24 interface tmm connected
ff02:fff::/64 ff02:fff::/64 interface tmm_bp connected
fe80::%vlan4095/64 fe80::%vlan4095/64 interface tmm_bp connected
fe80::/64 fe80::/64 interface /Common/socks-tunnel connected
fe80::/64 fe80::/64 interface /Common/http-tunnel connected
fe80::%vlan4095/64 fe80::%vlan4095/64 interface /Common/tmm_bp connected
ff02:fff::/64 ff02:fff::/64 interface /Common/tmm_bp connected
ff02:ffd::/64 ff02:ffd::/64 interface /Common/net_1_1 connected
fe80::%vlan4093/64 fe80::%vlan4093/64 interface /Common/net_1_1 connected
ff02::/64 ff02::/64 interface tmm connected
fe80::/64 fe80::/64 interface tmm connected
root@(f5-ve-01)(cfg-sync Standalone)(Active)(/Common)(tmos)# list sys dns name-servers
sys dns {
name-servers { 161.26.0.7 161.26.0.8 }
}
root@(f5-ve-01)(cfg-sync Standalone)(Active)(/Common)(tmos)# list sys ntp
sys ntp {
servers { 0.pool.ntp.org 1.pool.ntp.org }
timezone UTC
}
root@(f5-ve-01)(cfg-sync Standalone)(Active)(/Common)(tmos)# modify sys ntp servers replace-all-with {time.adn.networklayer.com}
root@(f5-ve-01)(cfg-sync Standalone)(Active)(/Common)(tmos)# list sys ntp
sys ntp {
servers { time.adn.networklayer.com }
timezone UTC
}
root@(f5-ve-01)(cfg-sync Standalone)(Active)(/Common)(tmos)# quit
[root@f5-ve-01:Active:Standalone] config # ntpq -pn
remote refid st t when poll reach delay offset jitter
==============================================================================
*161.26.0.6 172.25.65.16 2 u 46 64 377 1.489 15.842 4.620
[root@f5-ve-01:Active:Standalone] config # ntpq -c rv
associd=0 status=0615 leap_none, sync_ntp, 1 event, clock_sync,
version="ntpd 4.2.6p5@1.2349-o Fri Jul 15 08:24:45 UTC 2022 (1)",
processor="x86_64", system="Linux/3.10.0-862.14.4.el7.ve.x86_64",
leap=00, stratum=3, precision=-25, rootdelay=2.862, rootdisp=48.498,
refid=161.26.0.6,
reftime=e6fd958a.c7fc5c21 Fri, Oct 21 2022 22:02:50.781,
clock=e6fd9690.6fa86c2a Fri, Oct 21 2022 22:07:12.436, peer=42461, tc=6,
mintc=3, offset=15.842, frequency=19.383, sys_jitter=0.000,
clk_jitter=11.469, clk_wander=0.369