Fortigate-教學(12) SSL VPN (Client VPN)

大軒軒
15 min readJan 22, 2024

--

Fortigate Client VPN 適合小公司使用,終端設備可適用在 Android、IOS、windows 和 Linux。
可以保護離開公司的員工使用加密連線連回公司,並使用 Private IP 連結公司資源,就如在辦公室內。

此篇目標:

  • 啟動 SSL VPN
  • 設定 SSL VPN
  • 建立 Split Tunneling

此篇假設讀者已熟悉網段 (network, subnetwork)、遮罩 (netmask)、路由

目錄:

  • Fortigate SSL VPN 說明
  • FortiClient 下載位置
  • FortiToken
  • 啟動 SSL VPN
  • 建立帳號的群組
  • 建立本機帳號
  • 建立 SSL VPN 防火牆規則
  • Portal 的設定
  • SSL VPN 取得的 IP
  • 依照不同入口介面給予不同 IP
  • Split DNS
  • SSL VPN 的路由
  • DTLS (Datagram TLS)

Fortigate SSL VPN 說明

自己使用的時間不長,尚未碰到不良情況,但同事常常反應會斷線,因此建議在經費、使用時間短、人數不多的環境下可以使用。
條件允許下建議買中華電信 VPN 方案或其他商業 SSL VPN 品牌,如 ivanti

Fortigate 的 SSL VPN 分兩部分
一個是 Fortigate,作為 Server 端,幾乎全部的設定在此完成
一個是 FortiClient,作為 Client 端,這邊只會提到其中一個功能,VPN

FortiClient 作為端點防護,結合多種設備,有 Forti 雲端和 Fortigate 等,用意是將安全邊界擴張到最遠的終端用戶。

在過去 Fortigate 的 SSL VPN 有 10 個同時連線數的上限,現在似乎取消其限制,改成 FortiClient 完整功能才要 License,單純的 VPN 功能免費提供

SSL VPN 分成兩種模式

Tunnel mode

文章主要描述此方法

用戶要在終端裝置安裝 FortiClient,使用 VPN 功能連到 Fortigate,Fortigate 會派發一個指定好的 IP 給用戶,此時用戶如同在辦公室,可以使用 Private IP 連到公司資源,同時這些流量也會受到 Fortigate 的防火牆規則和路由限制

Web mode

Fortigate 有一個專屬 SSL VPN 的頁面並提供指定的應用程式服務,用戶使用網頁連結,把 Fortigate 當作跳板。

指定的應用程式有 HTTP/HTTPS, Telnet, FTP, SMB/CIFS, VNC, RDP, 和 SSH,如果要瀏覽的網頁使用複雜渲染技術,可能會有顯示的問題

FortiClient 下載位置

請依照自己的裝置選擇下載的軟體,這個是 VPN ONLY 的版本

Product Downloads | Fortinet Product Downloads | Support

操作過程不難,請參考官方網站進行安裝和設定

Connecting from FortiClient VPN client | FortiGate / FortiOS 7.0.0 | Fortinet Document Library

FortiToken

FortiToken 是 OTP (One-Time Password),有分軟體 (app) 和硬體,Fortinet 提供的雙因素驗證(MFA),沒有 License 的狀態下可以有兩個免費的軟體 (app) token,超過就要買授權

啟動 SSL VPN

完成指定的設定才能啟動 SSL VPN,都設定完後才能在防火牆規則的 Interface 看到 "SSL-VPN tunnel interface (ssl.root)" 這個介面

此處的設定屬於全域 (Global) 設定,代表所有 SSL VPN 都會受影響

VPN -> SSL-VPN Settings

  • Listen on Interface
    那些介面可以接收 SSL VPN 的連線請求,如果介面有多個 IP,這個介面的全部 IP 都可以接受請求
  • Listen on Port
    SSL VPN 連線的 Port 號,預設的 443 會跟控制 Fortigate 的網頁所使用的 Port 衝突,個人習慣使用 10443
  • Server Certificate
    用來建立 SSL VPN 的憑證,預設只有 Fortinet_Factory 這個憑證可以使用,這是 Fortigate 的自簽憑證
    可以在 system -> certificate 匯入自己的憑證
  • Authentication / Portal Mapping
    使用者群組和 Portal 的配對,Portal 用來設定連入的方式和 FortiClient 的行為

以上設定完後 SSL VPN 才會生效。

