本文我们将探讨如何通过Windows Server 2008 NPS(网络策略服务器)为不同的远程访问解决方案添加双重身份验证以帮助企业增强访问网络的身份验证。
不管是由于监管要求,还是因为静态密码不能提供足够安全性的事实,越来越多的企业开始部署高强度的身份验证以确保企业安全性。在本文中我们将探讨如何通过Windows Server 2008 NPS(网络策略服务器)为不同的远程访问解决方案添加双因素身份验证以帮助企业增强访问网络的身份验证。对于双因素身份验证,我们将使用WiKID强认证服务器,WiKID是一款基于商业/开源软件的双因素身份验证解决方案,WiKID 旨在成为令牌、证书、密码的安全替代品。
假设你的环境中既有Windows系统又有Linux/Unix,然后你需要部署双因素身份验证来满足PCI要求,你想要保护所有关键系统(大多数是Linux系统)并且你打算使用双因素身份验证(这里我们只讨论SSH)锁定远程桌面。这就需要创建一个双因素验证锁定的SSH网关服务器,然后管理就可以使用公钥验证从网关访问其他服务器。
SSH为远程管理服务器提供了一个高度安全的渠道,然而,在面对审计时,大家需要注意几个与验证相关的潜在问题:
◆不能控制哪些用户拥有公钥授权
◆不能执行(或者确定是否在使用)密码复杂性
◆不能设置公钥失效
另外,还需要为其他服务添加双因素身份验证,包括RDP和VPN等。为所有服务和不能用于其他服务的SSH密钥设置单个双因素认证服务是非常有效的。
概述
完成所有设置后,系统将这样运行:用户从他们的WiKID软件令牌生成一个一次性密码,并将其输入到SSH密码框,密码将通过radius获得SSH网关到NPS的验证。然后NPS将验证用户在Active Directory及相关组群中是否有效,如果有效,NPS会通过radius将用户名和一次性密码发送给WiKID强认证服务器。如果OTP是有效的,WiKID服务器会响应NPS,然后NPS响应SSH网关,用户将被授予访问权限。请注意,这个过程只是验证过程,会话管理仍然由SSH网关或者其他你在使用的远程访问服务来处理。
首先我们需要启用Windows Server 2008网络策略服务器 (NPS)
添加“网络策略和访问服务”角色到域控制器
在安装过程中,启用以下角色服务器:
◆网络策略服务器
◆Routing & Remote Access Services路由和远程访问服务
◆Remote Access Service远程访问服务
◆Routing路由
然后我们需要添加一个新的RADIUS客户端,本文中即SSH网关
在管理工具(Administrative Tools)中选择网络策略服务器
右键点击Radius Clients并选择新建
添加远程访问服务器(RAS、VPN等)的名称和IP地址,并创建一个共享密码,你将需要在WiKID服务器中输入相同的共享密码,点击确认。
添加新的Radius服务器,即WiKID强认证服务器
右键单击Remote RADIUS服务器并命名这个组,如“WiKID”
点击添加按钮来向该组添加一个新的radius服务器
在第一个选项中输入WiKID服务器的IP地址,在第二个选项中,输入共享密码。
创建网络策略
现在我们已经创建了radius客户端和radius服务器(WiKID),下面我们需要创建一个新的网络策略来告诉IAS哪些用户可以代理到WiKID。
输入名称,将网络访问服务器类型保持为“未指定(Unspecified)”或者选择远程访问系统
点击Conditions选项,我为所有来自我的服务器IP地址的请求添加了一个条件。
点击Settings Page,点击Authentication并选择“Forward requests to the following remote RADIUS server group for authentication(将请求转发到以下远程RADIUS服务器组进行验证)”,选择WiKID。
配置WiKID强认证服务器
现在我们已经配置了NPS来代理身份验证,我们需要配置WiKID来接受它们,这里我们只需要为NPS添加一个radius网络客户端:登录到WiKIDAdmin网络界面,点击网络客户选项,点击“创建新网络客户端”,给网络客户端命名,指定IP地址,根据协议选择Radius并选择使用哪个WiKID域(WiKID域涵盖用户并且指定某种安全参数,如PIN长度、一次性密码的使用时间等)。
在接下来的页面中,输入共享密码,也就是上文在NPS中的密码。确保输入相同的密码!!WiKID支持在网络客户端水平和每个用户组水平添加radius返回属性,不过这超出了本文的范围。
此时会有消息提示说已经成功添加网络客户端,你需要从命令行重启WiKID服务器,这会使网络客户端会加载到radius界面,并打开内置WiKID防火墙的radius端口。
- # wikidctl restart
#p#配置SSH网关服务器
配置SSH网关
现在我们将需要配置中央SSH网关,linux系统是导向所有生产服务器的网关/代理,它必须被严格锁定,并且不能有多余的软件或者服务器在上面运行。此外,linux系统还需要有一个处理入站连接的外部接口以及处理内部连接的内部接口。首先我们需要配置网关使用WiKID对SSH用户进行高强度验证。
从安装PAM Radius开始,
下载最新版本的tar文件
运行:
- $ make
将产生的共享库复制到/lib/security。
- $ sudo cp pam_radius_auth.so /lib/security/
编辑/etc/pam.d/sshd来允许进行Radius身份验证
- $ sudo vi /etc/pam.d/sshd
注意:不同版本的linux有不同的pam.d文件格式。 请检查linux的具体版本,以下说明适用于Fedora/ Redhat/Centos
转到该文件的第一行,点击Insert键或者i键,插入到这一行。
- auth sufficient /lib/security/pam_radius_auth.so
Sufficient标签意味着,如果Radius身份验证成功的话,就不再需要额外的身份验证。然而,如果Radius验证失败的话,将需要来自该系统的用户名和密码来验证。使用“Required”来请求强认证。
写入文件并推出,点击Esc键来推出插入模式,并输入':wq'
编辑或创建/etc/raddb/server文件。
- vi /etc/raddb/server
下面这行:
- 127.0.0.1 secret 1
添加这一行,替代routableIPAddress:
- routableIPaddress shared_secret 1
routeableIPaddress是NPS服务器的IP地址
编辑 /etc/pam.d/sshd文件:
- #%PAM-1.0
- auth sufficient /lib/security/pam_radius_auth.so
- auth include system-auth
- account required pam_nologin.so
- account include system-auth
- password include system-auth
- session include system-auth
- session required pam_loginuid.so
添加WiKID服务器到/etc/raddb/server文件,使用WiKID服务器的外部IP地址以及在网络客户端创建页面输入的共享密码:
- # server[:port] shared_secret timeout (s)
- 127.0.0.1 secret 1
- xxx.xxx.xxx.xx wikidserver_secret 3
这里也需要向SSH配置增加一些安全性,打开/etc/ssh/sshd_con**(不是附近的ssh_con**文件),添加这些配置选项:
- #Protocol 2,1
#检查只有协议2被允许: Protocol 2
#禁用root登录:
- PermitRootLogin no
#禁用没有密码的帐号:
- PermitEmptyPasswords no
现在网关已经设置为使用WiKID一次性密码来进行SSH验证,所有用户必须注册到WiKID服务器,没有人可以作为root登录。下面我们将做点小变动,让用户可以在网关创建自己的RSA密钥,只要用户在WiKID注册后,就能创建自己的密钥:
- class="command">ssh-keygen -t rsa
其实,这些密钥的密码短语是多余的,我们必须确保用户不能访问其他密钥。
配置目标服务器
显然,我们需要将这些服务器配置为仅接受来自网关的SSH请求,这可以通过限制端口22对内部地址的访问来实现,编辑/etc/syscon**/iptables或者端口22的SSH这行:
- -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp -s 192.168.1.0/24 --dport 22 -j ACCEPT
允许WiKID软件令牌
启动WiKID令牌,选择与SSH网关相关的域名,然后输入密码,就能获得一次性密码,这个密码是有时间限制的,可以在WiKID服务器任意设置密码的有效时间。
当SSH框弹出时用户只需输入一次性密码
令牌同样也可以从命令行运行,这对于SSH很便捷:
- java -cp jWiKID-3.1.3.jar:jwcl.jar com.wikidsystems.jw.JWcl domainid
domainid是12位域标识符
结论
很多企业都面临着合规和监管的问题,网络环境也变得越来越复杂和危险,同时,用户也需要更多的远程访问,这些都给企业的安全部门带来不小挑战。
本文主要探讨的是向SSH添加双因素验证,我们选择Radius作为网络验证标准,这是个不错的选择。大部分VPN、远程桌面系统、网络服务器和其他远程访问服务都支持Radius,当大家在考虑添加双因素验证时,只需要考虑系统是否支持Radius即可,然后可以将Radius指向NPS服务器,就可以实现双因素验证。
【编辑推荐】