はじめに
FortiGate は出荷時設定のままでも稼働しますが、出荷時の既定値には利便性や互換性を優先したものが含まれ、セキュリティの観点では見直しが推奨される項目があります。外部に露出した管理インターフェース、変更されていない管理者アカウント名、未使用のまま開いているポートやプロトコルは、攻撃者にとって足がかりになり得ます。
一方で、見直すべき設定は管理者アカウント・管理アクセス・Firewall Policy・ログ・リモートアクセス・暗号化・物理アクセスと多岐にわたり、どこから着手すべきか判断しづらいという課題があります。
- FortiGate のハードニングで押さえる設定領域の全体像
- 優先度別(必ず/推奨/環境に応じて)の堅牢化チェックリスト
- 各設定の確認コマンドと、通信への影響・切り戻しの考え方
- Security Rating を使った堅牢化状況の自己監査
- 各テーマの詳細手順への入り口(クラスター内の関連記事)
FortiGate のハードニングは、管理面・通信面・物理面という 3 つの攻撃面を縮小する作業に整理できます。着手順としては、影響範囲が広く効果の大きい管理者アカウントと管理アクセスの制限から始め、その後に Firewall Policy・ログ・暗号化へ広げる流れがおすすめです。設定後は Security Rating でスコア化し、抜け漏れを継続的に確認する運用につなげられます。
FortiGate ハードニングの全体像
ハードニングの対象は広範ですが、攻撃者がどこを狙うかという視点で見ると、管理面・通信面・物理面の 3 つに整理できます。この区分は、後述の優先度づけや Security Rating の監査項目とも対応します。
管理面: 管理者と管理アクセスの保護
FortiGate そのものへログインし設定を操作する経路です。攻撃者がここを掌握すると、ポリシーの改変やログの消去まで可能になるため、影響が最も大きい領域になります。
対象となる設定には、管理者アカウント名の変更、パスワードポリシーの有効化、ログイン失敗時のロックアウト、管理者の 2 要素認証、外部インターフェースでの管理アクセス無効化、HTTPS/SSH のみの許可、管理ポートの非標準化、Trusted Host や Local-in-Policy による接続元制限などが含まれます。これらは設定変更による効果が大きく、優先度の高い項目として扱います。
通信面: ポリシーと開放ポートの最小化
FortiGate を通過する通信、および FortiGate 自身が受信する通信を絞り込む領域です。
Firewall Policy を「すべて許可」で構成せず必要な通信のみを許可する設計、送信元・宛先インターフェースに ANY を使わない設計、ジオブロッキングや ISDB(IP レピュテーション)によるリスクの高い通信先の制御、未使用ポリシーの精査、未使用インターフェース・プロトコルの無効化、Local-in-Policy による開放ポートの制限などが該当します。攻撃対象領域(アタックサーフェス)の縮小に直結する領域です。
物理面: 機器そのものへのアクセス制御
FortiGate 本体に物理的に触れられる状況を前提とした対策です。
物理アクセスが可能な場合、コンソール経由のログインや別ファームウェアのロードが行われる可能性があります。USB からの自動インストール(auto-install)の無効化、maintainer アカウントの扱い(FOS 7.2.4 以降は削除済み)、TPM による機密データの暗号化、BIOS のセキュリティレベルなどが対象です。データセンターのように物理的に保護された環境か、そうでないかで適用判断が変わるため、環境に応じて検討する項目として整理します。
これら 3 面に加えて、ログ管理・バージョン管理・暗号化方式は領域横断で関わります。本記事ではまず優先度別のチェックリストで全体を俯瞰し、各設定の詳細は後続のテーマ別セクションから関連記事へ案内します。
優先度別ハードニングチェックリスト
ハードニング項目を、影響範囲と効果・適用リスクの観点で 3 段階に整理します。各項目に CLI・出荷時設定・推奨値・確認方法を添えます。設定変更には通信へ影響するものが含まれるため、利用率の低い時間帯やメンテナンスウィンドウでの適用と、適用後の確認をおすすめします。

