顯示具有 fortigate 標籤的文章。 顯示所有文章
顯示具有 fortigate 標籤的文章。 顯示所有文章

2026年9月10日 星期四

一場 FortiGate IPsec 撥號 VPN 的「連線成功卻失敗」奇案:出廠憑證的 CA 鏈信任陷阱

 整篇文章透過AI將排查的內容整理之後產出

前言

最近排查了一個相當燒腦的 IPsec 撥號 VPN 連線問題:同一台筆電、同一份憑證、同一版本的 FortiClient,連線 A 台 FortiGate 完全正常,連線 B 台 FortiGate 卻穩定失敗。更詭異的是,B 台 FortiGate 自己看起來一切正常——IKE/IPsec SA 顯示協商成功,但 FortiClient 用戶端幾秒後就回報連線失敗,錯誤原因欄位還是空的。

前後花了不少時間交叉比對封包、debug log,最後定位到一個很少人會注意到的角落:同一台 FortiGate 出廠時,可能內建了兩張分屬不同 CA 體系的裝置憑證,而用戶端電腦剛好只信任其中一條。整個過程紀錄下來,希望能幫到遇到類似狀況的人。

環境與症狀

  • Gateway A(FortiGate-60F,FortiOS 7.4.11):問題發生端,IKEv2 撥號 VPN
  • Gateway B(FortiGate-201E,FortiOS 7.4.11):對照組,功能完全正常
  • 用戶端:同一台 Windows 筆電,同一份智慧卡憑證,FortiClient 7.4.1(Free 版與 EMS 版皆測試過)

症狀很單純但很誤導人:連線 Gateway A 時,FortiGate 端的 log 顯示 IKE/IPsec SA 協商成功(SA established),但流量是 0 進 0 出;FortiClient 大約 5~9 秒後就回報連線失敗,沒有具體原因。連線 Gateway B 則完全正常。

排查過程:一路排除的假設

依序測試並排除了以下幾個方向:

  • client-auto-negotiate / client-keep-alive 設定:調整成與 Gateway B 一致並啟用,無效。
  • Mode-cfg 指派網段:IP Pool 從 /32 改成 /24,無效。
  • MTU / 封包分片:一度懷疑是分片重組問題,但比對後發現 Gateway A 的 AUTH_RESPONSE 封包實際上比 Gateway B 更小,方向完全相反;用戶端封包截取也證實分片有正確重組,排除。
  • ISP / 網路路徑封包遺失:這個最關鍵。在 FortiGate 端與用戶端筆電同時做封包截取,結果發現——即使 FortiClient 已經回報連線失敗超過一分鐘之後,FortiGate 主動送出的 DPD(Dead Peer Detection)探測封包,仍然完整送達用戶端的網卡。這證實封包在網路路徑上完全沒有遺失,問題出在用戶端內部,不是網路傳輸層。

用戶端內部到底發生了什麼事

網路層排除之後,只能往 FortiClient 內部挖。開啟 Debug 等級日誌後,找到兩個關鍵線索:

  1. 狀態機日誌顯示 FortiClient 內部會先進入一個 Compliance Check 狀態,等待約 7 秒後,主行程會對負責 IPsec 協商的獨立子行程送出一個「關閉」訊息——這個時間點竟然略早於 FortiGate 端完成金鑰交換的時間,代表協商行程在收到關閉指令之後才完成協商,於是 FortiGate 端看到「成功」,FortiClient 上層卻已經判定「失敗」。
  2. 結構化安全事件日誌(forticlientlog.log)第一次給出明確的錯誤訊息:
   IKE phase1 authentication fail as peer's certificate is not verified

用戶端在驗證 FortiGate 回傳的憑證時失敗了——這才是真正的根因線索。

根因:同一台設備,兩張分屬不同 CA 鏈的出廠憑證

把 Gateway A 與 Gateway B 實際協商時送出的憑證抓下來比對(openssl 解析),發現:

項目Gateway A 的出廠憑證(失敗)Gateway B 的出廠憑證(正常)
Subject CNFGT60FTxxxxxxxxFG201ETxxxxxxxx
Issuer CNfortinet-subca2001support
有效期至20562038

