23
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

CYBIRDAdvent Calendar 2022

Day 3

FortiGateで自宅ネットワークの整備

Last updated at Posted at 2022-12-02

CYBIRD Advent Calendar 2022 3日目担当の @march_f です。
前回は @koroneko さんで「改めて振り返るリモートワークの良し悪し」でした。
是非ご覧ください!

はじめに

コロナ禍になってだいぶ時が経ちましたね。サイバードもフルリモート環境になって2年以上経ちます。
個人的にフルリモート環境で怖いことは、社用PCを自宅ネットワークに繋げなければいけないことです。
自宅では他に PC やサーバーが動いているので、そこからウイルス感染することもあり得ます。
特にコロナ禍になってサイバー攻撃が増大したらしく、更にセキュリティが要求されています。

ということでこの記事では、FortiGate を使って自宅ネットワークを整備し、セキュリティを高めつつ開発に便利な環境も整える内容になってます。

FortiGate とは

FortiGate(フォーティゲート)は米Fortinet社の開発した統合脅威管理(UTM)です。

できること(一部ライセンス必須)

  • ファイアウォール
  • アンチウイルス
  • 不正侵入防御
  • コンテンツフィルタリング
  • アンチスパム
  • VPN設定(IPsec、SSL-VPN)
  • ルーティング
  • DNSサーバー
  • パケットキャプチャ
  • ロードバランシング
    etc...

このほかに WiFi 用の FortiAP、L2スイッチ用の FortiSwitch、ログ解析用の FortiAnalyzer などがあります。
ほぼ全ての設定をブラウザから GUI で設定できるので楽です。

今回は FortiGate と FortiAP を使います。

環境

  • FortiGate 50E v6.2.10 build1263 (ライセンス有)
  • FortiAP-221B (アクセスポイント)
  • GS308E (L2SW)
    https://www.amazon.co.jp/gp/product/B07QT8TNPB
  • F660A (NuroのONU)
  • クライアント端末(Mac、Windows、iPhone、ラズパイ、IoT機器)

FortiGate と FortiAP は出荷状態にします。
設定は Google Chrome を使ってWebから行います。

ちなみに今回はアクセスしませんが、FortiAPの一部ファームウェアバージョンでは管理画面アクセス時に Internet Explorer でないと正しく表示されないようです。

やること

  • 仕事用、趣味用、サーバー用のネットワークを分ける
  • WiFi設定
  • VPN(IPsec)の設定
  • DNSの設定
  • ラズパイサーバーの外部公開
  • ローカルサーバーへのFQDNアクセス設定
  • iPhone の Homekit と IoT機器 の連携
  • 上記全てのポリシー設定

ネットワーク構成図

network

ONU(F660A) の設定

  • ONU からの配線は「ONU LAN -> FortiGate WAN1」
  • 無線LAN は全て無効にする
  • DMZ を有効にして FortiGate のIPアドレス(又はMACアドレス)を指定

初期設定

ブラウザに 192.168.1.99 を入力すると管理画面が出ます。
※環境によっては DHCP で割り当てられている場合もあります。

ログイン

項目
Username admin
Password 無し

ログイン後にパスワード変更促されるので変えます。

システム設定

System > Settings

項目
Time zone (GMT+9:00) Oosaka, Sapporo, Tokyo, Seoul
Language Japanese
Setup device as local NTP server オフにする

表示機能設定

初期ではいくつかの設定表示がオフになっているので使用するものをオンにします。
※デフォルトでオンになっているものは使用しなくてもそのままにしています。

system.png

ネットワーク設定

lan1 ~ lan3 (趣味用メインPC、趣味用サブPC、サーバー用PC)

なんか最初からいろいろあるので、いらないものを削除したり分離したりします。

fortilink

ネットワーク > インターフェース

fortilink.png

fortilink は FortiSwitch (L2SW) と連携する用で、今回は使わないので削除します。

lan1、lan2 (MainPC)

lan1 ~ lan5 がハードウェアスイッチで統合されています。
ハードウェアスイッチとは、異なるポートを統合して1つのインターフェースとして扱う機能です。
異なるポートでも、同じセグメントとして扱うことができるようになります。