其他的設定說明

  • Restrict Access
    限制可以連進來的 IP
    通常用在限制國家,先到 Policy & Objects -> Addresses
    建立一個 Type 為 Geography,選擇可以連入的地區
    再回到這裡設定可以連入的 address
  • Idle Logout
    多久沒有傳送流量到 SSL VPN,會自動切斷連線
  • Address Range
    指定 SSL VPN 連線成功後會取得的 IP,預設使用 Portal 的設定,可使用指令修改。下面有詳細說明。
    先到 Policy & Objects -> Addresses
    建立一個 Type 為 IP Range,範圍就是發送 IP 的範圍
  • DNS Server
    成功連上 SSL VPN 後,Client 端所使用的 DNS。
    調整此處會引響全部的 SSL VPN,如果 Portal 有設定,會優先使用 Portal 的設定。
    Same as client system DNS — 連上 SSL VPN 後,DNS 不變
    Specify — 指定特定的 DNS 主機

建立帳號的群組

User & Authentication -> User Groups -> Create New

Type 選 “Firewall”

建立本機帳號

SSL VPN 的帳號支援多種驗證方式,LDAP、RADIUS等,這邊描述最簡單的 Local 帳號。

User & Authentication -> User Definition -> Create New -> Local

輸入帳密,下一步的雙因素驗證保留 disable
最後一步啟用 User Group,選擇上面的群組

建立 SSL VPN 的防火牆規則

Policy & Objects -> Firewall Policy

Incoming Interface 使用 SSL-VPN 的介面,以前稱為 ssl.root
Source 欄位一定要同時有 SSL VPN 使用者的群組或帳號和來源 IP
NAT 一定要取消

剩下的設定與一般設定 Policy 一樣

PS: 如果 Interface 找不到 “SSL-VPN tunnel interface (ssl.root)”,代表 SSL VPN 還沒設定好。

到此 SSL VPN 設定完畢,現在應該可以使用 FortiClient 連上 SSL VPN。

請不要在內網使用 FortiClient 嘗試連上 SSL VPN,請改用手機分享 WIFI 的方式進行測試。

Portal 的設定

Portal 專門設定 FortiClient 可以做的事情,也是設定 Web 版 SSL VPN 的地方。

  • Split tunneling
    SSL VPN 路由的設定,下面會有詳細的描述
  • Source IP Pools
    SSL VPN 連線成功後會取得的 IP 範圍,預設使用 Portal 的設定,可告指令修改。下面有詳細說明
  • Allow client to save password
    允許用戶在 FortiClient 的 VPN 設定上儲存密碼,以後不用再打密碼
    設定後 FortiClient 會多一個選項, Save Password
  • Allow client to connect automatically
    上面的設定會強制啟動,允許自動連線
    設定後 FortiClient 會多一個選項, Auto Connect
  • Allow client to keep connections alive
    Allow client to save password會強制啟動
    設定後 FortiClient 會多一個選項, Always Up
  • DNS Split Tunneling
    DNS 會依照不同網址使用不同的 DNS,會在底下詳細描述

Portal 新增完後,記得到 VPN -> SSL-VPN Settings -> Authentication / Portal Mapping,將新的 Portal 綁上去。

SSL VPN 取得的 IP

預設狀態,SSL VPN 連線成功後,會優先使用 Portal 裡面 Source IP Pools,使用底下的指令後,會改為使用 SSL-VPN Settings 的 Address Range

config vpn ssl settings
set tunnel-addr-assigned-method round-robin
end

依照不同入口介面給予不同 IP

如果公司有兩條外線,一條中華,一條遠傳,可以設計成中華進來的拿10.10.10.0,遠傳進來的拿 10.10.20.0

首先建立兩個新 Portal,Source IP Pools 請使用不同的 IP 範圍

先檢查那幾個編號使用過

show vpn ssl settings

config vpn ssl settings
set servercert "Fortinet_Factory"
set tunnel-ip-pools "SSLVPN_TUNNEL_ADDR1"
set tunnel-ipv6-pools "SSLVPN_TUNNEL_IPv6_ADDR1"
set dns-server1 10.1.1.1
set source-interface "port3"
set source-address "all"
set source-address6 "all"
set default-portal "full-access"
config authentication-rule
edit 1 # 請確認已使用的編號
set source-interface "port3"
set source-address "all"
set groups "SSLVPN_GROUP"
set portal "full-access"
next
end
end

開啟指令模式,使用 CLI 設定