兩台設備的出廠憑證,簽發 CA 完全不同——一個走較新的中繼 CA 鏈(fortinet-subca2001),一個走較舊的 CA(support)。用戶端 Windows 電腦的信任存放區裡剛好只信任舊的那條鏈,所以連線 Gateway A 時,憑證驗證必定失敗;連線 Gateway B 則因為剛好信任那條舊鏈而成功。

更有趣的是:Gateway A 這台設備上,其實同時內建了另一張出廠憑證,走的正是與 Gateway B 相同的舊 CA 鏈,Subject CN 與原本那張完全相同(代表是同一台設備)、簽發日期也相同——證實同一台設備出廠時就準備了兩條不同世代的憑證鏈,只是預設用的是比較新的那條。

進一步查了 FortiClient 的連線設定檔,發現它在驗證對方憑證時,並沒有自己另外維護一份信任清單,而是直接呼叫 Windows 作業系統本身的憑證存放區。也就是說,問題根源其實是「這台電腦的憑證信任清單」,不是 FortiClient 軟體本身的缺陷。

原廠回覆:官方證實的憑證架構差異

把這個發現拿去問原廠支援,得到的答覆正式確認了背後的邏輯:

  • 較新機型:具備中繼 CA 與根 CA 的完整架構,出廠憑證由中繼 CA 簽發,有效期到 2056 年;同時保留一張較舊架構的備用憑證,有效期到 2038 年。
  • 較舊機型:沒有中繼 CA,出廠憑證直接由根 CA 簽發,有效期到 2038 年——這張憑證與新機型上的備用憑證屬於同一套(舊式)體系。

這完全解釋了觀察到的現象:新一代設備預設用的是新憑證鏈,用戶端電腦如果只信任舊鏈,接上新機型時就會踩到這個坑。

兩種解法,各有取捨

排查到這裡,實際驗證出兩種都可行的解法:

方案一:直接切換到設備上內建的舊鏈憑證

操作最簡單,改一行設定即可:

set certificate "備用憑證名稱"

缺點是這張備用憑證有效期較短(2038 年到期),而且只解決了這一台設備,換一台新設備仍可能重演同樣問題。

方案二:在用戶端電腦補齊完整信任鏈

保留原本效期更長的出廠憑證不變,改成在用戶端電腦安裝完整的信任鏈。解析憑證的 Authority Key Identifier 延伸欄位,可以反推出完整鏈是三層:裝置憑證 → 中繼 CA → 根 CA。原廠支援確認可以直接從 FortiGate GUI 的「System > Certificates」頁面,在 CA 憑證清單裡點兩下目標憑證即可下載。

取得中繼 CA 與根 CA 兩張憑證檔案後,分別匯入 Windows 的「中繼憑證授權單位」與「受信任的根憑證授權單位」存放區,原本無法驗證的出廠憑證就能正常通過驗證了——實際測試確認有效。

這個方案的好處是可以繼續使用效期更長的原廠憑證,而且往後不管接上任何一台使用同一條新版憑證鏈的設備,都不會再發生同樣的問題,算是比較治本的做法。

心得

這個案例最有意思的地方在於:FortiGate 端從頭到尾都顯示連線成功,SA 建立、金鑰交換全部正常,完全看不出任何異常;真正的失敗訊息只存在於用戶端的 Debug 等級日誌裡,而且還藏在一個平常很少人會去開的結構化安全事件日誌檔案裡。如果只看 FortiGate 端的 log,這個問題大概永遠找不到根因,只會一直懷疑網路、懷疑相容性、懷疑各種設定組合。

幾個帶得走的心得:

  • 遇到「伺服器端看起來成功、用戶端卻回報失敗」的情境,第一時間應該懷疑是用戶端內部邏輯判斷失敗,而不是一味在伺服器端或網路層打轉。
  • IPsec 憑證驗證失敗這種問題,光看 IKE debug log 往往看不到明確原因,一定要另外開用戶端軟體的 Debug 等級日誌才有機會抓到真正的錯誤訊息。
  • 同一款硬體、同一個廠牌,不代表出廠預設憑證用的是同一套信任體系——尤其是新舊世代交替的產品線,這種細節差異很容易被忽略。

2024年8月1日 星期四

