前言
公司使用微软的AD域,现在需要和飞塔VPN进行连接,其主要目的是为AD用户提供单一登录(SSO)访问权限。
反过来看整体的设置是比较简单的,主要是记录设置的过程以及排错方法,最主要还是它的拓展性,微软AD域不仅仅能连接飞塔防火墙的单点登录,其他系统的认证也能进行关联,例如OpenVpn;飞塔防火墙的单点登录应该也能连接Windows AD域。
域服务器设置
配置 Microsoft Entra SSO
ADFS(Active Directory 联合身份验证服务是一项需要单独安装在 AD 服务器上的功能)可以配合FortiGate实现SAML认证。Windows AD域安装ADFS的方法:防火墙用户与SSL VPN SAML认证(Windows ADFS) · FortiGate产品实施一本通FortiOS 7
由于我用的是微软的AD域,需要登录到Microsoft Entra 管理中心配置 Microsoft Entra SSO,具体看官方文档:
- Azure SAML authentification for FortiGate SSL VPN (with Azure MFA) — СЮМ
- Configuring SAML SSO login for SSL VPN with Entra ID acting as SAML IdP | FortiGate Public Cloud 7.6.0 | Fortinet Document Library
- Configure FortiGate SSL VPN for Single sign-on with Microsoft Entra ID – Microsoft Entra ID | Microsoft Learn
基本SMAL配置:
- Identifier:
https://<FortiGate IP or FQDN address>:<Custom SSL VPN port>/remote/saml/metadata - Reply URL:
https://<FortiGate IP or FQDN address>:<Custom SSL VPN port>/remote/saml/login - Sign on URL:
https://<FortiGate IP or FQDN address>:<Custom SSL VPN port>/remote/saml/login - Logout URL:
https://<FortiGate IP or FQDN address>:<Custom SSL VPN port><FQDN>/remote/saml/logout

其中<FortiGate IP or FQDN address>:<Custom SSL VPN port>需要和飞塔防火墙的SSL-VPN设置保持一致,当然用域名是最好的,可以申请SSL证书,我使用的IP+端口,客户端连接VPN会报错,需要连两次才能成功,虽然不影响使用,操作上还是不符合常理的。

附加 SAML 属性:

保存信息,还要设置用户组权限,这里不做讲解,因为没有后台管理权限。
导出证书
在“使用 SAML 设置单点登录”页面的“SAML 签名证书”部分中,选择“证书 (Base64)”旁边的“下载”链接以下载证书并将其保存在您的计算机上。
最后将以下idp配置URL复制下来:
- idp-Login URL:
https://login.microsoftonline.com/88c3e3b5-abdd-4476-b47a-f563a26aae98/saml2 - idp-Microsoft Entra ID Identifier:
https://sts.windows.net/88c3e3b5-abdd-4476-b47a-f563a26aae98/ - idp-Logout URL:
https://login.microsoftonline.com/88c3e3b5-abdd-4476-b47a-f563a26aae98/saml2

飞塔防火墙设置
导入证书
将上面保存的证书文件导入到防火墙中,类型选远程证书:

新建SSO连接
根据Microsoft Entra SSO的设置参数,新建SSO连接,参数对应关系(参考配置图)AD——SSO:
- Identifier——-entity-id
- Reply URL——-single-sign-on-url
- Logout URL——-single-logout-url
- idp-Microsoft Entra ID Identifier——-idp-entity-id
- idp-Login URL——-idp-single-sign-on-url
- idp-Logout URL——-idp-single-logout-url
- Base64 SAML 证书名称 (REMOTE_Cert_N)——-idp-cert


为了避免混淆,建议参照官方的属性对照表:

还有一个点需要注意,新建SSO连接时,Service Provider Configuration这里的配置默认是无法修改的,可以看到这和官方文档的参数是不同的,可能是防火墙版本的原因,如果要修改,需要进入命令行界面。
config user saml
edit SSO名称

域名访问
上面设置VPN连接时使用的是IP地址,所以导致客户端连接时会提示连接不安全,IP地址是没有办法申请SSL证书的,所以就需要使用域名进行访问。

首先在腾讯云或阿里云添加一条解析记录,vpn.example.com指向VPN的IP地址,然后申请一个90天的免费证书(有很多那种可以自签证书的系统,到期会自动续签,我暂时还没有接触过),把证书下载下来。方式有很多种,我选择的是其他。

解压出来如下图:

将证书导入到防火墙,防火墙版本不一样导入方式可能会有差异:



在SSL-VPN设置里面修改服务器证书,选择域名证书。

将单点登录的设置也改成域名

最后修改一下微软域的Microsoft Entra SSO设置,将IP替换成域名,SSO证书不用重新下载导入也可以,浏览器访问验证通过。

故障排查
我觉得认真查看官方文档进行设置是没什么太大难度的,最重要的是要对报错日志的排查,记录一下排查的一些命令。
按照官方文档,单点登录连接域用户需要网络是通的,我不太确定域IP要和VPN公网IP连通,还是和防火墙管理地址连通,以下是ping测的命令:
FortiGate 的 execute ping 默认用“出接口的地址”作源 IP。对路由指向 IPsec 接口时,这个“接口”一般是个虚拟口(无 IP),于是 FortiGate 会选别的源地址(比如 WAN 口或某个系统地址),不是 172.16.73.1。
指定源地址再 ping:
execute ping-options source 172.16.73.1
execute ping 10.220.127.39
测试完毕后重置 ping-options(否则后续 ping 会一直带指定源)
execute ping-options reset
防火墙日志采集命令:
diagnose debug reset
# SAML 报错、Token 验证、跳转异常
diagnose debug application samld -1
# 登录、断线、IP 分配、重定向问题
diagnose debug application sslvpn -1
# 用户密码错误/连接 AD 失败
diagnose debug application fnbamd -1
diagnose debug enable
其他命令:
# 查看VPN在线用户信息
execute vpn sslvpn list
# 查看saml配置
show user saml saml名称