今回は lan1 と lan2 を統合し、他はそれぞれ独立させます。

この項目をダブルクリックもしくは右クリックで編集を押します。

lan1-lan2.png

名前はなんでもOKです。今回はMainPCにします。
インターフェースメンバーは、 lan1 と lan2 以外を × をクリックして除外します。

上記設定をすることで、192.168.10.0/24 の仮想ネットワークができます。
この配下の端末はゲートウェイアドレスがインターフェースのIPアドレスである 192.168.10.1 になります。

管理者アクセスとはそのゲートウェイIPアドレスに対する許可項目です。HTTPS と HTTP のチェックを外すと 192.168.10.1 では管理画面にアクセスできなくなるのでご注意ください。

設定できたら OK を押します。

これにより wan 側のセグメントから離れたため、以降は 192.168.10.1 で管理画面にアクセスします。

デバイス検知にチェックをいれると、 ユーザ&デバイス > デバイスインベントリ に接続している端末の情報が表示されるようになります。基本的にはチェックいれていきます。

lan3

これは単独で動かすのでそのまま設定します。
lan3 をダブルクリックします。

lan3.png

※現状 lan3 は動かしていないため必要最低限の設定のみです。

WAN1

ONUと繋がっているポートです。
エイリアスとIPアドレスを変更して、管理者アクセスは全てチェックを外します。(後に外部公開した際に手順を誤っても管理画面が出ないように)

wan1.png

DNS

ネットワーク > DNS

インターフェースで lan の設定をした際、DNSサーバーを「システムDNSと同じ」に設定しましたが、そのシステムDNSがここの設定になります。

今回はGoogle の DNSサーバー を指定します。

dns.png

スタティックルート

ネットワーク > スタティックルート

今のままではネットに繋ごうとしても、FortiGate がどこへ送ればいいかわからない状態なので、
全ての宛先を ONU へ転送するように設定します。

staticroot.png

0.0.0.0/0.0.0.0 は全ての宛先という意味になります。
ゲートウェイアドレスは ONU のIPアドレスを指定します。

ポリシー

ポリシー&オブジェクト > IPv4ポリシー

ONUへ転送されるようになりましたが、現状 FortiGate が全て通信を遮断してる状態なので、ポリシーで MainPC からインターネットへのアクセスを許可します。

新規作成を押します。

onu_policy.png

セキュリティプロトコルは使用したい場合はチェックをいれます。
※Webフィルタはデフォルトのままだと Twitch や一部ゲームページにアクセスできなかったりするので、設定する場合はフィルタ設定を確認したほうがよいです。

OK 押すと晴れてインターネットに接続できます。

ここまでの構成図

draw1.png

lan4(L2SW、Webサーバー、IoT、防犯カメラ)

lan4 から L2SW へ接続して L2SW 配下でセグメントを分けます。
L2SW でセグメントを分けるには VLAN を使います。

VLANとは

VLANとは、仮想的なLANセグメントを作る技術です。
物理的にポート毎でわける ポートVALN と、フレームに付加する VLANタグ で判別してLANセグメントを分ける タグVLAN があります。
通信に付加されるタグによって判別されるため、L2SWでセグメントを分離させたり、遠いポート同士を同じセグメントに属したりできます。

もっと上手く説明している記事がありますので、詳細はこちらをご覧ください。

今回はタグVLANを使って以下のように分けます。

vlan.png

VLANタグが複数通るポートをトランクポートもしくはタグポート、VLANタグが1つのみ(端末に直接繋がるポート)のポートをアクセスポートもしくはアンタグポートと呼ぶそうです

L2SW(GS308E)の設定

設定の前に、L2SW にアクセスして設定を行う必要があるため、L2SW(lan4)にIPアドレスを設定します。

l2sw.png

L2SWのみなのでDHCP範囲は1つのみにしています。

設定してしばらくすると、DHCPが割り当てられます。

接続するためには、ポリシーで lan1 から lan4 へのアクセスを許可する必要があります。
今後も lan1 からのアクセスは全て許可したいので、先ほど作ったポリシーの To に追加していきます。
To にポインターをのせると右上に鉛筆マークが出るのでそれをクリックして、右からL2SWをクリックして適用します。