Fortigate使用email啟用帳號二階段驗證(MFA)

 1.首先設定Fortigate的SMTP

config system email-server


       set reply-to {Sender_email_address}

       set server {SMTP_server_FQDN/IP}

       set port {SMTP_server_port_number}

       set authenticate {enable | disable}

       set username {username}

       set password {password_string}

       set security {none | starttls | smtps}

end


2.設定使用者啟用二階段驗證,以及驗證碼寄到哪個信箱。

這個設定只能使用CLI,GUI畫面只有Fortitoken cloud與Fortitoken選項

config user local

    edit {username}

       set type password

       set two-factor email

       set email-to {user_email_address}

       set passwd {password}

    next

end


config system admin

    edit "admin"

       set type password

       set two-factor email

       set email-to user_email_address

       set passwd password

    next

end


參考官方KB:

https://community.fortinet.com/t5/FortiGate/Technical-Tip-Email-Two-Factor-Authentication-on-FortiGate/ta-p/194890


2022年9月16日 星期五

Fortigate發送訊息到Line

 Fortigate如何訊息(比如管理員登出登入、VPN登出登入)透過LINE發送?

基本上就是兩項事情

1.IFTTT

2.Webhook

首先先到IFTTT註冊帳號,並關聯Line服務以及webhook

底下是參考截圖


Line Notify 提供三個 Vaule: Value1、Value2 、 Value3
Recipient 下拉選單可以看到自己的 Line 群組清單,所以可以指定發送訊息到什麼群組內

網址後馬賽克的內容就是金鑰,請不要外流,外流的話就可以透過你的 LINE Notify 發訊息給你(好像也還好XD)




底下是Fortigate的設定部分

Security Fabric > Automation >


URL就是Webhook給你的那一串網址


上圖就是結果~~~



還有注意一點,如果有設定alertmail的,請記得拿掉告警等級,這個會影響Automation
這個也是跟原廠Support找好久才找到原因.....

config alertemail setting
set username "XXX@.com.tw"
set mailto1 "XX@.com.tw"
set filter-mode threshold
set severity critical
end

Fortianalyzer沒有像Fortigate這種設定方式....希望未來可以支援~



2021年11月11日 星期四

Fortigate 有連線到208.91.112.55的阻擋紀錄

 最近檢查Fortigate的IPS log,發現到有主機連線到208.91.112.55的阻擋紀錄。


查詢208.91.112.55,發現是屬於Fortinet的。


實際瀏覽器連,結果跳出Fortigate的Block頁面(非Fortigate設備上的,而是Fortinet架設在Internet上)。

Goolge得知,原來這個是Fortigate DNS filter 的功能,有問題的就Redirect Portal。

回來檢查DNS filter的Log,的確有看到redirect的紀錄。

其實在DNS filter的設定就可以看到208.91.112.55這個IP了。


最後總結,當用戶端想被植入可疑檔案後,想要連線到特定域名,需要問詢問DNS取得IP。
這個時候,如果有啟用DNS filter就會被Fortigate redirect到208.91.112.55。
可疑檔案取得解析後IP,就會連線到208.91.112.55,而這個連線行為,就被Fortigate的IPS偵測到有問題,最後被阻擋。
才會有連線到Fortinet的IP,結果被自己家的IPS阻擋的狀況.....。

為什麼DNS filter不是阻擋而是用redirect的做法改天來問問廠商......







2018年9月12日 星期三

Fortigate 登出自動備份

參考原廠KB
http://kb.fortinet.com/kb/viewContent.do?externalId=FD38725&sliceId=1


# config system global
# set revision-backup-on-logout enable
# end

 可以登出自動本機備份設定,設定比對

不懂為什麼預設是關閉的~"~

2018年2月14日 星期三

Asymmetric routing 非對稱路由

config system settings
set asymroute enable
end
有vdom狀況下
config vdom
edit <vdom_name>
config system settings
set asymroute enable
end
end

If you enable asymmetric routing, antivirus and intrusion prevention systems will not be effective. Your FortiGate unit will be unaware of connections and treat each packet individually. It will become a stateless firewall.

http://help.fortinet.com/fos50hlp/54/Content/FortiOS/fortigate-networking-54/Interfaces/VLANs/Asymmetric%20routing.htm



