防火墙用户与SSL VPN SAML认证(Windows ADFS)

网络需求

ADFS(Active Directory Federation Service),Active Directory 联合身份验证服务是一项需要单独安装在 AD 服务器上的功能。其主要目的是为AD用户提供单一登录(SSO)访问权限。

ADFS可以配合FortiGate实现SAML认证,本文详细介绍了FortiGate代理策略认证与Windows Server 2019 ADFS配合做SAML认证的配置,本例中Fortigate作为SAML SP(Service Provider), ADFS作为SAML IDP(Identity Provider)。

网络拓扑

dstuser

  1. FortiGate作为SP,Windows Server安装ADFS服务后作为IDP。
  2. FortiGate和Client将DNS服务器地址配置为Windows Server的IP。

配置步骤

防火墙策略用户SAML认证

Windows Server端配置

  1. 在Windows Server中安装AD域控,加入或新建AD域。
  2. 在服务器配置中,安装Windows ADFS服务。
  3. Client为AD用户。

    Untitled

  4. 安装完成后,通过Server Manager -> Tools -> AD FS Management打开ADFS管理器,并点击Relying Party Trust,点击右侧的Add Relying Party Trust按钮添加信任方。

    Untitled_1

  5. 弹出向导界面,这里选择感知方式,由于配合的是外部的FortiGate,需要选择Claims aware,点击Start。

    Untitled_2

  6. 数据源选择手动输入,点击Next。

    Untitled_3

  7. 直接点击Next。

    Untitled_4

  8. 选择SAML认证,并填写信赖方的metadata地址(FortiGate内网口的认证地址和端口号)。

    Untitled_5

  9. 配置信赖方identifier URL,这里填写和上步相同的URL,并点击Add。

    Untitled_6

  10. 访问控制策略选择允许所有人访问。

    Untitled_7

  11. 检查配置无误,点击Next。

    Untitled_8

  12. 点击Configure claims issuance policy for this application,点击Close。

    Untitled_9

  13. 在弹出的Claim规则中,选择模版为Send LDAP Attributes as Claims。

    Untitled_10

  14. 配置Claim规则,Attribute store选择Active Dictionary,如下图配置映射关系,点击Finish。

    Untitled_11

  15. 右键单击已创建的Relying Party Trust,点击Properties。

    Untitled_12

  16. 选择Endpoints选项卡,点击Add SAML按钮,Endpoint type选择SAML Assertion Consumer,Binding选择POST,Index修改为1,Trusted URL填写FortiGate内网口的SAML登陆URL。

    Untitled_13

  17. 再次新建一个SAML,Endpoint type选择SAML logout,Binding选择Redirect,Trusted URL填写FortiGate内网口的SAML登出URL,Response URL填写FortiGate的登出成功页面。

    Untitled_14

  18. Advance选项卡可以配置hash算法,默认为SHA256。

    Untitled_15

  19. 进入ADFS服务器管理器的Service→Certificates界面,选择Token-signing下的证书,导出该证书。

    Untitled_16

  20. 将该证书导入FortiGate的Remote Certificate中。

    Untitled_17

  21. 访问URL:https://<ADFS Domain name>/FederationMetadata/2007-06/FederationMetadata.xml,例如实验这台Windows Server的URL为https://win-8chjfpovf6r.summerice2019.com/FederationMetadata/2007-06/FederationMetadata.xml ,下载的XML文件中可以看到IDP相关信息,并记录。

FortiGate端配置

  1. 在FortiGate上配置SAML用户,配置SP和IDP信息,注意这里填写的SP信息要和ADFS中配置的Endpoints信息一致,IDP信息从XML文件中记录的得来,证书选择导入的ADFS的Remote Certificate,算法选择sha256。

     config user saml
         edit "adfs_saml_user"
             set entity-id "https://192.168.100.99:1000/remote/saml/metadata"
             set single-sign-on-url "https://192.168.100.99:1003/remote/saml/login"
             set single-logout-url "https://192.168.100.99:1003/remote/saml/logout"
             set idp-entity-id "http://WIN-8CHJFPOVF6R.summerice2019.com/adfs/services/trust"
             set idp-single-sign-on-url "https://WIN-8CHJFPOVF6R.summerice2019.com/adfs/ls/"
             set idp-single-logout-url "https://win-8chjfpovf6r.summerice2019.com/adfs/oauth2/logout"
             set idp-cert "REMOTE_Cert_1"
             set user-name "username"
             set digest-method sha256
         next
     end
    
  2. 创建用户组,将SAML用户加入用户组。

     config user group
         edit "adfs_saml_group"
             set member "adfs_saml_user"
         next
     end
    
  3. 在FortiGate的防火墙策略中引用该用户组。

     config firewall policy
         edit 1
             set srcintf "lan" "port20"
             set dstintf "port18" "port20"
             set action accept
             set srcaddr "all"
             set dstaddr "all"
             set schedule "always"
             set service "ALL"
             **set groups "adfs_saml_group"**
         next
     end
    