lan1-to-lan4.png

これで通信が通るようになったので、 ブラウザで 192.168.40.2 にアクセスします。
初期のパスワードは password です。

gs308e.png

ログインできたらパスワード変更します

VLAN設定

VLAN > 802.1Q > 拡張 > VLAN設定

拡張802.1Q VLAN を有効にします。
すぐ下の VLAN ポートメンバーで 41, 42, 43を追加します。

setting-vlan.png

VLANメンバーシップ

VLAN > 802.1Q > 拡張 > VLANメンバーシップ

41, 42, 43のタグポート、アンタグポートを設定していきます。
今回タグポートはポート1だけなので、ポート1を T(Tagポート)、それ以外を U(Untagポート) にします。

VLANタグはとりあえず以下のように設定します。

ポート 1 2 3 4 5 6 7 8
VLANタグ 1 41 41 42 42 43 43 43
VLAN 41

vlan41.png

VLAN 42

valn42.png

VLAN 43

vlan43.png

Port VLAN ID (PVID)

VLAN > 802.1Q > 拡張 > Port VLAN ID (PVID)

PVIDは、ポートに設定された PVID により、タグ無しのパケットを受信した場合、どのVLAN に送信するかを振る舞うものらしいです。
VLAN非対応の危機を接続しても、ここで設定した VLAN ID として接続が可能になります。

pvid.png

再度VLANメンバーシップ

VLAN > 802.1Q > 拡張 > VLANメンバーシップ

ポート1以外のタグを削除します。

vlan-member-ship.png

L2SWの設定は完了です。

VLANインターフェース

FortiGateの管理画面からネットワーク > インターフェースに戻ります。
新規作成 > インターフェースを押します。

VLAN 41, 42 ,43の仮想インターフェースを作成していきます。

VLAN 41

interface-vlan41.png

VLAN 42

interface-vlan42.png

VLAN 43

interface-vlan43.png

これで L2SW とその配下の設定完了です。
各端末にアクセスするには先ほど同様ポリシーに追加が必要です。
試しに To に IoT を追加してブラウザでアクセスしてみます。

plicy-to-iot.png

192.168.42.2 へアクセス。

iot-page.png

ちゃんと VLAN のネットワークで繋がりました。

Webサーバーを公開する

VLAN41 に繋がっている外部公開用Webサーバーのラズパイを外部からアクセスできるよう設定します。
今回は ONU のDMZ設定で全てのアクセスを FortiGate(192.168.1.99) へ転送しているので、192.168.1.99 へのアクセスを ラズパイWebサーバー(192.168.41.2) へ転送すればよさそうです。
転送にはバーチャルIPを使用します。

ポリシー&オブジェクト > バーチャルIP

virtual-ip.png

wan にくる 192.168.1.99 宛のアドレスを 192.168.41.2へ転送します。

ポリシー&オブジェクト > IPv4ポリシー

wan から ラズパイ(Webサーバー) への許可設定をします。

policy-virtual-wan.png

宛先に先ほど作成したバーチャルIPを指定することで転送してくれます。

※事前に外部サービスでドメインを取得してIPアドレスに紐づけています。

access-wan-laravel.png

外からアクセスできました。

LAN内からドメインでアクセスする

ドメインはグローバルIPアドレスと紐づいているため、バーチャルIPでグローバルIPアドレス向けのアクセスをWebサーバーへ転送すればアクセスできます。

ポリシー&オブジェクト > バーチャルIP

virtual-ip-lan.png

外部IPアドレスにグローバルIPアドレスを入力します。

ポリシー&オブジェクト > IPv4ポリシー

Webサーバーへアクセスしたいインターフェースを指定します。

policy-virtual-ip-lan.png

同じように iPhone からアクセスしてみます。

iphone-access.png

WiFi からでもドメインでアクセスできました。(※WiFiの設定はこの後行います)

ここまでの構成図

draw2.png

防犯カメラはまだ動かしていないので保留。

lan5(WiFi)

最後のポートです。このポートはWiFi専用に設定します。

インターフェース