2018年1月7日 星期日

Fortigate Application control



signature檢查流量時,Port也是其中的選項之一。





所以當程式改變預設使用的Port的時候,Fortiguard提供的signature就會無法識別出來。



2017年12月18日 星期一

Fortigate interface ping不到

服務都正常,但是從core switch去ping對點的fortigate interface,就是ping不到。
不管我core switch帶哪個source ip都一樣。

fortigate抓封包看有接收到,但fortigate就是沒回。

後來爬文爬到下面這篇KB。

http://kb.fortinet.com/kb/documentLink.do?externalID=10876


原來是有啟用thrust host,導致thrust IP以外的IP都沒辦法ping到......。

解決方式就是額外創建一個帳號,不設定thrust IP(或是設定成可以ping過去的網段)。
再將使用者權限調整成最低。

2017年11月6日 星期一

Fortigate HA Active-standby腳色切換

Fortigate HA Active-standby腳色切換。
除了將其中一台拔port(有監控的介面),或是關機(重開)。
還可以在Active那台輸入:
diag sys ha reset-uptime

這樣原本Active那台的ha uptime就會被reset,變成比standby的那台低。
腳色就會切換。

可參考底下原廠的圖

2017年10月13日 星期五

Fortigate Virtual ip(VIP)注意事項

底下是原本的設定


原本狀況去ping 192.168.154.254 or 2.2.2.1(模擬外網)都正常。

後來有需求說要從其他的內網(r4之後的網路)要連到Fortigate port1的10.20.20.x/24網段。

所以我就新增VIP與Policy如下圖


然後就發現到外網就斷了。
sniffer發現有去無回

debug看被NAT成VIP的IP了

詢問前輩,問題就出在VIP在建立的時候我選擇Any,這樣是不正確的。
後來就改成只會在Port2出現後就正常了。

有VIP 一定match VIP 來進行。
如果在建立VIP時選擇any,表示這VIP都可以在任何interface都生效。
就有可能導致source NAT時帶的是VIP的IP,但這IP不是在該介面身上,導致防火牆sniffer有去無回的狀況。

2017年9月24日 星期日

Fortigate Hardware Quick Inspection Package(HQIP)測試

Fortigate 可以Hardware Quick Inspection Package(HQIP)自我檢測硬體。
首先要到https://support.fortinet.com 去下載 HQIP Images。
需要輸入設備序號後會提供下載檔案,如:FGT_600D-HQIP.3.4.2.2190.OUT。

然後Fortigate console接好,開機。
出現"Press any key to display configuration menu..."時按任何按鍵中斷開機程序。
[C]:  Configure TFTP parameters.
[R]:  Review TFTP parameters.
[T]:  Initiate TFTP firmware transfer.
[F]:  Format boot device.
[B]:  Boot with backup firmware and set as default.
[I]:  System configuration and information.
[Q]:  Quit menu and continue to boot.

[H]:  Display this list of options.

Enter C,R,T,F,B,I,Q,or H:

Enter C,R,T,F,B,I,Q,or H:G
Enter remote TFTP server IP address [192.168.1.168]:192.168.1.100
Enter local IP address [192.168.1.64]:192.168.1.111
Enter firmware file name [FGT_600D-HQIP.3.4.2.2190.out]:FGT_600D-HQIP.3.4.2.2190.out

準備好TFTP SERVER上傳FGT_600D-HQIP.3.4.2.2190.out。

###################
Total 20883984 bytes data downloaded.
Verifying the integrity of the firmware image.

Total 65536kB unzipped.
Save as Default firmware/Backup firmware/Run image without saving:[D/B/R]?R
................................................................
Reading boot image 4698251 bytes.
Initializing firewall...


System is started.


Please press Enter to activate this console. 
FORTITEST/FGT6HD3916804672 ~# diag hqip start

打完diag hqip start就會開始檢測,建議開機前就把網路線插好,
如Port1 接 Port2、Port3 接 Port4。
最後就會顯示硬體自我檢測狀況。

2017年9月14日 星期四

Fortigate OSPF 筆記

跟前輩請教依些有關Fortigate OSPF的東西,筆記一下。

