2026年7月15日
2026年7月15日
FortiGate でポート開放(ポートフォワーディング)を設定する方法|Virtual IP とファイアウォールポリシーの作り方・CLI 例・通らないときの確認手順
FortiGate でポート開放をするには、①「Virtual IP(VIP)」で「WAN 側の IP アドレス:ポート → 内部サーバーの IP アドレス:ポート」の対応を作り、②WAN から内部へのファイアウォールポリシーで宛先にその VIP を指定して許可する、という 2 段階の設定が必要です。家庭用ルーターの「ポートフォワーディング」1 画面に相当する作業が、FortiOS では「アドレス変換の定義」と「通してよいかの判断」に分かれています。
結論を先にまとめます。
- VIP は「Policy & Objects → Virtual IPs」で作ります。外部 IP(WAN 側)、内部 IP(マッピング先)、ポートフォワーディングを有効にしてプロトコルと外部ポート・内部ポートを指定します。
- ポリシーは「Policy & Objects → Firewall Policy」で、受信インターフェース = WAN、送信インターフェース = サーバーのある LAN、宛先 = 作った VIP、サービス = 開けるポート、アクション = ACCEPT で作ります。
- VIP を宛先に選べないときは、VIP の「インターフェース」とポリシーの受信インターフェースが一致していないか、Central NAT が有効になっています。
- 通らないときは
diagnose sniffer packetで、WAN に届いているか、内部へ出て行っているかを段階ごとに見ます。 - 公開するポートは必要最小限にし、WordPress なら 80 / 443 だけを通して、管理用ポート(SSH・RDP・データベース)は VPN 経由にします。
FortiGate のポート開放の仕組み
FortiOS では、外から来た通信の宛先を内部サーバーに書き換える機能を Virtual IP(VIP、宛先 NAT) と呼びます。VIP には 2 つの形があります。
| 種類 | 内容 | 用途 |
|---|---|---|
| Static VIP(1 対 1) | WAN 側の IP アドレス 1 つを内部の IP アドレス 1 つに対応付ける。ポートは変えない | グローバル IP を複数持っていて、サーバーごとに 1 つ割り当てる |
| Port forwarding VIP | WAN 側の IP:ポート を内部の IP:ポート に対応付ける | グローバル IP が 1 つで、ポートごとに別のサーバーや別のポートへ振り分ける |
この記事で扱うのは後者です。公式ガイドの例でも、外部の 8080 / 8081 / 8082 を 3 台の Web サーバーの 80 に振り分ける構成が示されています。1 つのグローバル IP の同じポートを 2 台に振り分けることはできません(その場合は外部ポートを変えます)。
VIP を作っただけでは通信は通りません。FortiGate はすべての通信をポリシーで判定するので、宛先に VIP を指定した許可ポリシーが別に必要です。
手順 1: Virtual IP を作る
GUI では「Policy & Objects → Virtual IPs」から作成します。入力する項目は次のとおりです。
| 項目 | 入れる値 |
|---|---|
| Name | 分かる名前(例: vip-web-443) |
| Interface | 外から通信が入ってくるインターフェース(例: wan1)。any も可 |
| External IP address/range | WAN 側の IP アドレス(WAN インターフェースの IP か、ISP から割り当てられた追加 IP) |
| Map to IPv4 address/range | 内部サーバーの IP アドレス |
| Port Forwarding | 有効 |
| Protocol | TCP(または UDP) |
| External service port | 外から受けるポート(例: 443) |
| Map to IPv4 port | サーバー側のポート(例: 443。変えるなら 8443 など) |
同じ内容を CLI で書くと次のようになります(版によって項目名が少し異なります。お使いの版の CLI リファレンスで確認してください)。
config firewall vip
edit "vip-web-443"
set extip 203.0.113.10
set extintf "wan1"
set portforward enable
set mappedip "192.168.1.20"
set protocol tcp
set extport 443
set mappedport 443
next
end
80 も開ける場合は、別の VIP(vip-web-80)を同じ要領で作ります。複数の VIP をまとめてポリシーに使うときは、「Policy & Objects → Virtual IPs」の VIP Group で束ねておくとポリシーが 1 本で済みます。
手順 2: ファイアウォールポリシーで許可する
「Policy & Objects → Firewall Policy」で新しいポリシーを作ります。
| 項目 | 入れる値 |
|---|---|
| Incoming Interface | wan1(VIP の Interface と同じもの) |
| Outgoing Interface | サーバーがある内部インターフェース(例: lan や dmz) |
| Source | all(公開サーバーなら)。特定の拠点からだけなら、そのアドレスオブジェクト |
| Destination | 作った VIP(または VIP Group) |
| Service | HTTPS(443)、HTTP(80)など開けるポートに対応するサービス |
| Action | ACCEPT |
| NAT | 無効が基本(下の説明を参照) |
| Log Allowed Traffic | 有効にしておくと、後の確認が楽 |
CLI の例です。
config firewall policy
edit 0
set name "wan-to-web"
set srcintf "wan1"
set dstintf "lan"
set srcaddr "all"
set dstaddr "vip-web-443" "vip-web-80"
set action accept
set schedule "always"
set service "HTTPS" "HTTP"
set nat disable
set logtraffic all
next
end
NAT の設定について
このポリシーの NAT(送信元 NAT)は、通常は無効にします。有効にすると、サーバーから見た接続元がすべて FortiGate の内部 IP になり、Web サーバーのアクセスログや WordPress のログイン制限が訪問者の IP を区別できなくなります。NAT を有効にするのは、サーバーの既定ゲートウェイが FortiGate ではなく、戻りの通信が別の経路に出てしまう構成のときだけです。
VIP が宛先の候補に出ないとき
次の 2 つのどちらかです。
- インターフェースの不一致: VIP の Interface に
wan1を指定した場合、ポリシーの Incoming Interface もwan1でないと候補に出ません。VIP をanyにするか、ポリシー側を合わせます。 - Central NAT が有効: 「Policy & Objects → Central SNAT」や「Central DNAT」を使う設定(Central NAT)が有効な FortiGate では、VIP はポリシーの宛先ではなく「Central DNAT」の一覧で扱われ、ポリシーの宛先には内部サーバーの実アドレスを指定します。設定の場所が変わるだけで、やることは同じです。
手順 3: 通っているかを確認する
外部(スマートフォンのテザリングなど、社外の回線)からブラウザーや curl で接続します。
curl -vk https://203.0.113.10/ --max-time 10
つながらないときは、FortiGate の CLI で、どこまで届いているかをパケットキャプチャで確認します。
diagnose sniffer packet any 'host 203.0.113.10 and tcp port 443' 4 20 l
書式は diagnose sniffer packet <インターフェース> '<フィルター>' <詳細レベル> <件数> <時刻形式> です。詳細レベル 4 で、インターフェース名と方向、送信元・宛先が 1 行ずつ出ます。読み方は次のとおりです。
| 見え方 | 判断 |
|---|---|
| 何も出ない | WAN に届いていない。ISP 側の制限、上流のルーター、DNS が別の IP を指している、など |
wan1 in だけ出て lan out が無い |
FortiGate が落としている。ポリシーの条件(インターフェース、サービス、スケジュール)か VIP の設定を見直す。「Log & Report → Forward Traffic」で拒否のログも確認 |
lan out は出るが戻りが無い |
サーバーが応答していない。サーバー側のファイアウォール(ufw / Windows Defender)、待ち受けアドレス、既定ゲートウェイを確認 |
| 戻りも出るのに外から見えない | 戻りの経路が別(非対称)。サーバーの既定ゲートウェイを FortiGate にするか、ポリシーの NAT を有効にする |
diagnose debug flow を使うと、どのポリシーに一致したか(または一致しなかったか)を追えます。
公開するときの注意
- 開けるのは必要なポートだけ: 外部ポートを変えても(例: 2222 → 22)、スキャンで見つかります。SSH・RDP・データベースのポートは外に出さず、FortiGate の SSL-VPN や IPsec VPN 経由で使います。
- 送信元を絞る: 取引先の拠点からだけ使うサービスなら、Source にその IP アドレスを指定します。
- ログを残す: ポリシーのログを有効にし、「Log & Report → Forward Traffic」で想定外の送信元からの接続を定期的に見ます。
- セキュリティプロファイル: 公開 Web サーバーへのポリシーには、ライセンスがあれば IPS や Web Application Firewall のプロファイルを付けられます。WordPress へのログイン総当たりなどは、こちらでも見えます。
WordPress サーバーを FortiGate の内側で公開する場合
社内や自社データセンターの WordPress を FortiGate 経由で公開する構成では、次の点を確認してください。
- 80 と 443 だけを VIP で通す。管理画面(
/wp-admin/)は同じ 443 で届くので、WordPress 側でログイン制限や 2 要素認証を入れます。 - 訪問者の IP が WordPress に届くか: ポリシーの NAT を無効にしていれば、サーバーには訪問者の IP がそのまま届きます。有効にした場合、ログイン制限のプラグインが全訪問者を同じ IP とみなしてしまうので注意してください。
- HTTPS の終端: 証明書は Web サーバー側(Nginx / Apache)で扱う構成が一般的です。FortiGate 側で終端する構成(Virtual Server)もありますが、設定が別になります。
- ヘアピン(内側から公開 URL で開く): 社内から
https://www.example.comを開くと、DNS がグローバル IP を返して FortiGate の WAN に向かいます。これを通すには、内部向けのポリシーと NAT、または内部 DNS で内部 IP を返す設定(スプリット DNS)が必要です。
サーバー側で確認すべき待ち受けポートや、外から見える状態の点検はnmap の使い方を参照してください。
よくある質問
VIP を作ったのに通信が通りません
VIP は対応表を作るだけで、通すかどうかはポリシーが決めます。WAN → LAN で宛先に VIP を指定した ACCEPT のポリシーがあるか、ポリシーのサービスが開けたいポートと一致しているか、ポリシーの順番で先に拒否されていないかを確認してください。
外部ポートと内部ポートを別にできますか
できます。VIP の External service port と Map to IPv4 port を別の値にします。外部の 8443 を内部の 443 へ、のような使い方です。ポリシーのサービスは外部ポート(この例では 8443)に合わせます。
同じポートを 2 台のサーバーに振り分けられますか
同じグローバル IP の同じポートは 1 台にしか対応付けられません。外部ポートを変える(8080 と 8081 など)か、グローバル IP を追加するか、FortiGate の Virtual Server(負荷分散)を使います。Web サーバーならリバースプロキシでホスト名により振り分ける方法も一般的です。
ポリシーの NAT は有効にするべきですか
公開サーバー向けでは無効が基本です。有効にするとサーバーから見た接続元が FortiGate の IP になり、アクセスログやログイン制限が機能しなくなります。サーバーの既定ゲートウェイが FortiGate で、戻りの経路が同じなら無効のままで通ります。
設定が正しいのに社内から公開 URL で開けません
ヘアピン NAT の問題です。社内からは内部 DNS で内部 IP を返す(スプリット DNS)のが簡単です。FortiGate で通す場合は、LAN → LAN(受信も送信も内部インターフェース)で宛先 VIP、NAT 有効のポリシーを追加します。
まとめ
- FortiGate のポート開放は、VIP で「WAN の IP:ポート → 内部の IP:ポート」の対応を作り、WAN → 内部のポリシーで宛先に VIP を指定して ACCEPT する 2 段階です。
- ポリシーの NAT は通常無効にし、VIP が候補に出ないときはインターフェースの一致と Central NAT の有無を確認します。
- 通らないときは
diagnose sniffer packetで WAN 到達 → 内部送出 → 戻りの 3 点を見て、原因の場所を切り分けます。公開は 80 / 443 だけにし、管理用ポートは VPN 経由にします。
関連記事
- nmap の使い方とポートスキャンの基本|自分のサーバーの公開ポートを確認する手順
- Azure NSG の優先度の仕組みと設定手順
- サーバーへの不正アクセスを検知する方法
- WordPress に Cloudflare を設定する完全ガイド
参考: FortiOS Administration Guide – Virtual IPs with port forwarding、CLI Reference – config firewall vip、Fortinet Community – Technical Tip: Virtual IP (VIP) port forwarding configuration、Fortinet Community – Using the FortiOS built-in packet sniffer
更新履歴: 2026-11-09 全面改訂(定型文の本文を、VIP とポリシーの 2 段階の設定、CLI 例、sniffer での切り分け、WordPress 公開時の注意に置き換え)。この記事はワードプレス博士(ライトセンド株式会社)が運営しています。