ネットワーク > インターフェース で lan5 をダブルクリック

lan5.png

管理者アクセスのSecurity Fabric Connection にチェックをいれないとFortiAPと通信できません(詳しくはこれを有効にすることで有効になる CAPWAP が大事なよう)

FortiAP のみなので DHCP 範囲は1つのみにしています。

国設定

右上の >_ をクリックしてCLIコンソールを開き、以下のコマンドを実行します。

# config wireless-controller setting
# set country JP
# end

これを設定しないと日本国内では違法となる電波を発信してしまう可能性があるため必ず正しく設定します。

SSID 作成

WiFi & スイッチコントローラー > SSID

作るSSID

  • 自分用 (Home)
    • スマホやゲーム機、WiFi 対応の IoT など
  • 仕事用 (Work)
  • 来客用 (Guest)

SSID名は自由ですが、分かりやすいものは避けたほうがいいかも?(自分も最後に分かりにくいものに修正してます)

新規作成を押して作っていきます。

Home(自分用)

ssid_home.png

このSSIDは エアコン や IoT 機器と繋がる必要があるため、ブロードキャストSSID をオンにする必要があります。

Work(仕事用)

ssid_work.png

仕事用のMacしかつながないので、クライアント最大数を 1 に設定します。
SSID内トラフィックブロックもオンにします。

Guest(来客用)

ssid_guest.png

SSID内トラフィックブロックをオンにします。

wqtnとは?

ネットワーク > インターフェース を見ると、作成したSSIDにそれぞれ wqtn というVLANネットワークがあります。

wqtn.png

これは、端末が脅威のあるサイトへ接続するとアサインされる、隔離用VLANです。
SSID作成時の「ホストを隔離」にチェックを入れていると作成されます。
作成された隔離用VLANは、ソフトウェアスイッチで1つのネットワークにまとめられます。

プロファイル作成

WiFi & スイッチコントローラー > FortiAPプロファイル

WiFiに関する設定です。
新規作成を押します。

ssid_profile.png

WiFi の設定はこちらを参考にしています。

※画像ではチャネル幅が20MHzになってますが、私の環境ですと20MHzは通信速度が結構遅かったので40MHzに変更してます。
Home はエアコンや IoT 機器が接続するため、2.4GHzのみに限定させる必要があります。
そのため、ラジオ1(5GHz)の SSIDs を Guest と Work のみにします。

WiFi有効化

WiFi & スイッチコントローラー > マネージドFortiAP

FortiAP が表示されているので、ダブルクリックします。

managedFortiAP.png

承認済みをオンにして、ワイヤレス設定のプロファイルを先ほど作成したプロファイルに指定します。
しばらくすると状態がオンラインになります。

ポリシー設定

全体

ポリシー&オブジェクト > IPv4ポリシー

WiFI から Internet は共通なのでまとめて作成します。

policy_WiFi.png

Home(自分用)

スマホの紐づけ

Home から Internet への許可ポリシーを作成しますが、
Home に接続しているスマホだけはRPi Web Server や MainPC と通信したいので、別途スマホ専用のポリシーを作成します。
そのためにまず、スマホ専用のファイアーウォールアドレスを作成します。(Macアドレスと端末の紐づけ)

ユーザ&デバイス > デバイスインベントリ

devices.png

スマホが表示されていると思うので、そのデバイス名をマウスオーバーすると出てくる「ファイアーウォールデバイスアドレス」をクリック

firewalladdress-iphone.png

名前をつけて作成


ポリシー&オブジェクト > IPv4ポリシー

policy_iphone.png

送信元に先ほど作成したアドレスを指定することで、スマホのみのポリシーを作成できます。

Work(仕事用)

ポリシー&オブジェクト > IPv4ポリシー

Work からのアクセスはインターネット以外拒否したいので、(許可しない限りは通りませんが一応)別途作成します。

policy_work.png

逆も作成します。

policy-to-work.png

Guest(来客用)

インターネットへの接続だけあればいいので他は無し。

VPN接続

FortiGate は IPsec と VPN-SSL が使えます。
今回は IPsec で iPhone で接続する設定します。

VPNユーザ作成

ユーザ作成