验证配置

  1. Client访问www.bilibili.com ,重定向到IDP弹出ADFS登录页面,使用SAML tracer可以看到SAML SP和IDP的具体URL。

    Untitled_20

  2. 输入帐号和密码,可以看到向SP URL POST了账户信息,登陆成功,正常弹出网页。

    Untitled_21

    Untitled_22

SSL VPN用户认证

Windows Server端配置

参考以上IDP、SP URL的端口号配置为SSL VPN端口号。

FortiGate端配置

参考以上IDP、SP URL的端口号改为SSL VPN端口,并使用SSL VPN引用该用户组即可。

config user saml
    edit "adfs_saml_user"
        set entity-id "https://192.168.100.99:10443/remote/saml/metadata/"
        set single-sign-on-url "https://192.168.100.99:10443/remote/saml/login"
        set single-logout-url "https://192.168.100.99:10443/remote/saml/logout/"
        set idp-entity-id "http://WIN-8CHJFPOVF6R.summerice2019.com/adfs/services/trust"
        set idp-single-sign-on-url "https://WIN-8CHJFPOVF6R.summerice2019.com/adfs/ls/"
        set idp-single-logout-url "https://win-8chjfpovf6r.summerice2019.com/adfs/oauth2/logout"
        set idp-cert "REMOTE_Cert_1"
        set user-name "username"
        set digest-method sha256
    next
end

验证配置

  1. 打开SSL VPN Web登陆界面,点击Single Sign-On。

    Untitled_23

  2. 重定向到IDP弹出ADFS登录页面,使用SAML tracer可以看到SAML SP和IDP的具体URL。

    Untitled_24

  3. 输入帐号和密码,可以看到向SP URL POST了账户信息,登陆成功,正常弹出SSL VPN资源页面。

    Untitled_25

  4. 登出SSL VPN,可以看到IDP登出成功,且正常弹出logoutok页面。

    Untitled_26

  5. 在FortiGate查看登陆用户。

    Untitled_27

  6. 使用FortiClient进行SSL VPN SAML认证。

    Untitled_28

  7. 弹出ADFS认证页,输入帐号密码。

    Untitled_29

  8. 登陆成功。

    Untitled_30

  9. 在防火墙上查看登陆用户。

    Untitled_31

注意事项

  1. 确保SAML IDP服务器的系统时间和客户端的时间一致,否则会认证失败,通过diagnose debug application samld -1可以看到该错误信息。

     __samld_sp_login_resp [859]: Clock skew tolerance: 21
    

    💡 7.0.4 GA开始支持配置Clock skew tolerance超时时间:

      config user saml
          edit <>
              set clock-tolerance <in seconds>           ( 0-300, 15 by default) 
          next
      end
    
  2. 如果客户端访问IDP需要穿过防火墙,需要在认证策略前配置一条去往IDP服务器的策略,并开启captive-portal-exempt。

     config firewall policy
         edit 2
             set srcintf "lan"
             set dstintf "port18"
             set action accept
             set srcaddr "all"
             set dstaddr "192.168.101.77/32"
             set schedule "always"
             set service "ALL"
             **set captive-portal-exempt enable**
         next
    
  3. 该错误表示FortiGate上的SP、IDP URL与ADFS中Endpoints中配置的URL不一致,需要检查配置。

    Untitled_32

  4. 该错误表示客户端未安装ADFS所属AD域的CA证书。

    Untitled_33

  5. 如果SAML弹出的登陆界面超时时间过短,来不及输入密码就过期了,可以通过以下命令修改超时时间。

     config system global
         set remoteauthtimeout 60    //Number of seconds that the FortiGate waits for responses from remote RADIUS, LDAP, or TACACS+ authentication servers. (1-300 sec, default = 5).
     end
    

Copyright © 2024 Fortinet Inc. All rights reserved. Powered by Fortinet TAC Team.
📲扫描下方二维码分享此页面👇
该页面修订于: 2024-03-20 10:56:35

results matching ""

    No results matching ""