参考: Fortinet「Best Practices — Hardening」
“System hardening reduces security risk by eliminating potential attack vectors”
(システムのハードニングは、潜在的な攻撃経路を排除してセキュリティリスクを低減する)
https://docs.fortinet.com/document/fortigate/8.0.0/best-practices/555436/hardening
優先して対応したい項目(優先度: 高)
影響範囲が広く、適用による通信影響が小さい管理面の項目です。
- 管理者アカウント名の変更
-
既定アカウント名 admin は広く知られ、総当たり攻撃の起点になりやすいため、
super_adminプロファイルの新規アカウントを作成し、そのアカウントでログインしたうえで既定の admin を改名または削除します。config system admin edit "new_admin" set accprofile "super_admin" set vdom "root" set password <password> next end確認:
show system admin | grep editで既定の admin が残っていないこと。 - パスワードポリシーの有効化
-
出荷時はポリシー無効のため、長さ・文字種・有効期限を定義します。出荷時設定: disable/推奨値: enable。
config system password-policy set status enable set apply-to admin-password set min-lower-case-letter 1 set min-upper-case-letter 1 set min-number 1 set min-non-alphanumeric 1 set expire-status enable end確認:
show full-configuration system password-policy | grep status - ロックアウトしきい値・期間の調整
-
ログイン失敗時のロックを設定し、総当たりの成功率を下げます。出荷時設定: しきい値 3・期間 60 秒(しきい値の範囲は 1〜10)しきい値を上げるほど侵入リスクが高まる点に留意します。
config system global set admin-lockout-threshold 3 set admin-lockout-duration 60 end確認:
show full-configuration system global | grep admin-lockout - 外部インターフェースの管理アクセス制限
-
外部(インターネット接続)インターフェースでは管理アクセスを許可しない構成を推奨します。内部の管理インターフェースでも HTTP・Telnet を避け、HTTPS と SSH のみを許可します。
config system interface edit <external-interface> unset allowaccess next edit <mgmt-interface> set allowaccess https ssh next end確認:
show system interface <name> | grep allowaccess - HTTP の HTTPS リダイレクトと TLS 1.2 以上
-
いずれも出荷時に堅牢側の設定ですが、変更されていないかを確認します。出荷時設定: リダイレクト enable・
tlsv1-2 tlsv1-3config system global set admin-https-redirect enable set admin-https-ssl-versions tlsv1-2 tlsv1-3 end確認:
show full-configuration system global | grep admin-https - 管理者の 2 要素認証
-
FortiToken/FortiToken Mobile による 2 要素認証を管理者に割り当てます。登録済みユニットには試用トークンが 2 つ付属します。GUI では「システム」>「管理者」で各管理者に対し 2 要素認証を有効化します。役割ごとに管理者アカウントを分けると、操作の追跡が容易になります。
確認:
show system admin | grep two-factor - Trusted Host による接続元制限
-
管理者がログインできる送信元アドレスを制限します。HTTPS・SSH・SNMP など多くの管理アクセスに適用されます。ping は Trusted Host の例外で全ネットワークに応答するため、ping も絞る場合は Local-in-Policy を併用します。
config system admin edit <admin> set trustedhost1 10.0.0.0 255.255.255.0 next end確認:
show system admin | grep trustedhost - ログの外部保存
-
FortiGate の既定はメモリロギングで、再起動するとログが消えます。FortiAnalyzer・FortiCloud など外部への送信を推奨します。送信時の暗号化も設定できます。
config log fortianalyzer setting set status enable set server <faz-ip> set enc-algorithm high end確認:
show full-configuration log fortianalyzer setting
推奨される項目(優先度: 中)
効果は大きい一方、運用方法の変更や通信影響の確認を伴う項目です。
- 管理ポートの非標準化
-
HTTPS・SSH の管理ポートを既定(443/22)から変更します。接続時はポート番号の指定が必要になり(例:
https://<ip>:7734)、他サービスとのポート競合に注意します。config system global set admin-sport 7734 set admin-ssh-port 2345 end確認:
show full-configuration system global | grep admin-sport - アイドルタイムアウトと SSH grace time の短縮
-
放置端末の悪用や接続確立後の認証猶予を短くします。出荷時設定: アイドルタイムアウト 5 分・grace time 120 秒(範囲 10〜3600 秒)
config system global set admintimeout 5 set admin-ssh-grace-time 30 end確認:
show full-configuration system global | grep -e admintimeout -e grace-time - ログイン免責事項(バナー)
-
ログイン前後に同意を要する免責文を表示します。出荷時設定: disable。文面は置き換えメッセージでカスタマイズできます。
config system global set pre-login-banner enable end確認:
show full-configuration system global | grep pre-login-banner - 強い暗号化のグローバル設定
-
強い暗号のみを許可します。出荷時設定:
strong-crypto enable・ssl-static-key-ciphers enable・dh-params 2048。推奨値はdh-params 8192、静的キーの無効化です。strong-cryptoを無効にせざるを得ない環境では、ssh-hmac-md5 disable・ssh-cbc-cipher disableで SSH 側を補強します。config system global set strong-crypto enable set ssl-static-key-ciphers disable set dh-params 8192 end確認:
show full-configuration system global | grep -e strong-crypto -e dh-params -e ssl-static - 未使用インターフェース・プロトコルの無効化
-
使用していないインターフェースを無効化し、情報収集に使われ得るプロトコルを停止します(多くは既定で無効)。
config system interface edit <unused-port> set status down next end確認:
show system interface <name> | grep -e status -e lldp-transmission -e device-identification - ISDB(IP レピュテーション)によるリスクの高い通信先の制御
-
Firewall Policy にレピュテーションの最低レベルを設定し、基準以上のリスクを持つ通信を破棄します。しきい値の設定によっては正常な通信が遮断される可能性があるため、ログ監視や検証環境で影響を確認してから本適用することを推奨します。
config firewall policy edit <policy-id> set reputation-minimum 3 next end確認:
show firewall policy <policy-id> | grep reputation - 仮想パッチ(virtual patch)
-
即時にアップグレードできない場合の一時的な緩和策として、FortiOS 宛(管理接続・SSL VPN 等)の既知脆弱性を FortiGuard 配信シグネチャで緩和します。Local-in-Policy で virtual-patch を有効化します。詳細は専用スポーク記事で扱います。
- NTP 同期
-
正確な時刻により、証明書やログの監査の一貫性を確保します。Local-in-Policy と併用すると、NTP サービスの提供先を制御できます。
config system ntp set type custom set ntpsync enable config ntpserver edit 1 set server <ntp-ip> next end end確認:
show system ntp
環境に応じて検討する項目(優先度: 低)
物理環境やバージョン、運用方針によって適用可否が変わる項目です。適用前に影響と前提条件を確認します。
- USB 自動インストールの無効化
-
FortiGate を物理的に保護できない場合、USB からのファームウェア・コンフィグ自動インストールを無効化します。出荷時設定はバージョンや機種で異なり、資料が基準とする FOS 7.4.7 では有効、現行の公式ドキュメント(8.0)では無効と案内されています。適用前に
showで現状を確認することをおすすめします。config system auto-install set auto-install-config disable set auto-install-image disable end確認:
show full-configuration system auto-install | grep auto - maintainer アカウントの扱い
-
物理アクセスとシリアル番号があれば管理者パスワードをリセットできる maintainer アカウントは、物理的に保護されていない環境ではリスクになり得ます。FOS 7.2.4 より前のバージョンでは既定で有効のため、必要に応じて無効化します。無効化したうえで全管理者のパスワードを失うと、ファームウェアの再インストール(設定は出荷時へリセット)以外に復旧手段がなくなる点に注意します。
config system global set admin-maintainer disable endFOS 7.2.4 以降では maintainer アカウントは削除済みで、この設定は不要です。該当バージョンではパスワード紛失時の復旧手段が変わるため、定期的な設定バックアップの保管をおすすめします。
参考: Fortinet Community「Resetting a lost admin password」
“Starting with v7.2.4, the ‘maintainer’ account was removed”
(v7.2.4 以降、maintainer アカウントは削除された)
https://community.fortinet.com/t5/FortiGate/Technical-Tip-Resetting-a-lost-admin-password/ta-p/197045 - TPM による機密データの暗号化
-
TPM を搭載するモデルでは、
private-data-encryptionを有効化してマスター暗号化パスワードを保護できます。出荷時設定: disable。FOS 7.6.1 以降は鍵がランダム生成に変わり、暗号化を有効にした状態のバックアップは、無効化した機器や別の鍵を持つ機器へは復元できません。RMA や移行時の復元手順に影響するため、運用フローと合わせて検討します。config system global set private-data-encryption enable end確認:
show full-configuration system global | grep private-data-encryption - ジオブロッキング
-
グローバルな接続を必要としないサービスでは、Firewall Policy で特定地域からのアクセスを制限し、攻撃対象領域を縮小します。リモートアクセスや DMZ の公開サービスの送信元制御にも有用です。
- Local-in-Policy による開放ポートの制限
-
FortiGate 自身が受信する通信を絞り込みます。たとえば WAN 側の ICMP や、利用していない動的ルーティングのポートを閉じる用途に使えます。
config firewall local-in-policy edit 1 set intf wan1 set srcaddr all set dstaddr all set action deny set service ALL_ICMP set schedule always next end確認:
show firewall local-in-policy参照: 管理者まわりのコマンドは「Hardening your FortiGate — System administrator best practices」、暗号化・物理・ファームウェアまわりは「Best Practices — Hardening」(FortiOS 8.0)を確認しています。
https://docs.fortinet.com/document/fortigate/8.0.0/best-practices/555436/hardening
テーマ別の堅牢化ポイント
各テーマの詳細な手順とコマンドは、クラスター内の関連記事で個別に扱います。
管理者アカウント名・パスワードポリシー・ロックアウト・2 要素認証の設定手順は、関連記事『FortiGate 管理者アカウントと認証の堅牢化』で詳しく解説します。外部インターフェースの管理アクセス制限・管理ポート変更・Trusted Host・Local-in-Policy の使い分けは、関連記事『FortiGate 管理アクセス制限の手順』を参照してください。
通信制御の観点では、ALL 許可や ANY インターフェースを避ける Firewall Policy 設計と ISDB(IP レピュテーション)の活用を関連記事『FortiGate Firewall Policy と IP レピュテーション』に、ログの外部保存・Security Rating 監査・フォレンジックを見据えたログ管理を関連記事『FortiGate ログ管理とフォレンジック』にまとめます。
リモートアクセスでは、FortiToken による 2 要素認証と ZTNA の構成を関連記事『FortiGate リモートアクセスの 2 要素認証と ZTNA』で、即時アップグレードが難しい場合の緩和策となる仮想パッチを関連記事『FortiGate 仮想パッチによる脆弱性緩和』で扱います。暗号化のグローバル設定・TPM・NTP・未使用インターフェースの整理などは、関連記事『FortiGate 暗号化と物理アクセスの堅牢化』に集約します。
Security Rating で堅牢化状況を自己監査する
設定後の抜け漏れ確認には、FOS 6.2.0 以降のセキュリティレーティング機能が活用できます。ローカルの監査情報を使う標準機能でもセキュリティ設定の監査が行え、有償ライセンスでは監査項目が増え、変化する脅威に合わせて項目が更新されます。
監査結果は A〜F のランクとスコアで示され、スコアは B 以上を目安にすると堅牢化の到達度を把握しやすくなります。レポートは FSBP・PCI・CIS に沿った形で CSV・JSON として取得でき、定期的な自己点検の基盤になります。標準機能と有償ライセンスの監査項目数は変動するため、利用環境での最新の項目数は GUI 上で確認することをおすすめします。

バージョンと推奨リリースの確認
ハードニング設定と並行して、稼働中の FortiOS バージョンの妥当性も確認します。Fortinet の推奨リリースは四半期ごとに見直されるため、最新の推奨はその時点の公式情報で確認します。サポート切れ(EOS)のバージョンは利用を避け、計画的なアップグレードをおすすめします。
アップグレード時の差分吸収やコンフィグフォーマットの変更については関連記事『FortiGate アップグレードパスの確認手順』を、自動アップグレードの挙動については関連記事『FortiGate 強制自動アップグレードの注意点』を参照してください。脆弱性情報の確認は関連記事『FortiGate PSIRT の確認手順』にまとめています。
まとめ
FortiGate のハードニングは、管理面・通信面・物理面の攻撃面を縮小する継続的な作業です。影響が大きく低リスクな管理者・管理アクセスの制限から着手し、出荷時設定と推奨値を確認しながら段階的に広げる進め方が扱いやすくなります。設定後は Security Rating で到達度を点検し、抜け漏れを継続的に確認します。
- ハードニングは管理面・通信面・物理面の攻撃面を縮小する作業
- 着手は影響が大きく低リスクな管理者・管理アクセスの制限から
- 各設定は出荷時設定と推奨値を確認し適用後に show で検証
- ISDB やポート変更など通信影響を伴う設定は事前検証を推奨
- maintainer や private-data-encryption はバージョンで挙動が変化
- Security Rating でスコア化し抜け漏れを継続的に点検
- 各テーマの詳細手順はクラスター内のスポーク記事を参照
以上、最後までお読みいただきありがとうございました。