ユーザ&デバイス > ユーザ定義

VPN で認証する際のユーザを作成します。
新規作成をクリックします。

vpn-user1.png
vpn-user2.png
vpn-user3.png

グループ作成

ユーザ&デバイス > ユーザグループ

user-group.png

先ほど作成したユーザをメンバーで指定します。

IPsec

設定

VPN > IPsecウィザード

画像のように設定すれば完了です。

IPsecWizard1.png

着信インターフェースはWANを指定します。

IPsecWizard2.png
IPsecWizard3.png

ここはポリシーの設定になります。
VPNで接続したユーザがアクセスできる先の指定になります。
ここではインターフェースは1つしか設定できませんが、後から ポリシー&オブジェクト > IPv4ポリシー で複数指定できるので、ここでは wan だけ指定しておきます。
wan を指定すると、VPN接続した端末でインターネットにアクセスする際 FortiGate を経由するようになります。

アクセス

iPhone で設定します。

一般 > VPN とデバイス管理 > VPN

VPN 構成を追加

iphone-ipsec.png

項目 設定
サーバー 自宅のグローバルIPアドレス
パスワード ユーザ作成 で作成したユーザのパスワード
シークレット IPsecウィザードで設定した事前共有鍵

設定完了後、VPNをオンにします。

これで、インターネットへの接続は FortiGate 経由で行くようになりました。

LAN内へのアクセス

IPsec で作られたポリシーに追加します。

policy_ipsec-iot.png

vpn_iPhoneVPN_remote という名前でポリシーが作られているので、試しに許可する宛先に IoT を追加してアクセスしてみます。

vpn-philips-hue.jpg

LAN内へアクセスできました。

FQDNでのアクセス方法

IPsecウィザードから設定する際、DNSを「システムDNSを使う」にしたため、現在の向いているDNSサーバーはDNSの設定で指定したDNSサーバーになっています。

新たに DNS 用のインターフェースを作成してDNSサーバーをたて、それを指定します。

ネットワーク > インターフェース

DNSサーバー 用のダミーのインターフェースを作成します。

interface_dns.png

ネットワーク > DNSサーバー

上のDNSサービスで DNS と iPhoneVPN を登録します。

dns-iphonevpn.png
dns-dns.png

※DNSは作成した DNSサーバー を指定していますが、名前解決をするには接続するインターフェース自体もDNSサーバーとして動かす必要があるそうです(どこかのバージョンのタイミングで、自身のDNS経由じゃないと名前解決しなくなったらしい?)

VPN > IPsecトンネル

iPhoneVPN をダブルクリックしてネットワークの編集をクリック

ipsec-dns.png

DNS のIPアドレスを指定

ポリシー&オブジェクト > IPv4ポリシー

iPhoneVPN から DNS への通信を許可します。

iphone-to-dns.png

これでDNSデータベースに追加されている FQDN にアクセスできるようになります。

今回はDNSを新たに作成しましたが、別インターフェースを DNS サーバーとして登録し、そのインターフェースをDNSとして指定しても動きます。

ポリシー整理

最後に、作成したポリシーを整理します。

policy.png

  • ポリシー名変更
  • セキュリティプロファイルを適用
  • wan 向けを全て1つにまとめる
  • Work の Deny ポリシーをシーケンスの上に移動(ポリシーは上から順にマッチした最初の行が適用されます)
  • SSID 変更

以上でネットワークの設定は完了です。

ローカルサーバーへFQDNでアクセスする

趣味用メインPCで Vagrant(ブリッジ) で動かしているWebサーバーへ DNS で名前解決してアクセスしてみます。
今回は 趣味用メインPC と WiFi で作成した Home からアクセスできるよう設定します。

ネットワーク > DNSサーバー

上のDNSサービスで新規作成をクリック

mainpic-dns.png
iphone-dns.png

MainPC と Home をそれぞれ作成します。

下のDNSデータベースで新規作成をクリック
(表示されていない場合はシステム > 表示機能設定からDNSデータベースをクリックします)

dns-server-mainpc.png

設定したら下のDNSエントリで新規作成をクリックします。

dns-entry.png

