[F5] Auto scaling the BIG-IP VE Web Application Firewall を試してみる

こんにちは、菊池です。

F5 BIG-IPには、Application Security Manager(ASM)のライセンスを有効化することで利用できる、WAFの機能があります。

この、WAF機能について、Auto Scalingを有効化し、BIG-IPの設定まで自動で実施してくれるCloudFormationのテンプレートが公開されています。

このテンプレートを利用することで、BIG-IPの詳しい知識がなくとも、基本的な設定が適用されたWAF環境がデプロイ可能です。

システム構成

構築する環境は以下のようなイメージになります。

  • Auto ScalingによるBIG-IP VE(ASM)のEC2が起動
  • 外部からのリクエストをExternal ELBが複数台のBIG-IP VEへロードバランス
  • BIG-IP VEは、内部向けのInternal ELBを経由して、保護対象のWebサーバへ通信

big-ip_waf-001

CloudFormationのテンプレートで構成されるのは、以下のリソースです。

  • BIG-IP VEインスタンス用Security Group
  • BIG-IP VEインスタンス用IAMロール/IAMポリシー
  • Auto Scaling起動設定
    • BIG-IP VEの設定も含む
  • Auto Scaling Group
  • CloudWatchアラーム
  • SNSトピック
  • S3バケット

上記以外の、InternatGatewayやSubnetを含むVPC環境や、2つのELB、保護対象のサーバなどはあらかじめ用意しておく必要があります。

環境作成

事前準備

まずはあらかじめ必要なリソースを構築しておきます。

big-ip_waf-002

  • VPC環境
    • Internet Gateway
    • インターネットに直接通信可能なPublic Subnet(Multi-AZ)
    • 保護対象のサーバを配置するPrivate Subnet(Multi-AZ)
  • External ELB
    • SecurityGroupで外部からのHTTP/HTTPSを許可
  • Internal ELB
    • SecurityGroupでVPC内からのHTTPを許可
  • 保護対象のサーバ
    • 今回はWordPressのAMIを利用
  • キーペア

次に、F5 BIG-IPのAMIを起動可能にするため、AWS Marketplaceでソフトウェア利用の同意をしておきます。

マネジメントコンソールのEC2の作成に進み、AMIの選択画面で以下のようにF5のイメージを検索します。

big-ip_waf-003

検索結果から、F5 WAF Solutionを見つけます。利用する帯域によってライセンスが異なりますので、今回利用する25Mbpsのものを選択し、[詳細]を開きます。

big-ip_waf-004

さらに、製品詳細ページに進みます。

big-ip_waf-005

使用するリージョン、環境を選択し、Continue。

big-ip_waf-006

内容を確認し、Accept Software Termsを選択します。

big-ip_waf-007

これで、F5 BIG-IP VEのAMIが起動可能になります。

big-ip_waf-008

このページからもCloudFormationスタックを起動することが可能ですが、こちらのリンクからスタックを作成した際に利用されるテンプレートが古いバージョン(2.4.0)となっていました。今回は最新を利用したいため、GitHubから直接ダウンロードしてスタックを作成します。

テンプレートの展開

テンプレートのはこちらのGitHubに公開されています。今回利用したテンプレートにはバージョン2.5.0と記載されていました。

スタックの作成を開始すると、各種パラメータの指定を求められます。

big-ip_waf-009

必須なパラメータは以下の通りです。

項目 内容
deploymentName デプロイ名称
vpc デプロイするVPCのID
availabilityZones デプロイするAZ。ap-northeast-1、ap-northeast-1cwを選択。
subnet インスタンスをデプロイするサブネット。Publicサブネットを指定。
restrictedSrcAddress BIG-IPインスタンスにSSHを許可するソースIP
bigipElasticLoadBalancer Exterlnal-ELBのELB名
sshKey BIG-IPインスタンスにSSHする際のキーペア
instanceType BIG-IPインスタンスのインスタンスタイプ
throughput BIG-IPのAMIのスループット。
adminUsername BIG-IPのクラスタ管理者名。デフォルトでOK。
managementGuiPort 管理コンソールのポート。デフォルトでOK。
timezone BIG-IPに指定するタイムゾーン
ntpServer BIG-IPに指定するNTPサーバ
scalingMinSize AutoScalingの最小サイズ
scalingMaxSize AutoScalingの最小サイズ
scaleDownBytesThreshold AutoScalingのスケールイン閾値のスループット
scaleUpBytesThreshold AutoScalingのスケールアウト閾値のスループット
notificationEmail AutoScalingイベント発生時の通知先メールアドレス
virtualServicePort BIG-IPのサービスポート
applicationPort Internal-ELBのサービスポート
appInternalDnsName Internal-ELBのDNS名
policyLevel WAFのポリシーレベル

必要項目を入力したら、スタックをデプロイします。

big-ip_waf-010

しばらく待つと、スタックの作成が完了します。

big-ip_waf-011

Auto Scalingグループにより、インスタンスが起動していることが確認できます。

big-ip_waf-015

BIG-IPの設定を確認してみます。

まずは、Webコンソールのパスワードを設定します。事前に設定したキーペアを使って、起動したインスタンスのパブリックIPにSSHで接続します。ユーザ名はadminです。modify auth password admin でパスワードを変更し、save sys configで保存します。

admin@(ip-172-16-1-xxx)(cfg-sync Standalone)(Active)(/Common)(tmos)# modify auth password admin
changing password for admin
new password:
confirm password:
admin@(ip-172-16-1-xxx)(cfg-sync Standalone)(Active)(/Common)(tmos)# save sys config
Saving running configuration...
  /config/bigip.conf
  /config/bigip_base.conf
  /config/bigip_script.conf
  /config/bigip_user.conf
  /config/partitions/LOCAL_ONLY/bigip.conf
Saving Ethernet mapping...done
admin@(ip-172-16-1-xxx)(cfg-sync Standalone)(Active)(/Common)(tmos)#

変更したら、ブラウザでhttps://(パブリックIP):8443に接続ます。証明書のエラーは無視しましょう。

big-ip_waf-012

admin/設定したパスワードでログインできます。

[iApps] -> [Application Services] -> [Applications] -> [Components] から、設定されているコンポーネントが確認できます。また、同期設定がされているため、Auto Scalingグループ内のBIG-IPは全ての設定内容が同期されます。

big-ip_waf-013

External-ELB経由でサービスにアクセスすると、WordPressの初期ページも表示できました。

big-ip_waf-014

最後に

以上です。

テンプレートを適用することで、簡単にAuto Scalingが適用されたBIG-IP VEのWAFが構築できました。ただ、作成してみてわかりましたが、実際の運用環境に適用するに当たっては、以下のような点に注意しましょう。

  • Auto Scalingのヘルスチェック条件が、ELBではなくEC2になっています。ELBのヘルスチェックNGではインスタンスのターミネート・新規ローンチは発生しません。サービスレベルでのヘルスチェックが必要であれば変更しましょう。
  • BIG-IP VEのインスタンス用に作成されるSecurity Groupでは、HTTP(80)、HTTPS(443)が任意のIP(0.0.0.0/0)に対して許可されます。外部からのアクセスをELB経由に制限するなど、適切な範囲に設定しましょう。
  • WAFのポリシーはあくまでデフォルト設定となりますので、アプリケーション環境に応じてポリシーを調整するのがよいでしょう。