不管是由于监管要求还是静态密码不能提供足够安全性事实越来越多企业开始部署高强度身份验证以确保企业安全性在本文中我们将探讨如何通过Windows Server 2008 NPS(网络策略服务器)为区别远程访问解决方案添加双原因身份验证以帮助企业增强访问网络身份验证对于双原因身份验证我们将使用WiKID强认证服务器WiKID是款基于商业/开源软件Software双原因身份验证解决方案WiKID 旨在成为令牌、证书、密码安全替代品
假设你环境中既有Windows系统又有Linux/Unix然后你需要部署双原因身份验证来满足PCI要求你想要保护所有关键系统(大多数是Linux系统)并且你打算使用双原因身份验证(这里我们只讨论SSH)锁定远程桌面这就需要创建个双原因验证锁定SSH网关服务器然后管理就可以使用公钥验证从网关访问其他服务器
SSH为远程管理服务器提供了个高度安全渠道然而在面对审计时大家需要注意几个和验证相关潜在问题:
* 不能控制哪些用户拥有公钥授权
* 不能执行(或者确定是否在使用)密码复杂性
* 不能设置公钥失效
另外还需要为其他服务添加双原因身份验证包括RDP和VPN等为所有服务和不能用于其他服务SSH密钥设置单个双原因认证服务是非常有效
概述
完成所有设置后系统将这样运行:用户从他们WiKID软件Software令牌生成个次性密码并将其输入到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地址在第 2个选项中输入共享密码
创建网络策略
现在我们已经创建了radius客户端和radius服务器(WiKID)下面我们需要创建个新网络策略来告诉IAS哪些用户可以代理到WiKID
输入名称将网络访问服务器类型保持为“未指定(Unspecied)”或者选择远程访问系统
点击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
配置SSH网关服务器
配置SSH网关
现在我们将需要配置中央SSH网关linux系统是导向所有生产服务器网关/代理它必须被严格锁定并且不能有多余软件Software或者服务器在上面运行此外linux系统还需要有个处理入站连接外部接口以及处理内部连接内部接口首先我们需要配置网关使用WiKID对SSH用户进行高强度验证
从安装PAM Radius开始PAM Radius主页地址为http://www.freeradius.org/pam_radius_auth/
下载最新版本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 system-auth
account required pam_nologin.so
account system-auth
password system-auth
session 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_config(不是附近ssh_config文件)添加这些配置选项:
#Protocol 2,1
#检查只有协议2被允许: Protocol 2
#禁用root登录:
PermitRootLogin no
#禁用没有密码帐号:
PermitEmptyPasswords no
现在网关已经设置为使用WiKID次性密码来进行SSH验证所有用户必须注册到WiKID服务器没有人可以作为root登录下面我们将做点小变动让用户可以在网关创建自己RSA密钥只要用户在WiKID注册后就能创建自己密钥:
="command">ssh-keygen -t rsa
其实这些密钥密码短语是多余我们必须确保用户不能访问其他密钥
配置目标服务器
显然我们需要将这些服务器配置为仅接受来自网关SSH请求这可以通过限制端口22对内部地址访问来实现编辑/etc/sysconfig/iptables或者端口22SSH这行:
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp -s 192.168.1.0/24 --dport 22 -j ACCEPT
允许 WiKID软件Software令牌
启动WiKID令牌选择和SSH网关相关域名然后输入密码就能获得次性密码这个密码是有时间限制可以在WiKID服务器任意设置密码有效时间
当SSH框弹出时用户只需输入次性密码
令牌同样也可以从命令行运行这对于SSH很便捷:
java -cp jWiKID-3.1.3.jar:jwcl.jar com.wikidsystems.jw.JWcl doid
doid是12位域标识符
结论
很多企业都面临着合规和监管问题网络环境也变得越来越复杂和危险同时用户也需要更多远程访问这些都给企业安全部门带来不小挑战
本文主要探讨是向SSH添加双原因验证我们选择Radius作为网络验证标准这是个不错选择大部分VPN、远程桌面系统、网络服务器和其他远程访问服务都支持Radius当大家在考虑添加双原因验证时只需要考虑系统是否支持Radius即可然后可以将Radius指向NPS服务器就可以实现双原因验证
最新评论