FortiOS 5.2 LDAP 认证增强 -- 基于 SSL VPN 版本 1.0 时间 2015 年 9 月 支持的版本 5.2 状态 反馈 已审核 support_cn@fortinet.com 文档说明 : FortiOS 5.2 在 DLAP 认证功能上进行了增强, 可以基于 LDAP 目录结构中组的逻辑关系 进行查询, 支持基于多级组的 nested 关系进行认证 测试版本 :FortiOS 5.2.4 测试型号 : FortiGate60D 目录 1. 配置 LDAP 服务器... 2 2. FG 上配置用户... 2 2.1. 配置 LDAP 认证服务器... 2 2.2. 配置用户组... 3 3. SSL-VPN 界面... 5 4. SSL-VPN 设置... 6 5. 配置策略... 7 6. 认证测试... 8 6.1. 通过 dia deb application fnbamd -1 查看认证过程... 8 6.2. 修改 nested 参数... 9 7. Nested 搜索机制... 9 1 / 10 support.fortinet.com.cn
1. 配置 LDAP 服务器 在 LDAP 上建立用户组和用户名 : 用户 test 为组 ft 的成员, 组 ft 是组 g1 的成员 用户 user 为组 g1 的成员 用户和组的关系图如下 : 2. FG 上配置用户 2.1. 配置 LDAP 认证服务器 名称 :ldap, 自定义即可 服务器 /IP: LDAP 服务器的 ip 地址 192.168.1.202 服务器端口 : 默认 389. 2 / 10 support.fortinet.com.cn
普通名字 :cn 标识名字 : 点击右边的, 通过浏览 LDAP 数据结构来选择 绑定类型 : 常规 用户 DN, 密码 : ldap 服务器上的账号 配置完成后可以点击 按钮, 进行测试, 会显示是否成功 在命令行下添加 set search-type nested 命令, 来支持 nested 查询 config user ldap edit "ldap" set server "192.168.1.202" set cnid "cn" set dn "ou=user,dc=song,dc=com" set type regular set username "test" set password xxxxxxx set search-type nested // 组的 nested 结构查询, 多级迭代查询, 手动添加 next end 2.2. 配置用户组 建立名字为 SSL 的用户组,, 在下图中点 create new 按钮, 在 远程组 中添加 ldap 3 / 10 support.fortinet.com.cn
远程服务器选择刚刚建立的 ldap 服务器, 并在其 组 内选择 g1 组, 并点击 添加已选 添加结果如下 : CLI 脚本如下 : FG # show user group SSL config user group edit "SSL" set member "ldap" config match edit 1 set server-name "ldap" set group-name "CN=g1,OU=user,DC=song,DC=com" next end next end 4 / 10 support.fortinet.com.cn
3. SSL-VPN 界面 可以使用默认自带的 full-access, tunnel-access,web-access 界面, 也可以自己进行定义 启用隧道模式 : 选择该模式, 客户端从防火墙上获得 IP 地址, 与防火墙之间建立一个安全的 VPN 通道, 来访问内部网络资源 启用分隔隧道 : 客户端只有访问内部资源 路由地址 :192.168.1.0/24 的时候, 才会将流量发往 SSL VPN 通道, 其他网络流量依然通过本地连接, 拨入 VPN 后依然通过本地网络访问互联资源 源 IP 池 : 定义分配各客户端的 IP 地址范围 如需更改, 可以在防火墙对象菜单下修改 客户端选项 : 保存密码自动连接永远在线 ( 保持存活 ) 勾选相关选项之后,FortiClient 客户端上会出现相关的选项按钮, 如下图所示 : 5 / 10 support.fortinet.com.cn
4. SSL-VPN 设置 监听接口 : wan1, 在 wan1 开启 SSL VPN 功能, 端口监听 :SSL VPN 的访问端口, 默认为 443, 可以自定义, 本例修改为 10443 限制访问 : 对 SSL 访问的客户地址进行限制 服务器证书 : 使用默认证书, 企业也可以使用自有的 本地证书 隧道模式客户端设置 : 6 / 10 support.fortinet.com.cn
地址范围 : 自动分配地址认证 / Portal 映射在认证 /portal 映射中, 为不同的用户分配不同的 portal, 点击 新建, 添加页面如下 : 用户组选择 ssl, portal 选择 full-access 5. 配置策略 按如下方式建立 SSL VPN 的访问策略 : 流入端口 : SSL.root 源地址 : SSL 地址池 用户 : ssl 组 / 必须填写, 否则 VPN 无法工作 7 / 10 support.fortinet.com.cn
流出接口 : 内网 internal 目的地址 : internal 内部地址 其他选项根据需要配置 可以创建多条基于用户的认证策略, 根据用户组来进行细分, 为其分配不同的访问资源 6. 认证测试 6.1. 通过 dia deb application fnbamd -1 查看认证过程. fnbamd_ldap.c[525] start_next_dn_bind-trying DN 1:CN=test,OU=user,DC=song,DC=com fnbamd_ldap.c[1784] fnbamd_ldap_get_result-going to USERBIND state fnbamd_ldap.c[741] start_user_attrs_lookup-adding attr 'memberof' fnbamd_ldap.c[762] start_user_attrs_lookup-base:'cn=test,ou=user,dc=song,dc=com' filter:cn=* fnbamd_ldap.c[924] get_member_of_groups-get the memberof groups. fnbamd_ldap.c[956] get_member_of_groups- attr='memberof', found 2 values fnbamd_cfg.c[67] ldap_grp_list_add-added CN=ft1,OU=user,DC=song,DC=com fnbamd_ldap.c[965] get_member_of_groups-val[0]='cn=ft1,ou=user,dc=song,dc=com' fnbamd_cfg.c[67] ldap_grp_list_add-added CN=ft,OU=user,DC=song,DC=com fnbamd_ldap.c[965] get_member_of_groups-val[1]='cn=ft,ou=user,dc=song,dc=com' fnbamd_ldap.c[803] start_primary_group_lookup-starting check... fnbamd_ldap.c[807] start_primary_group_lookup-number of sub auths 5 fnbamd_ldap.c[825] start_primary_group_lookup-base:'ou=user,dc=song,dc=com' filt er:(&(objectclass=group)(objectsid=\01\05\00\00\00\00\00\05\15\00\00\00\bf\96\10 \46\f3\ca\b8\95\2b\46\f3\29\01\02\00\00)) fnbamd_ldap.c[1863] fnbamd_ldap_get_result-entering CHKPRIMARYGRP state fnbamd_ldap.c[885] start_nested_group_check-base:'ou=user,dc=song,dc=com' filter :(&(objectclass=group)( (distinguishedname=cn=ft1,ou=user,dc=song,dc=com)(distin guishedname=cn=ft,ou=user,dc=song,dc=com))) fnbamd_ldap.c[1634] fnbamd_ldap_get_result-not ready yet 8 / 10 support.fortinet.com.cn
fnbamd_ldap.c[1634] fnbamd_ldap_get_result-not ready yet fnbamd_cfg.c[67] ldap_grp_list_add-added CN=g1,OU=user,DC=song,DC=com fnbamd_ldap.c[847] get_nested_groups-attr='memberof' - found 0 values fnbamd_ldap.c[885] start_nested_group_check-base:'ou=user,dc=song,dc=com' filter :(&(objectclass=group)( (distinguishedname=cn=g1,ou=user,dc=song,dc=com))) fnbamd_ldap.c[1634] fnbamd_ldap_get_result-not ready yet fnbamd_ldap.c[847] get_nested_groups-attr='memberof' - found 0 values fnbamd_ldap.c[1896] fnbamd_ldap_get_result-auth accepted fnbamd_ldap.c[2014] fnbamd_ldap_get_result-going to DONE state res=0 fnbamd_ldap.c[136] ldap_copy_grp_list-copied CN=ft1,OU=user,DC=song,DC=com fnbamd_ldap.c[136] ldap_copy_grp_list-copied CN=ft,OU=user,DC=song,DC=com fnbamd_ldap.c[136] ldap_copy_grp_list-copied CN=g1,OU=user,DC=song,DC=com fnbamd_auth.c[2403] fnbamd_auth_poll_ldap-result for ldap svr 192.168.1.202 is SUCCESS 6.2. 修改 nested 参数 config user ldap edit "ldap" unset search-type end 修改参数后, 使用 test 账号登陆 SSL VPN 失败, 因为无法查询到该用户隶属于 g1 用户组 使用 user 账号可以登陆成功 7. Nested 搜索机制 在 5.2 版本之前, 防火墙仅仅会查询用户账号的 memberof 属性, 也就是仅能查询到该用户直接所属的组名称, 防火墙根据查询结果来进行用户验证 Nested 查询, 会根据查询的结果, 如 test 查询结果为属于 ft 组, 那么继续查询 ft 组所属的用户组, 随后根据查询结果再进行同样查询, 直到查询完毕, 进而增加了用户使用 ldap 用户的方便性 不开启 nested 查询外模式, 查询结果为该用户属于 ft 和 ft1 组 FG # diagnose test authserver ldap ldap test song!@# authenticate 'test' against 'ldap' succeeded! 9 / 10 support.fortinet.com.cn
Group membership(s) - CN=ft1,OU=user,DC=song,DC=com CN=ft,OU=user,DC=song,DC=com 开启 nested 查询模式测试认证, 查询结果为该用户属于 ft 和 ft1 和 g1 组 : FG # diagnose test authserver ldap ldap test song!@# authenticate 'test' against 'ldap' succeeded! Group membership(s) - CN=ft1,OU=user,DC=song,DC=com CN=ft,OU=user,DC=song,DC=com // 该组属于 g1 组 CN=g1,OU=user,DC=song,DC=com // 可查询到组的嵌套关系 10 / 10 support.fortinet.com.cn