IPアドレスは サーバーがたっているIPアドレスです。今回は MainPC 内の Vagrant のIPアドレスになります。

ネットワーク > インターフェース

MainPC をダブルクリックして編集します。

select-dns.png

DNSサーバーをインターフェースIPと同じにします。

Home でも同じように設定します。

以上で設定完了です。


ブラウザで 先ほどDNSで設定した http://mainpc.localserver へアクセスします。

mainpc-to-local.png
iphone-to-local.jpg

ちゃんと繋がりました。

※すぐに繋がらない場合は Windows でコマンドプロンプトを開いて ipconfig /renewでIPアドレスを再取得します。iPhoneの場合はWiFiに接続し直すと繋がるようになります。
※Home -> MainPC への許可をポリシーで設定していないと繋がりません。

iPhone の Homekit から IoT を操作する

互いにマルチキャストポリシー有効化すると良いらしい?
(ここはよくわかってないです。。)

ポリシー&オブジェクト > マルチキャストポリシー

multicast-policy1.png
multicast-policy2.png

iPhone が繋がっている LAN から IoT へ有効化します。
別途 ポリシー&オブジェクト > IPv4ポリシー で iPhone から IoT への許可が必要です。

ペネトレーションテスト

Webサーバーを建てているラズパイを対象に、OpenVAS(GVM) を使って実際に FortiGate が防いでくれるかテストします。
セキュリティプロファイルは以下を適用してます。
※プロファイルはすべて default です

タイプ
アンチウイルス
アプリケーションコントロール
IPS
certificate-inspection

penetration-task.png

実行

ログ&レポート > 侵入防止 でめっちゃ検出してました。

PenetrationTestResult.png

検出した攻撃

タイプ 内容
web_server Mitel.Audio.Web.Conferencing.Command.Injection
web_server HTPasswd.Access
web_misc HTTP.URI.SQL.Injection
web_app3 Novell.NetBasic.Scripting.Server.Directory.Traversal
web_app3 Honeywell.IPCam.Information.Disclosure
web_app AWStats.Rawlog.Plugin.Logfile.Parameter.Input.Validation
web_app ANS.Directory.Traversal
misc SSLv2.Openssl.Get.Shared.Ciphers.Overflow.Attempt
backdoor WebNMS.Framework.Directory.Traversal
applications3 Web.Server.Password.Files.Access
applications3 Ubiquiti.Networks.AirOS.admin.cgi.Remote.Command.Execution
applications3 Novell.ZENworks.Asset.Management.Web.Information.Disclosure
applications3 NETGEAR.DGN1000.CGI.Unauthenticated.Remote.Code.Execution
applications3 DVR.Manufacturers.Configuration.Information.Disclosure
applications3 Cisco.Unity.Express.XSS
applications3 Bash.Function.Definitions.Remote.Code.Execution
applications3 Atlassian.Confluence.Server.S.Endpoint.Information.Disclosure

攻撃に対して全てdropped(破棄)していました。


ちなみにテスト前に既にいくつか検出してました。

タイプ 内容
apache Apache.Log4j.Error.Log.Remote.Code.Execution forwardedfor=${jndi|ldap|//10.0.2.15|25874/a}
apache Apache.HTTP.Server.cgi-bin.Path.Traversal
web_server PHPUnit.Eval-stdin.PHP.Remote.Code.Execution
backdoor Mirai.Botnet
applications3 Generic.XXE.Detection
misc PHP.Diescan
web_app3 ThinkPHP.Controller.Parameter.Remote.Code.Execution

さっそく去年話題になった Log4j がきてますね...

終わりに

私は普段サーバーサイドのエンジニアなので、インフラ寄りの作業は新鮮で大変勉強になりました。

CYBIRD Advent Calendar 2022 4日目は@shiso_cさんの「継続は力なり〜Unity1Weekに8回連続で参加した話〜」です。
こちらも是非ご覧ください!

参考サイト

Youtube に実例がたくさんあったのでそちらで検索するのもおすすめです。

FortiGate 説明

ネットワーク設定

DNS

VLAN

GS308E (L2SW)

サーバー公開

Homekit 連携

WiFi

IPsec

23
22
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?