config vpn ssl settings
config authentication-rule
edit 2 # 請使用新編號
set groups "SSL_GROUP" # 連線進來的本機帳號群組
set portal "first-portal" # 前面步驟新建的 Portal
set source-interface "port3" # 主要設定,限制不同介面使用不同 Portal
set source-address "all"
# 必要設定,設定 source-interface 後依定要設定,指定來源 IP,建議使用 all
next
edit 3
set groups "SSL_GROUP"
set portal "second-portal"
set source-interface "port4"
set source-address "all"
next
end
end

Split DNS

特定 Domain 使用指定的 DNS 進行解析

想像底下兩種狀況同時發生

當公司使用私人的網域名稱,如 mycom.local
DNS 指向公共的 DNS 主機會無法解析,因此需要在連上 SSL VPN 後,將 DNS 指到公司內

公司的 DNS 主機不能解析外部的網域名稱
上 google, youtube 這些網站,使用公司 DNS 無法解析,因此又不能將全部的網域交給公司 DNS 解析

當同時發生上面兩種狀況時,便需要一情況使用不同的 DNS,只有特定網域才使用公司 DNS,其他的網域使用公共 DNS 主機

設定方式分成 DNS 後綴 (suffix) 和指定 Domain

DNS 後綴 (suffix)

這種設定方式只能用 CLI

公司有非常多網址時,適合此種方式,但後綴都相同
如 www.mycom.local,mail.mycom.local 等, suffix 都是 mycom.local

config vpn ssl web portal
edit "full-access" # 這邊是 portal 的名稱
set dns-suffix mycom.local
set dns-server1 10.1.1.1
set dns-server2 10.1.1.2
next
end

指定 Domain

只有指定的網址才會進到公司解析

VPN -> SSL VPN Portals,建立新的或選擇以存在的 Portal

打勾 DNS Split Tunneling,並新增 DNS。
不同的 Domain 可以設定不同的 DNS 主機

SSL VPN 的路由

當 Clinet 成功建立 SSL VPN 後,Fortigate 會傳送新的路由進來,依照設定的不同,送進來的路由不同。

windows 可以用 route print 指令檢查即時路由
Linux 可用 ip route

分類有

  • Fully Tunnel
    全部的流量,包含上 youtube 等流量都會先回到公司,再從公司出去,優點是全部流量都會經過防火牆規則,缺點是會大大提高公司流量。
  • Split Tunnel
    只有指定的網段,其流量會走 VPN 回到公司,其他沒有指定的流量直接透由中華電信進到網際網路。現在的版本預設開啟 split tunnel,建議使用此方式。

Full Tunnel

全部流量都進公司
設定非常簡單,但不建議使用,會增加公司流量。

VPN -> SSL VPN Portals,建立新的或選擇以存在的 Portal

Split tunneling 選 Disabled

Split Tunnel

部分流量進公司,其他流量直接進網際網路不會經過公司,有三種設定情境
在 VPN -> SSL VPN Portals,建立新的或選擇以存在的 Portal

Enabled Based on Policy Destination 並且
Routing Address Override 留空

有 SSL VPN 的防火牆規則中,Destination 的位置會送到SSL VPN,,其他流量直接進到網際網路。
只有這個方法可以設定目的地路由地位置是 FQDN。只要在防火牆規則上的 Destination 使用 FQDN 即可,其他的 Split Tunnel 不支援 FQDN 的路由配置
PS: 走 SSL VPN 的意思是,流量會回到公司

Enabled Based on Policy Destination 並設定
Routing Address Override

Routing Address Override 的位置會送到SSL VPN,其他流量直接進到網際網路,建議使用此方式。

Enabled for Trusted Destinations 並一定要設定
Routing Address Override

剛好跟上面的相反,Routing Address Override 所指定的是送到網際路網,不在 Routing Address Override 內的通通送到 SSL VPN

建議的設定方式為,Enabled Based on Policy Destination
設定 Routing Address Override,裡面放公司的網段

DTLS (Datagram TLS)

Fortigate 的 TLS 使用 TCP 建立 SSL VPN 連線,並把原始的封包加密後放在 TLS 裡面,而原始封包如果也是 TCP,就會變成 TCP-in-TCP 的模式。

因為 TCP 有各種的錯誤檢查機制,有時可能是 TLS 的 TCP 出錯,有時候可能是包在裡面的 TCP 出錯,造成效率降低。

因此將 TLS 的 TCP 改成 UDP,這個技術就是 DTLS

設定 DTLS 分兩個部分,客戶端和伺服器端,兩邊都要設定才會生效

伺服器端 (Fortigate)

config vpn ssl setting
set dtls-tunnel enable
end

客戶端

打勾 Preferred DTLS Tunnel

--

--