FortiGateの設計/設定ガイド

FortiGateの設計・設定方法を詳しく書いたサイトです。 FortiGateの基本機能であるFW(ファイアウォール)、IPsec、SSL‐VPN(リモートアクセス)だけでなく、次世代FWとしての機能、セキュリティ機能(アンチウイルス、Webフィルタリング、SPAM対策)、さらにはHA,可視化、レポート設定までも記載します。初期化方法やバージョンアップなどの管理面も書いています。標的型攻撃を守るためのゲートウェイとしても導入されることが多いので、セキュリティ機能に関しては充実した記載を心がけます。

AWS上に公開サーバを建て、FortiGateで防御する

1.最初に余談

AWSにサーバを構築することを増えていると思います。AWS上の仕組みでFWを持たせるのも有効ですが、人によっては使い慣れたFortiGateを使いたいという人もいると思います。
FortiGateはAWSのMarketPlaceに販売されていて、AWS上で展開が簡単にできます。(とはいえ、AWSのネットワークの基本的な知識が必要で、専門の会社さんに相談するのがいいと思います。

(1)参考となる情報

以下に、作成するインスタンスとポート数の情報がありますし、また、関連するファイルもありますので、参考にしてください。
https://docs2.fortinet.com/vm/aws/fortigate/6.0/about-fortigate-for-aws/6.0.0/261537/instance-type-support

AWS内でLANを作成することに関しては、以下がわかりやすいと思います。
https://www.slideshare.net/AmazonWebServicesJapan/webinar-aws-43351630

(2)補足

①AWSのマーケットプレイスのシグネチャ情報
起動した時点では、IPSなどのシグネチャが古い。たとえば、IPS定義

システム>FortiGuard>アンチウイルスとIPSのアップデートにてAV&IPS定義を更新を押す。
すると、しばらくすると更新される。

(3)Cloudfundationを使ってAWSのFGを起動する場合

Cloudfundationできちんと作成できていれば、
yamlをインポート
FWのインスタンスを起動(c4large)する。このとき、WAN側のIPを末尾99にする。
EIPを割り当てて、WANにログインするだけ。めちゃくちゃ簡単だ。
 

2.構築の流れ

(1)VPC

以下がわかりやすい。
https://dev.classmethod.jp/articles/creation_vpc_ec2_for_beginner_1/

構成は、
インターネット→【AWSルータ】→TEST(10.0.0.0/24)→FG→TEST_LANとTEST_DMZ 

ポート構成は
eth0 FGのPort1 TEST_toGWセグメント(10.0.0.0/24)に接続  ★MGTと共用
eth1 FGのPort2 TEST_LANセグメント(10.0.1.0/24)に接続
eth2 FGのPort3 TEST_DMZセグメント(10.0.2.0/24)に接続

①VPCの作成
名前タグ:TEST
IPv4CIDER 10.0.0.0/16
IPv6 CIDR: ブロックなし
テナンシー:デフォルト
※VPCのIDをメモしておくと、そのあとの作業の確認がやりやすいと思う。→vpc-01cb4f33474325001
※このとき、ルートテーブルにデフォルトルートがあるかも確認しておきたい。→本来はあるべき。私は無かった。

②サブネットの作成
・名前タグ:TEST_toGW
・VPC:先ほど作成したTEST(表記は乱数)を作成
・AZ:どれかを選択
・IPv4CIDRブロック:10.0.0.0/24

・名前タグ:TEST_LAN
・VPC:先ほど作成したTEST(表記は乱数)を作成
・AZ:どれかを選択→先と同じにしておいた
・IPv4CIDRブロック:10.0.1.0/24

・名前タグ:TEST_DMZ
・VPC:先ほど作成したTEST(表記は乱数)を作成
・AZ:どれかを選択
・IPv4CIDRブロック:10.0.2.0/24

③インターネットゲートウェイ
本当は、インターネットGWが自動作成されてほしいが、作られなかった。自分で作る。
何をしているかというと、デフォルトGWの設定である。
・VPCダッシュボードから、「インターネットゲートウェイ」を選び、「インターネットゲートウェイを作成」
 - 名前タグ:Fortgate_GWとした
・作成されたインターネットゲートウェイをVPCにアタッチする
 -アクションから「VPCにアタッチ」、今回のVPCを選択する。

④ルーティングの設定
 作成したVPCのルーティングがきちんと設定されていない。なので、同じく「VPCダッシュボード」から「ルートテーブル」メニューを選択。
 -作成したTEST用のVPCのルートテーブルを選択
 -下の「ルート」でルートを確認する。ここで、デフォルト ルートがどこかのインターネットGWに接続されていれば何もしなくていい。されていない場合は「ルートの編集」
 -「ルートの追加」で「送信先」を0.0.0.0/0にして、ターゲットは「インターネットゲートウェイ」を選ぶ。作成したインターネットゲートウェイを選び、「ルートの保存」
おそらく、以下のようになると思う。

送信先 ターゲット
10.0.0.0/16 local
0.0.0.0/0 igw-***

 ・次にサブネットの関連付けをする。このルーティングはどのネットワークのルーティングなのかを明らかにするのだ。
 「サブネットの関連づけの編集」でtoGWのサブネットを関連づけする。このとき、サブネットのリンクを押してはダメ。チェックを入れて青ランプをつけて、「保存」ボタンを押す。★注意

④-2 他のルーティング  ★後での作業が残っている。
 ※本当は自動で作成してほしいのだが、ない場合は自分で作る。
 ・LAN用のルーティング「route_LAN」も作る
  「ルートテーブルの作成」から作り、VPCをTESTに割り当てる。サブネットやルートの設定が必要。
  -サブネットの関連づけとして、10.0.1.0/24を選択
  -ルートから「ルートの編集」で、0.0.0.0/0を作り、ネットワークIFを選び、eth1を選ぶ。
  -さらに、サブネットで、TEST_LANのルートテーブルが、先ほど作成したroute_LANになっているかを確認。なっていなければ対応付けをする。TEST_DMZも同様。これで、このネットワークのデフォルトGWがeth1になり、このネットワーク上の端末のパケットが、eth1に届く。※ただし、同じVPC内は別のルータがあって、そこでルーティングされるため、少し特殊であることは理解しておこう。
 ・LAN2も同様。
  

(2)FWを構築する

・EC2の画面で、通常のサーバを建てる画面を開く
・インスタンスの作成を押す
・左のメニューでAWS Marketplaceを選ぶ
・検索窓で「Fortigateを選ぶ」 ライセンスは、一番上とした。Fortinet FortiGate Next-Generation Firewall
・料金は、一番小さいt2.smallで0.33ドル(/時間)
 ただ、もう少し大きい方がいいだろう。NICが3枚欲しいので、C4.largeを選ぶ(0.856ドル/時間)。少しハイスペックなC4.xlargeでもいいだろう。
※ インスタンスのタイプと、NICの数などは以下に記載がある。
 https://docs2.fortinet.com/vm/aws/fortigate/6.0/about-fortigate-for-aws/6.0.0/261537/instance-type-support
 NICが4枚なら、c5.largeが必要
 ★ここで注意。いきなりインスタンスを作成しない
 ・「インスタンスの詳細の設定」を押す
  -ネットワークとしてVPCをTEST
  -サブネットをTEST_toGW
  -パブリックIPを有効にしておくと、グローバルIPが割り当てられるので便利(その代わり、eth2を事前に作るというデバイスの追加はできない)
   ※だが、意味ないかも。パブリックIPは、システムを止めるとからか、公開サーバの設定をするからか、使えなくなった気がする。→結局は、ElasticIPを設定する必要があると思う。
  -eth0のプライマリIPとして10.0.0.99を割り当てます。
  ※このとき、eth1などを作成すると、パブリックIPが割り当てられないと思う。ただ、作ってもいい。→あとでも修正できるが、eth1を10.0.1.99で作成する。このとき、サブネットを正しく選ぶ。サブネットが違うと、エラーになる。
  -基本的には「次へ」で。
  -セキュリティGは22と443を開けたものを新規作成 (→あと、このあとVIPでWebサーバへの通信を許可するのであれば80も開けておいてもいい)
  -SSHのキーを選択して、起動

②EC2の起動と確認 
しばらくすると、仮想Fortigateが起動します。
状態を見ると、グローバルIPが割り当てられ、設定した、PrivateIP(10.0.0.99)と作成したVPCにつながっていることでしょう。またeth1(eth2は作成していれば)があることも分かる。
 ※ネットワークのインターフェースIDを調べておこう
 
③ElasticIPの取得
・VPCダッシュボードからElasticIPを選ぶ
・新しいアドレスの割当
 Amazonプールを選び「割り当て」を押す
 →ElasticIPが作成される
・アドレスの関連づけ
 作成したElasticIPを選び、アクションから「アドレスの関連づけ」で、先ほど調べたFortigateのネットワークインターフェースIDを選択。プライベートIPも10.0.0.99を選択し、「関連づけ」を押す
 
④Fortigateにアクセス
 ・EC2でFortigateのインスタンスに、ElasticIPが接続されていることを確認
 ・そのIPにアクセスする
  https://203.0.113.25/ ←ここはElasticIP
 ・ユーザ名:admin
  パスワード:FortigateのインスタンスID
  でログイン
 ・すぐにPWを変更する。
 ・初期設定をしよう
 
⑤起動確認
 CLIコンソールから、pingで疎通確認をしよう
 #execute ping 8.8.8.8 これが接続できれば、インターネットにも接続されていることが実感できるだろう。
 ただ、IFがeth0の一つだけしかない。
 
⑥IFの作成
・EC2の画面で、「ネットワーク&セキュリティ」から「ネットワークインターフェイス」を選択。
・既存では2つ以上のFortigate関連のIFがあると思う。それぞれ、EC2の画面でIFのIDをみて、eth0とeth1という名前を付けておく→わかりやすい
・eth2用にネットワークインターフェースを作成する。
「ネットワークインターフェースを作成」
 -Description:eth2 →あとでNameもeth2にしよう
 -subnet:TEST_DMZ
 -IPv4address:10.0.2.99
 -Security group:他と同じくForti用のセキュリティGを
・作成したIFをFortigateのインスタンスにアタッチ
 IFの一覧に戻るので、eth2を選択して「アタッチ」。そして、インスタンスとして作成したFortigateのIDを入れる。
 これで、EC2上のFortiGateインスタンスに、eth2が登場するはず。
 →必要に応じて、Fortigateの再起動しよう。(まだ起動していなければしなくていいと思う)

⑦FortiGateにてIFの設定を修正
・IFは固定IPではなくDHCPでIPアドレスを取得する。※IPアドレスを固定にすると、つながらなくなった。特にWAN
・IFの設定を正しくしよう。エイリアスをLAN、WANなどに設定しておくと、みやすい。
 たとえば、port1はロール:WAN、管理者アクセスも適宜。port2はロールがLAN、port3はロールがDMZ 
 それ以外には、許可するサービスも設定しておこう。候補はおそらくHTTPS,SSH,ICMP

⑧ポリシー

⑨ルーティング
デフォルトだと、3つのIFがデフォルトルートになっているので、変更した方がいい。
FGT# get router info routing-table all
Routing table for VRF=0
S*      0.0.0.0/0 [5/0] via 192.168.0.1, port1
                  [5/0] via 192.168.1.1, port2
                  [5/0] via 192.168.2.1, port3
C       192.168.0.0/24 is directly connected, port1
C       192.168.1.0/24 is directly connected, port2
C       192.168.2.0/24 is directly connected, port3

FGのGUIでStatic Routeを設定する。
・サブネットは0.0.0.0/0
・GWは192.168.0.1(AWSのルータ)
・インターフェースはWAN1
・アドミニストレーティブディスタンスは5より小さくするので、3などに

これで、コマンドから8.8.8.8へのpingなども成功するだろう。

(3)LANとDMZにサーバを建ててみよう

EC2でサーバとなる新しいインスタンスを作成する。
このとき、VPCを正しく選択し、IPは自動でも固定でもいい。わかりやすいのは固定であろう。

・EC2で、セカンダリIPアドレス10.0.0.101を割当て。セカンダリIPは ネットワークインターフェース>「アクション」>IPアドレスの管理から。(または、インスタンスを選択して右クリックで「ネットワーキング」>「IPアドレスの管理」からも設定可能)
f:id:seeeko:20210517120214p:plain
・ElasticIPの割当。(これは、VPCからいくと、画面がわかりやすい。→嘘かも)。ElasticIPから、新しいIPの割当てを実行し、IFとしてEth0,IPを作成した10.0.0.101にする
FG上で、バーチャルIPの設定
バーチャルIPは、「ポリシー&オブジェクト」>「バーチャルIP」で「新規作成」
 外部IPアドレスを10.0.0.101 マップされたIPとしてサーバの10.0.1.76
FGで作成したVIPへのポリシーを許可する。
 -「ポリシー&オブジェクト」で「新規作成」 宛先を先ほど作成したバーチャルIPのオブジェクトにする。

FGから作成したサーバへのpingを許可するには、サーバのセキュリティグループで、ICMPを許可する必要がある。
同様に、サーバからFGへpingを許可するのも同様。
→という観点から、セキュリティグループは、WANのIFとLAN内のIFで変えた方がいい気がする。

・EC2のサーバからインターネット接続や、pingを打つには、一工夫が必要。サーバのセキュリティグループで、サーバおよびFWのアウトバウンドが許可されているかを確認する。※デフォルトはANYで許可されているはず。
・もう一つ、EC2のネットワークセキュリティ>ネットワークインターフェースで、LAN1(やLAN2)を選択し、アクションをクリックし、「送信元/送信先の変更チェック」を「無効」にします。これをすると、EC2のサーバからインターネットにアクセスできるようになる。
※何をしているかというと、AWSは基本的に自分宛てのパケット以外を拒否します。それを、受け付けるようにするのです。ネットにいろいろと情報が載っています。

■今度はDMZ上のサーバを作る
・EC2を立ち上げる。VPCはDMZ
・FortiGateのインスタンスをえらび、ネットワークインターフェースからeth0を選んでアクション、IPアドレスの管理で、セカンダリIPを作る 10.0.0.102
・ElasticIPを取得、それを、先に作ったeth0の10.0.0.102に関連づけ
・FGにて、VIPを設定する。10.0.0.102→10.0.2.101
・FWポリシーを作成する。このとき、宛先は先に作成したVIP。※NATはデフォルトの通り、有りとした。
・SSHで接続できるはず。
・セキュリティグループで、10.0.0.0/16を全て許可しておけば、LAN内は自由に通信できるはず。
同様に、LANにおいたサーバもそうする。

■AWS独特のルーティング
FortiGateでNWを分離しても、LANからDMZはForiGateを通ってくれません。
同一VPC内には特殊なlocalというルータがあり、ルーティングテーブルとして、localというのが作成されている。だから、FGを導入しても、勝手にlocalルータで経由されてします。
たとえば、10.0.0.0/16のVPCを作りセグメントとしてLAN(10.0.0.0/24)とDMZ(10.0.1.0/24)を作ったとします。
LANのデフォゲ(つまりLocalのルータ)は10.0.0.1でDNSは10.0.0.2と割り当てられます。
→EC2のサーバのデフォルトゲートウェイを変えればうまくいく?→仕様としてできないみたいだ。