1. OSPF底下的Interface,可設可不設。如果有要設定type or interval就需要。

type > network-type point-to-point, point-multipoint  (CLI下修改)

Interval >  hello interval ,dead interval

2.如果要設定如cisco的passive -interface ,就要到CLI下

config router ospf
append passive-interface 介面




2017年6月22日 星期四

Fortigate Forward Traffic Log不多

這問題比較常在小module身上。
在Fortiview有看到LOG,可是在Forward traffic沒看到幾個。

到CLI下,
config log memory filter


set severity information 

(原本是warning)

end


這樣就可以在Forward Traffic底下看到了。

不過可能是因為小module的Fortigate都是把log放在memory,不想浪費太多資源,所以才把紀錄設定的等級調得比較高。


2017年6月21日 星期三

Fortigate link-monitor 5.4

Fortigate 5.2的時候,GUI有個link-monitor的功能,可以偵測線路狀況。
5.4的時候,GUI就找不到了,原廠似乎建議使用WAN link load balancing功能去做。

不過link-monitor在CLI還是存在著,指令如下:

config system link-monitor
    edit "port2"
        set srcintf "port2"
        set server "1.1.1.2"
        set protocol ping
        set gateway-ip 1.1.1.2
        set source-ip 0.0.0.0
        set interval 5
        set timeout 1
        set failtime 5
        set recoverytime 5
        set ha-priority 1
        set update-cascade-interface disable
        set update-static-route enable
        set status enable
    next
    edit "port3"
        set srcintf "port3"
        set server "2.2.2.2"
        set protocol ping
        set gateway-ip 2.2.2.2
        set source-ip 0.0.0.0
        set interval 5
        set timeout 1
        set failtime 5
        set recoverytime 5
        set ha-priority 1
        set update-cascade-interface disable
        set update-static-route enable
        set status enable
    next
end

2017年5月18日 星期四

Fortigate Poicy Route

紀錄一下

1.沒有longest mask matching,Policy Route權限最大。

所以如果有一筆Policy Route 是 DMZ > WAN,0.0.0.0/0。這樣會全部流量都走WAN出去,就算static route有路由往Lan,還是不會走。
解決方式為新增一筆Policy Route,source and destination 就輸入想要的,下面Action選擇Stop Policy Routing。並將此條往上拉,這樣就不會看Policy Route,而是看Static route了。

2.Routing Table沒有的,Policy Route 不會生效。

2017年5月4日 星期四

Fortigate Block Youtube

LAB了一個上午.....
當然有web filter最快。
如果要用Application control去阻擋。
除了Youtube相關要Block,QUIC的服務也要Block。
如果沒有擋QUIC,Chrome開youtube還是正常。
擋QUIC除了Youtube還會有啥影響,測試了一個上午還沒遇到。

2017年3月29日 星期三

Fortigate 60C WAN Load Balance LAB

紀錄一下
1.要做load balane的兩條WAN,要先把相關的policy與route先移除掉。

2.System > Network > WAN Link Load Balancing. Weighted Round Robin
然後輸入對點與偵測對點存活的設定。


3.設定路由,預設路由往Load Balance的介面丟。

4.設定policy,原本outgoing interface是WAN1或WAN2,變更成Load Balance介面。



2017年1月17日 星期二

Fortigate 在 Transparent mode 時,兩邊設備用trunk port

參考fortinet KB文件


兩邊要通過的VLAN,在Fortigate上面也要起一樣的vlan interface。

只是一個vlan name只能在一個port上。

所以要新增兩個vlan 100的interface:vlan100inte、vlan100ext。

policy要用vlan interface去新增,或是直接in and out interface選擇any。

要允許或阻擋再用ip去做就好。

Fortigate HA CLI切換設備登入

CLI指令

execute ha manage ?

之後會帶ID 0 or 1

execute ha manage 1

之後就會切換到另外一台,再輸入帳密就可以登入


2016年6月2日 星期四

Fortigate trusted hosts only(受信任主機)

1.要啟用只有受信任主機才能訪問到管理頁面,要全部帳號都要啟用"

2.如果只有部分帳號有啟用,會變成可以訪問管理頁,但只有受信任的host與帳號雙方都有符合到才能登入。