对于很多的微软系统的管理员来说,都面临着一个以怎样的安全方式管理远程系统的问题! 在Unix系统中,这个答案十分简单: 使用SSH 协议,这是足够安全和有效的。 在SSH方式下,我们不仅能在命令行下管理远程系统, 我们也能通过使用隧道技术(Tunnlling)运行远程X-Window。 在传输过程中通过使用强壮的加密算法,以防止传送的数据被未经授权的访问。
令人遗憾的是,如果把远程安全访问应用于微软操作系统就不是一件非常容易的事了。
首先,仅仅NT 终端服务器, 2000 服务器和XP 安装有远程管理服务( 终端服务)。 第二,一些第三方公司提供给微软远程管理服务的实施方案中,一般都需要很大的成本支出。且随着方案的进一步实施,成本也越来越高。而一些免费的远程管理软件如(vnc)又无法提供加密传输功能,安全性能大打折扣。!
这篇文章提出的一种能用来远程管理 从win 95 到windows XP几乎所有版本的微软操作系统的方案。这种方案的特点不仅表现在最小费用支出上,而且还具有较高的安全性。
解决方案
一个理想的远程管理方案应该有什么特征? 首先,这个解决办法一定是高效的。 虽然在Unix 系统情况下,模拟终端命令行模式进行管理还是比较满意的.但是使用这种方式来管理windows远程服务是远远不够的, 因为Windows 是一个基于图形环境的操作系统,远程管理也应该使用一种图形方式实现。 除;了高效,远程管理还必须建立在安全的基础上。这个解决办法必须不仅为用户提供鉴定,而且也必须保证被传送的数据的机密性和完整性。
在这篇文章中讨论的远程管理方案中,通过使用以下开放源代码软件,来达到以上要求!
1.VNC -(Virtual Network Computing)提供图形界面方式管理远程系统。 在我们的方案里, VNC 软件将是这个整个的解决办法的" 核心"。 它将提供图形界面来连接远程操作系统。
2.Stunnel ?的主要目的是建立能用来以安全的方式传送其他非加密协议传输的数据的SSL 隧道。 在本文的解决办法中,这个工具将用来加密VNC 协议。 在Stunnel下,不仅可以保证被传送的数据的机密性和完整性, 也可以利用证书签别VNC 客户端和服务器。
3.OpenSSL - OpenSSL 能提供一个加密函数库,它能用来为应用程序提供数据加密功能。 通过使用OpenSSL 我们能产生,签署或者撤销基于公共密钥基础结构( PKI) 的证书。 在下面提出的这种方案中将用来产生并且签署需要证实VNC 客户端和服务器的证书
下图显示了使用以上软件来提供一个安全的远程管理方案!
此方案实际执行方案如下:
安装软件
实现此安全管理远程microsoft系统的第一步是安装以上软件.
安装VNC
我们可以在这里http://www.uk.research.att.com/vnc/ 下载vnc,然后安装在我们希望能够被远程管理的桌面操作系统,这即是VNC服务端.接下来所做的是需要注册VNC服务,注册方法:依次打开”开始”,” RealVNC”,”VNC server” ,” Register VNC Server Service”,然后系统将会要求重启.
重启系统之后,我们必须设置VNC 服务的基本参数。 最重要的事情设置一个有效的口令,以防止VNC 服务被未经授权的访问。 下一步关闭" enable jave viewer" 选项 (此选择要求两条单独的SSL 隧道,我们将不使用它), 如下图显示:
在完成使VNC 服务端设置之后,我们应该下载VNC 客户软件 ( vncviewer.exe) 并且将它放于VNC 客户端。
接着应该检查VNC 客户端是否能与VNC 服务端建立起一个连接,如果双方能够建立起连接,我们便完成了初步的设置.
由于VNC服务端只能够被本地安装的Stunnel软件所访问,所以我们需要往注册表中添加一个键值.:
Key:
HKEY_LOCAL_MACHINE\Software\ORL\WinVNC3Name:LoopbackOnly
Type:
REG_DWORD
Value:
1
以上键值的作用是使之能够使用loopback连接,即回送连接,并且限制监听端口5900的连接只能是本地ip(127.0.0.1),这样VNC服务器不会被网络上的机器直接访问,这样大大的提高了安全性.另外如果我们不希望用户关闭VNC服务的话,服务器的注册表应该增加一项:
Key:
HKEY_LOCAL_MACHINE\Software\ORL\WinVNC3\Default
Name:
AllowShutdown
Type:
REG_DWORD
Value:
0
为了使以上设置生效,我们应该重启VNC服务.
安装Stunnel
接下来安装Stunnel软件,下载地址: http://www.stunnel.org/download/binaries.html,客户端和服务端均需要下载,在本例中放置在 C:\Program Files\Stunnel.另外还需要下载2个必须的dll库文件, libeay32.dll, libssl32.dll.
如果希望开机时自动启动Stunnel进程,应该在注册表中添加如下键值:
Key: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
Name: Stunnel
Type: REG_SZ
Value: "C:\Program Files\Stunnel\stunnel-4.04.exe"
安装OpenSSL
大家都知道,在现在大多数linux版本中,典型安装就已经包括了openssl库,这主要是因为openssl库是安装openSSH所必须的组件.其实还有另外一种版本的openssl,是适合使用于微软操作系统上的,和linux下的具有相同的功能.在本文所提到的这个方案中,我们需要的就是这种在windows平台下的openssl。
下面我们来安装和设置openSSL服务:
1.
信任主机(win 2000,NT,XP)-如果可能,最好不要连接到网上-需要安装openssl软件,openssl.exe可以在Stunnel的官方站点下载http://www.stunnel.org/download/binaries.html,同样,我们还需要下载libeay32.dll 和 libssl32.dll.2个文件,下载文件必须放到C:\Program Files\OpenSSL.文件夹.
2.
另外,还需要下载2个文件,一个配置文件, openssl.conf,可以从http://www.securityfocus.com/data/tools/openssl.conf下载
ca.bat 脚本文件,用来生成证书,下载地址: http://www.securityfocus.com/data/tools/ca.bat
这2个文件也必须放置到C:\Program Files\OpenSSL.文件夹,如下图所示:
接下来应该生成证书,用来鉴别VNC的服务器和客户端.
生成密匙和证书
CA认证
这个过程首先应该产生一个私人/公共密钥对,同时产生一个第三方信任的证书.在随后的过程中私人密匙将用来签发VNC服务端和客户端的证书,CA证书将被分配给所有的VNC服务端和客户端.因为CA私人密匙是PKI执行过程中最重要的基础之一,所以密匙应该被赋予一个通行码(pass phrase)。 通行码也可以被称做为口令,是用来保护私匙的密码,用户可以自由选择。不用口令是不能使用私匙的,因此口令和私匙同样重要。需要选取一个安全的口令。.
我们通过ca.bat这个批处理文件来产生密匙对和证书:
C:\progra~1\OpenSSL\ca genca
完成以上步骤之后,CA证书将存储在c:\ca\cacert.pem文件中,私人/公共密匙对存储在C:\CA\private\CAkey.pem文件中。
VNC服务端
接下来产生服务端的密匙对和证书。
C:\progra~1\OpenSSL\ca server
于是,在C:\CA\temp\vnc_server生成如下文件:
server.key ? 私人/公共密匙对
server.crt ? 服务器端的证书
server.pem - server.key + server.crt (在使用Stunnel时将用到)
应该强调的是,服务端的私匙并没有通行码来加密,使用通行码来加密私匙的方法并没有在这里派上用场,主要是因为Stunnel尚不支持通行码,其次,是用通行码加密后的私匙将不能被用于Stunnel软件。
VNC客户端
最后一步是产生客户端的密匙对和证书。
C:\progra~1\OpenSSL\ca client
跟服务端类似,在C:\CA\temp\vnc_client文件夹中将产生如下文件:
client.key ?私人/公共密匙对r
client.crt ? 客户端证书
client.pem ? client.key + client.crt (在使用Stunnel时将用到)
Stunnel 设置
VNC服务端
在建立起服务段和客户端的一种安全传输模式前,我们必须设置好Stunnel软件,并且安装必需的密匙和证书。
在C:\Program Files\Stunnel文件夹中新建一个stunnel.conf文件,文件内容为:
CAfile = CAcert.pem
CApath = certificates
cert = server.pem
client = no
verify = 3
[vnc]
accept = 443
connect = 127.0.0.1:5900
通过以上设置,使得所有连接tcp443端口的连接转向到本地tcp5900端口,当然有个前提,那就是客户端必须提供有效的证书,并且证书还得和本地
接下来,将ca证书(C:\CA\CAcert.pem)和VNC服务端的密匙,证书(C:\CA\temp\vnc_server\server.pem)放到C:\Program Files\Stunnel
最后我们也必须安装VNC客户端证书,要想使隧道程序在鉴定过程中找到证书,我们必须按照以下方法来更改证书名称。(以下命令必须在产生证书的服务器上运行,其中value为运行open