欢迎光临 Enjoy IT (ITECN.NET) 登录 | 注册 | 帮助

用ISA Server 2004发布对外的HTTP代理服务

以前文章,收集整理之

我曾写过关于使用ISA Server 2000架设可被因特网用户使用的HTTP代理的文章,在这里想继续谈一下怎样在ISA Server 2004上实现上述功能,这里就废话少说了:),操作步骤如下:
1, 进入ISA Server 2004的管理窗口,右击“firewall policy”项,然后选择“新建”*“server publishing rule”,打开一个服务器发布向导。所谓服务器发布本质上也就是端口映射,这里也就是要把ISA外部接口的某个端口映射到ISA内部接口的HTTP代理服务端口上。
2, 首先在服务器发布向导的欢迎界面给这个服务器发布规则取个名字,比如叫Http Proxy Server,然后点击下一步;
3, 这一步是选择要发布服务器的IP地址,由于这个HTTP代理服务就是ISA本机提供的,所以在这里填入ISA内网卡的IP,如图1。默认情况下ISA Server 2004的防火墙服务wspsrv.exe仅仅在ISA内网卡的8080端口上监听WEB请求,不会在外部接口上监听,这也是我们必须使用发布规则的原因,你可以使用netstat –nao | find “:8080”的命令来验证监听:
C:\Documents and Settings\Administrator>netstat -na | find ":8080"
  TCP    150.0.1.43:8080        0.0.0.0:0              LISTENING
这个监听端口可以自行修改,不过不建议修改内网卡上的监听端口,因为如果这里调整了内网客户端也需要进行调整,如果想你的HTTP代理对外更隐秘的话,可以修改外网的监听端口,后面将讲到。
500)this.width=500" border=0>
4, 第四部进入选择协议的窗口,由于ISA没有内置HTTP代理服务器协议,所以我们需要自行创建一个,点击这个窗口中的“New”按钮,新建一个协议,名字就叫Http Proxy Server吧,然后在接下来的Primary connection Information窗口创建协议,如图2,
500)this.width=500" border=0>
参数如下:
Protocol type:TCP
Direction:Inbound(入站方向)
Port Range: From 8080 to 8080
接着的secondary connection Information窗口选择NO,当协议创建完成后就选择当前创建的协议Http Proxy Server,如图3。

500)this.width=500" border=0>
注意我们前面说了如果你觉得8080这个端口太显眼,也就是很容易被外部人使用的话,那么可以修改外部的监听端口,此时点击图3的Ports按钮,弹出一个窗口,修改其中Firewall Ports栏下的publish on this port instead of the default port即可,我这里是8990,其他选项不变,如图4,这时HTTP代理对外端口就是TCP 8990了。
500)this.width=500" border=0>
5,进入IP Address窗口,由于我们要从外部使用HTTP代理,所以需要ISA在外部接口上监听我们的请求,于是在窗口中勾选上External项即可。
6, 双击这条服务器发布规则,进入其属性窗口的to标签,在下面的Requests for the Published Server栏选择第一项Requests appear to come from the ISA Server computer,这样ISA的HTTP代理服务才会接受这个传入的请求,如图5。上面的操作完成后,不要忘记应用设置了。
500)this.width=500" border=0>
这样就完成了发布过程,不过你此时如果使用netstat –na | find “:8990”命令是看不到有程序在监听ISA外部接口的8990端口的,这是为什么呢?这跟ISA Server 2004本身的架构有关,ISA Server 2004由内核模式的驱动fweng.sys和用户模式的防火墙服务wspsrv.exe构成,到达的数据包首先是由内核的fweng.sys处理,如果有必要再把数据包传递到防火墙服务进行处理,比如需要应用层过滤等,由于首先是由fweng.sys来处理这个请求,而fweng.sys工作在内核模式,所以netstat命令是不能查看到它占用的端口的,它只能查看用户模式下用户程序占用的端口,虽然你不能用netstat命令发现此端口处于监听状态,但实际上它已被fweng.sys占用,可以通过fwengmon.exe工具进行查看,它可以在微软网站下载(http://www.microsoft.com/isaserver/downloads/2004/default.mspx),使用fwengmon /c命令你会发现8990已被fweng.sys占用,如下的粗体行:
C:\Documents and Settings\Administrator>fwengmon /c
Creation Objects:
ID      Protocol  Source                Destination             One-Shot
--      --------  ------                -----------             --------
4       TCP(6)    000.000.000.000:0000  192.168.001.002:0080    No
2       TCP(6)    000.000.000.000:0000  150.000.001.043:1745    No
28      TCP(6)    000.000.000.000:0000  222.183.224.142:0080    No
10178   TCP(6)    000.000.000.000:0000  222.183.224.142:8990    No
9681    UDP(17)   000.000.000.000:0000  222.183.224.142:6255    No
1       UDP(17)   000.000.000.000:0000  150.000.001.043:1745    No
10284   UDP(17)   000.000.000.000:0000  222.183.224.142:6533    No
9725    UDP(17)   150.000.001.042:0000  150.000.001.043:6279    No
10285   UDP(17)   192.168.000.088:0000  150.000.001.043:6534    No
这时就可以从外部使用ISA Server 2004的HTTP代理服务了,比如你公司用的是电信,而你家里用的是网通,此时要在家看电信的电影就可以配置使用此HTTP代理,因为此时电信获得的源IP是你公司ISA的,所以允许你收看,而平时这是不能的,至于怎样在客户端配置HTTP代理我想就不用多说了吧,在IP中填入ISA外部接口的公网IP,在端口填入8990就行。 

发表于 作者 shukoshi | 0 评论
归档在:

浅谈状态检测防火墙和应用层防火墙的原理(结合ISA SERVER)

以前文章,收集整理之

防火墙发展到今天,虽然不断有新的技术产生,但从网络协议分层的角度,仍然可以归为以下三类:
1, 包过滤防火墙;
2, 基于状态检测技术(Stateful-inspection)的防火墙;
3, 应用层防火墙。
这三类防火墙都是向前包容的,也就是说基于状态检测的防火墙也有一般包过滤防火墙的功能,而基于应用层的防火墙也包括前两种防火墙的功能。在这里我将讲讲后面两类防火墙的实现原理。
先从基于状态检测的防火墙开始吧,为什么会有基于状态检测的防火墙呢?这就要先看看第一类普通包过滤防火墙的主要缺点,比如我们要允许内网用户访问公网的WEB服务,来看看第一类普通包过滤防火墙是怎样处理的呢?那首先我们应该建立一条类似图1所示的规则:

500)this.width=500" border=0>

但这就行了吗?显然是不行的,因为这只是允许我向外请求WEB服务,但WEB服务响应我的数据包怎么进来呢?所以还必须建立一条允许相应响应数据包进入的规则。好吧,就按上面的规则加吧,在动作栏中我们填允许,由于现在数据包是从外进来,所以源地址应该是所有外部的,这里不做限制,在源端口填80,目标地址也不限定,这个这个目标端口怎么填呢?因为当我访问网站时本地端口是临时分配的,也就是说这个端口是不定的,只要是1023以上的端口都有可能,所以没有办法,那只有把这些所有端口都开放了,于是在目标端口填上1024-65535,这样规则就如图2所示了,实际上这也是某些第一类防火墙所采用的方法。

500)this.width=500" border=0>

想一想这是多么危险的,因为入站的高端口全开放了,而很多危险的服务也是使用的高端口啊,比如微软的终端服务/远程桌面监听的端口就是3389,当然对这种固定的端口还好说,把进站的3389封了就行,但对于同样使用高端口但却是动态分配端口的RPC服务就没那么容易处理了,因为是动态的,你不便封住某个特定的RPC服务。
上面说了这是某些普通包过滤防火墙所采用的方法,为了防止这种开放高端口的风险,于是一些防火墙又根据TCP连接中的ACK位值来决定数据包进出,但这种方法又容易导致DoS攻击,何况UDP协议还没有这种标志呢?所以普通包过滤防火墙还是没有解决这个问题,我们仍然需要一种更完美的方法,这时就有了状态检测技术,我们先不解释什么是状态检测防火墙,还是来看看它是怎样处理上面的问题的。同上面一样,首先我们也需要建立好一条类似图1的规则(但不需要图2的规则),通常此时规则需要指明网络连接的方向,即是进还是出,然后我在客户端打开IE向某个网站请求WEB页面,当数据包到达防火墙时,状态检测引擎会检测到这是一个发起连接的初始数据包(由SYN标志),然后它就会把这个数据包中的信息与防火墙规则作比较,如果没有相应规则允许,防火墙就会拒绝这次连接,当然在这里它会发现有一条规则允许我访问外部WEB服务,于是它允许数据包外出并且在状态表中新建一条会话,通常这条会话会包括此连接的源地址、源端口、目标地址、目标端口、连接时间等信息,对于TCP连接,它还应该会包含序列号和标志位等信息。当后续数据包到达时,如果这个数据包不含SYN标志,也就是说这个数据包不是发起一个新的连接时,状态检测引擎就会直接把它的信息与状态表中的会话条目进行比较,如果信息匹配,就直接允许数据包通过,这样不再去接受规则的检查,提高了效率,如果信息不匹配,数据包就会被丢弃或连接被拒绝,并且每个会话还有一个超时值,过了这个时间,相应会话条目就会被从状态表中删除掉。就上面外部WEB网站对我的响应包来说,由于状态检测引擎会检测到返回的数据包属于WEB连接的那个会话,所以它会动态打开端口以允许返回包进入,传输完毕后又动态地关闭这个端口,这样就避免了普通包过滤防火墙那种静态地开放所有高端端口的危险做法,同时由于有会话超时的限制,它也能够有效地避免外部的DoS攻击,并且外部伪造的ACK数据包也不会进入,因为它的数据包信息不会匹配状态表中的会话条目。
上面虽然是讲的针对TCP(WEB服务)连接的状态检测,但这同样对UDP有效,虽然UDP不是像TCP那样有连接的协议,但状态检测防火墙会为它创建虚拟的连接。
相对于TCP和UDP来说,ICMP的处理要难一些,但它仍然有一些信息来创建虚拟的连接,关键是有些ICMP数据包是单向的,也就是当TCP和UDP传输有错误时会有一个ICMP数据包返回。对于ICMP的处理,不同的防火墙产品可能不同的方法,在ISA SERVER 2000中,不支持ICMP的状态检查,只能静态地允许或拒绝ICMP包的进出。
从上面可以看出,基于状态检测的防火墙较好的解决了第一类普通包过滤防火墙的问题,为了更直观的理解状态检测防火墙,我们还来看看一些实际例子,这些例子都是在ISA SERVER 2000上的表现。
(1)感受会话超时的限制
还是举一个能说明问题的例子,比如大家熟悉的QQ(QQ2003II),为什么你一直不聊天和做其他动作仍然能够收到从腾讯服务器上发来的广告信息呢?肯定不是这个连接到腾讯服务器的QQ会话永不超时,其实你用sniffer软件一看就知道了,这是因为QQ每到一分钟时(但还没到一分钟)就会主动与腾讯服务器联系一次,这种联系对防火墙后的QQ是非常重要的,通常来说,对于UDP协议,会话超时都是一分钟或小于一分钟,另外windows 2000中UDP端口的NAT映射期也只有一分钟,它在一分钟之内联系,这样就会在防火墙状态表中保持它的会话,不至于会话被删除,想像一下,如果它不这样联系的话,一分钟后这条会话被删除,而刚好此时腾讯有个广告要传给你,那么你是不能收到的,当然其他从腾讯服务器上来的消息也不能收到,这是因为会话中已没有了匹配的条目,而规则中又没有静态打开的入站端口。当然上面的分析是从用户的角度来说的,从腾讯的角度来说,它也需要获知用户的连接状态,所以也需要定时通信,这已不在我们的讨论范围之内了。除了QQ,MSN Messenger也是这样的。
(2)动态地打开入站端口
首先我已在ISA SERVER 2000中的protocol rules下定义了一条允许所有客户端访问外部WEB网站的规则,如图3,

500)this.width=500" border=0>

注意上面只明确定义了出站的规则,没有明确定义入站的规则,这是因为有状态检测技术起作用,我们用不着为上面的规则配套一条明确的入站规则。图4是我在客户端打开网页时在ISA服务器上进行sniffer的结果,第一行是一个带有SYN标志的初始化连接的数据包,本地端口是22870,第二行是对方回应的数据包,由于与第一行属于同一个会话,防火墙已经为它动态地打开端口22870以便进入。

500)this.width=500" border=0>

上面我们感受了状态检测防火墙的强大功能,但由于状态检测防火墙毕竟是工作在网络层和传输层的,所以它仍然有一些不能解决的问题需要在应用层来进行解决,比如对于动态分配端口的RPC就必须作特殊处理;另外它也不能过滤掉应用层中特定的内容,比如对于http内容,它要么允许进,要么允许出,而不能对http内容进行过滤,这样我们就不能控制用户访问的WEB内容,也不能过滤掉外部进入内网的恶意HTTP内容,另外,它也不能对用户进行认证,为了解决这些问题,我们还必须把防火墙的过滤层次扩展到应用层,这就是应用层防火墙,不过这种称呼似乎有点不准,也许叫应用层级的状态检测防火墙更合适,其实今天比较大型的商业防火墙都应该是这个级别的防火墙了,比如微软的ISA SERVER 2000就是,在ISA中这种应用层的过滤就表现为应用程序过滤器(Application Filters),下面来看看应用层防火墙的处理过程。
如前文所述,当数据包在网络层和传输层通过检查之后,它就被送到应用层继续进行检查,不同的应用协议送到不同的应用协议过滤器,比如是SMTP数据包,它就会送到SMTP过滤器,在ISA SERVER 2000中,该筛选器拦截并核对SMTP 电子邮件通信,保护邮件服务器免受攻击。该筛选器识别不安全的命令并且可以筛选电子邮件信息的内容或者大小,在未经同意的电子邮件到达邮件服务器之前将其拒绝。只有匹配过滤器规则的数据包才会允许通过防火墙。
但应用层的过滤也有缺点,就是得针对每种应用协议开发一种过滤器,而对于一种具体的应用协议过滤器,它也是需要不断发展的,因为应用协议在发展,再说还不断有新的应用协议产生,并且由于数据包要经过应用层过滤器的再次检查,这无疑会降低网络传输效率。而对于使用动态端口协议的处理这种防火墙最头痛的事情,即使在应用层上来解决也不是一件容易的事,RPC也许不是问题了,因为它使用了这么多年,各种防火墙对它都已经有了比较成熟的解决方案,比如ISA SERVER 2000中就有专门的RPC filter来对它进行处理,但对于一些比较新的且也使用动态端口的协议就不好办了,比如用于即时通信中的SIP协议等诸多协议都要使用动态端口,由于没有即时的过滤器推出,使用这些协议的网络应用程序在防火墙后通常都会有连接故障,我想那些在防火墙后使用MSN Messenger的朋友一定深有体会(当使用除即时文字聊天和文件传输以外的功能时),不过,现在也有了一种比较全面地来解决这种使用动态端口协议的方案,那就是在防火墙中添加UPnP协议的支持,这样那些支持UPnP的网络应用程序(如MSN Messenger 6.1)就能够自动去发现防火墙并在防火墙上动态地打开端口,这样就无需在防火墙上去进行进退两难的手动配置。不过遗憾的是,虽然UPnP有效的解决了动态端口的问题,但它也带来了新的安全问题,所以在安全性要求较高的网络中是不适宜开启UPnP功能的。可能也是由于安全原因吧,现在支持UPnP的防火墙还很少,据我所知,Kerio winroute firewall5和windows XP上的ICF是支持UPnP的。
注:本文未探讨另一类工作在应用层的防火墙,即代理服务器,也被称做应用代理网关。

发表于 作者 shukoshi | 0 评论
归档在:

用ISA Server 2004及其VPN功能杜绝上网IP被盗用

以前的文章,收集整理之

上网IP被盗用是很多网管员遇到的头痛事,从技术上来说,要真正杜绝这种现象,可靠的方法就是使用支持端口绑定的交换机,但实际上大家通常使用的普通交换机并不支持这种功能,而很多人说的通过把IP与MAC地址进行绑定来防范IP盗用更是不堪一击,因为客户端成对修改IP与MAC后这种方法就无能为力了。在这里将推荐一种方法,即使用代理服务器结合VPN服务来杜绝上网IP被盗用,准确地说也不是能够阻止客户端修改IP和MAC地址,而是让它修改后也不起作用,或许你现在有点疑惑,到底怎样实现呢?效果如何呢?follow me。

网络结构

先来交代一下本文将使用的网络环境和基本配置,网络结构如图1所示,这个网络结构也是典型的ADSL共享上网环境,本文使用的代理服务器是ISA Server 2004,VPN服务也由ISA所在服务器提供,操作系统是Windows server 2003,之所以选择ISA 2004,是因为它对VPN的支持更适宜解决我们这里的论题,到底怎样后面将讲到。图中ISA有两块网卡,一块连接到DSL Router,一块连接内部网络。内网卡IP为192.168.0.43/24,DNS配置为ISP提供的61.128.128.68,网关无。Internal客户端的网关指向192.168.0.43,DNS指向ISP提供的61.128.128.68。还有一个由VPN客户端连接时动态生成的虚拟VPN客户端网络。


500)this.width=500" border=0>
 

实现的基本过程及原理

首先在ISA上创建访问规则拒绝内网Internal上网,当Internal网内客户机要上网时,就先通过VPN连接到ISA上,由ISA分配给它一个不同于Internal网段的IP地址和一个DNS设置,并创建访问规则允许VPN客户端网络上网,这样就只有那些通过VPN连接的客户端才能上网,当然这些能够进行VPN连接的客户端就是有上网权限的客户端,注意这里可能出现另一种情况,就是用户把自己的VPN帐户和密码告诉其他非法用户,这样非法用户只要用他得到的VPN帐户登录也就能够上网,怎样来避免这种情况呢?我们可以在地址分配时作文章,只让相关帐户第一个登录者能够上网,具体实现后面将详述。另外注意这里的VPN连接与我们平常所使用的VPN连接是有点不同的,通常所使用的VPN连接,是由外部连接到VPN服务器,而这里是直接从内部连接到VPN服务器,这也就保证了上网的速度。其实这种方法很类似网通用户的上网方式,网通用户也是通过LAN方式连网,但要上网时也要先使用虚拟ADSL拨号取得上网用的IP及设置。只是网通使用的是ADSL虚拟拨号,而我们这里使用的是VPN拨号,基本思路都是一样的。
现在你也许要问,如果非法客户端把IP改成VPN客户端网络内的一个地址不就绕过了这道防线吗?不行的,即使它修改了IP也是没用的。原因:
1,对ISA 2004来说,VPN客户端网络是动态生成的,也就是只有VPN连接成功才是其网络的成员,所以自行修改IP后并不会成为VPN客户端网络的成员, ISA会拒绝其上网;
2,如果你的代理服务器不是ISA,即使当客户端修改IP后代理服务器允许其上网,但响应数据包也无法返回给此客户端,所以修改IP也无济与事,当然成对修改IP与MAC在这里也无意义。为了说明这种情况,下面来举个例子:
假如我们这里VPN客户端网络的IP地址范围是150.0.1.0/24中的一部分,现在有个非法的客户端192.168.0.42把它的IP变成了150.0.1.228, 当然它网关设置不能变,还是192.168.0.43,此时它要访问外部网页,即使它的请求数据能够到达外部,当外部响应数据返回代理服务器时,代理服务器要把数据包返回给150.0.1.228,根据代理服务器的路由表,到达150.0.1.0网络的数据包不会通过物理接口192.168.0.43转发,所以数据包也就不能到达150.0.1.228。从这点可以看出,不使用ISA而使用其他能够进行IP限制的代理服务器也是可行的,当然ISA功能更加强大。  

实现的具体过程

了解了上面的原理,具体实现也就简单了,主要分以下几大步:
一、 在ISA上创建访问规则(Access Rule),拒绝Internal网上网,并把它的规则顺序放在第一,这样ISA处理起来更快。
本来如果没有明确允许Internal上网的规则,ISA会拒绝Internal网络访问外部网的,但为了提高效率,我们可以创建一条明确的拒绝规则。右击Firewall Policy,选择“新建/Access Rule”,参数如下:
Rule Action:Deny
Protocols:All outbound traffic
Access Rule sources: Internal
Access Rule Destinations:External
User sets:All users
二、 启用VPN服务器
ISA所使用的VPN服务其实就是操作系统本身的,通过下面的步骤来完成。
1, 在ISA管理窗口中选中Virtual Private Network,在右边的Task面板上点击 Tasks 标签,然后慊?I> Enable VPN Client Access 链接。
2, 点击下面的configure VPN client Access链接,弹出如图2所示的窗口,

500)this.width=500" border=0>

在General标签中选中Enable VPN Client access,并在下面的Maximum number of VPN clients allowed框中填入VPN客户端数量,然后进入Groups标签,选中可以使用VPN的用户组,这个用户组既可以是域用户组也可以ISA本地用户组,我们这里选择ISA本地用户组,如果没有这样的组,可以马上到“计算机管理”工具中创建一个,这个组应该包含所有能够进行VPN连接的用户,创建组并非是必须的,但这样做方便管理。然后进入Protocols标签,选择Enable PPTP项,不必选择Enable L2TP/IPSEC。
3, 点击Tasks下的select Access Networks链接,弹出新窗口(如图3),在Access Networks标签中选中Internal网络,表明允许从Internal网络连接到VPN服务器,如果允许从外部连接到VPN服务器,也可以选中External项;然后进入Address Assignment标签,在这里设置分配给VPN客户端的IP地址段,怎样分配IP才合适呢?前面讲实现原理时就说过我们需要考虑另一种情况,就是如果用户把他的VPN帐户与其他人“共享”怎么办呢?因为windows的VPN服务并不会禁止同一VPN帐户同一时间在不同客户端进行登录,这就使得用户把自己的VPN用户名和密码与非法用户共享成为可能,要防范这种情况出现,可以采用下面的方法:在这里分配一段IP地址,但同时在用户属性中为每个合法用户单独分配一个IP(具体方法后面将讲到),这样,当VPN帐户登录时,他将得到为他单独分配的IP,如果此时又有人用他的VPN帐户连接VPN服务器,连接也能成功,但由于那个单独分配的IP前面已经在使用了,所以此时将为他分配一个这里IP段中的一个地址(如图3),基于此,我们可以创建一种访问规则,允许那些单独分配的IP地址集上网,但对这里分配的IP范围则不允许其上网,虽然这种方法并不能杜绝与人共享帐户,但至少也会使用户不会那么大方地共享自己的帐户,因为当别人使用自己帐户的时候,自己是不能上网的。我们这里在static address pool指定一段静态IP地址,就取172.16.0.1-172.16.0.254吧,那些单独分配的IP就从150.0.1.224-150.0.1.231段中获得, 当然具体范围应该根据你VPN客户端的数量而定。接下来在Use the following network to obtain DHCP,DNS and WINS Services选择Internal,这里是配置把那块网卡的DNS和WINS等参数分配给VPN客户端,这里选择了Internal,将把内网卡所设置的DNS分配给VPN客户端,即61.128.128.68(如图4)。

500)this.width=500" border=0>
图3

500)this.width=500" border=0>
图4
 



 
三、 启用相关用户的VPN访问权限

进入ISA的“计算机管理”工具(如果是域用户请在“AD用户与计算机”管理工具中进行),在这个管理窗口中,你需要做以下几件事:
1, 创建相关用户并设置初始密码,选中“用户下次登录时须更改密码”;
2, 把用户加入图2选择的VPN用户组;
3,右击用户,进入其属性窗口,在“拨入”标签中选择“允许访问”项,并选中“分配静态IP地址”项,填入一个IP,根据上面的讨论,我们从150.0.1.224-150.0.1.231中选择一个(如图5)。
 
500)this.width=500" border=0>

四、 为不同的VPN客户端范围上网创建不同的访问规则

根据上面不同的VPN客户端IP段,我们也需要创建不同的规则,对于172.16.0.1-172.16.0.254段的VPN客户端,拒绝他们上网,而对150.0.1.228-150.0.1.23段的VPN客户端,则允许其上网: 
1, 选中Firewall Policy,点击Toolbox下的Network Objects;
2, 点击New/Address range,新建两个Address range,一个是允许上网的VPN客户端,假如就叫VPN YES吧,IP范围是150.0.1.228-150.0.1.231,另一个是不允许上网的VPN客户端,名字就叫VPN NO,IP范围是172.16.0.1-172.16.0.254,
3, 创建两条规则
规则1:name:VPN YES
Rule Action:Allow
Protocols:All outbound traffic
Access Rule sources: Address Ranges/VPN YES
Access Rule Destinations:External和Local host
User sets:(图2选择的VPN用户组)
规则2:
name:VPN NO
Rule Action:Deny
Protocols:All outbound traffic
Access Rule sources: Address Ranges /VPN NO
Access Rule Destinations:External
User sets:all users

五、在客户端创建VPN连接,操作路径是“开始/设置/网络连接/新建连接向导”,参数如下:
网络连接类型:连接到我的工作场所的网络
网络连接:虚拟专用网络连接
公司名:随便取个有意义的名字,比如“上网拨号”
公用网络:不拨初始连接
VPN服务器选择:输入Internal网卡的IP,这里是192.168.0.43
可用连接:任何人使用
最后选中“在我的桌面上添加一个到此连接的快捷方式”。这样配置后,当要上网时,用户就先用自己的VPN帐户进行VPN连接,连接之后就能上网了。

结语

虽然这种方法不错,但毕竟用户仍有共享VPN帐户的可能,当然也有更好的办法来对付这种情况,比如Windows Server 2003就支持一种Network Quarantine and Remote Access的新功能,它可以让VPN客户端连接时运行检查脚本,只有在满足某种条件后才能进行完全自由的访问,在这里我们就可以利用这种功能,比如当VPN客户端连接时运行反向DNS查询,看其查询是否成功来检验客户端的合法性(当然还要有相关的DNS服务器配置),它的具体执行又得另一篇文章来完成了,如果可能,下次再来谈这个问题。另外可能有人会说了,ISA本身就支持使用用户来限制访问,何必要费力这样做,直接使用用户来限制上网不就行了,确实如此,但使用ISA的用户方式来限制上网有几点不方便的地方,何况还有一些不支持用户限制的代理服务器呢?
1,ISA要使用用户限制的话需要在客户端安装防火墙客户端软件,这对那些不是域网络的管理员来说可能是一件麻烦事;
2, 如果是用域用户来验证,客户端必须登录到域,如果客户端是登录到本机的,用户将不能通过验证。
而使用此文所说方法的好处是:
1, 无需要另外安装防火墙客户端软件,并且VPN的用户信息也可以用于规则中。
2, 对客户端登录到域还是本机没有特定的要求。
3, 共享帐户问题也有较好的解决方法。
4, 让客户端修改IP和MAC方法失效。
总的来说,本文主要是为大家防范IP盗用提供一种新的思路,到底选择什么方法还是得根据自身的情况来定。
发表于 作者 shukoshi | 0 评论
归档在:

一次ISA Server 2004防火墙的部署经历

本文讲的ISA本身的部署并不复杂,复杂一点的也只是客户的环境与要求

朋友公司的网线早在几年前装修时就已经布好了,布线也相当规范,每个房间都拉了两根线,以作备份,所有的线都由机柜引出来,在机柜中接在配线架上,房间中则全部做在模块里,现在是只差一台交换机,所有计算机就可以联网了(在这之前,只有某个安全部门实现了几台机器联网),但由于一些原因,直到现在才准备使用,于是我叫他提出要求,然后我再根据要求进行网络设计及具体实施。他的要求是:

1,  调度室的一台计算机需要24小时都能上网,而上网服务器只在每天的上午8点到下午6点开机;

2,  可以根据用户、IP等限制客户端上网;

3,  原网络(以后就叫安全网)的某些计算机能够访问新网络(以后就叫办公网)的某些计算机,而办公网不能访问安全网;

4,  网上邻居中大家都能看到;

 

网络规划

 

于是我根据他的要求和网络的实际情况,作出了如图1所示的网络规划,划分了三个子网,下面先大致解释一下是怎样处理上面提到的要求的,具体实现后面将详细讲述。


1,  为了满足第一个要求,我把ADSL猫先接在一台小交换机上,然后调度室的计算机和上网服务器的外网卡再接在这台交换机上,这样当上网服务器关机后,调度机就可自行拨号上网,而当上网服务器开机后,调度机就断线让它拨号上网,然后再通过上网服务器访问因特网,具体配置后面将讲到。

2,  为了更好控制上网行为,这里将使用ISA Server 2004标准版作上网服务器和防火墙,为了方便管理和以后能够在用户级控制上网,这台ISA服务器也将是一台域控制器,当然不建议大家把ISA装在DC上,这里是没有办法的办法,因为没有多余的计算机;

3,  为了物理隔离安全网与办公网,这里使用了支持VLAN的交换机,原安全网不作变动,直接连接到VLAN交换机的一个端口上,并把这个端口单独定义成一个VLAN,其他的端口属于另一个VLAN,不过这里的网络环境有个特殊情况,由于每个房间只布了两根网线,而这里在ISA的房间中只有一根网线能够接在ISA的机器上,这就有了一个问题,因为这里要划分两个VLAN,那么按传统方法,ISA就必须准备两张网卡,然后分别与各自的VLAN相连,但这里却只有一根网线可用,那一个好的办法就是把ISA这个内网卡所连接的端口划分在两个VLAN中,即说这个端口属于两个VLAN,是两个VLAN的公共通道,这还需要交换机的支持,还好这里的交换机支持,不过这也需要在ISA的内网卡配置两个IP,以对应不同的VLAN,这个windows是支持的,所以不成问题,具体配置后面讲到。安全网与办公网之间如果互访则通过ISA的访问规则进行控制。

4,  因为安全网是另外一个域,也属于另外一个子网,网上邻居需要NetBios的支持,而NetBios的名称解析如果使用广播是不能跨越子网的,所以我们需要架设WINS服务器,这样网上邻居中才能看到两个子网的计算机。

具体实施

 

(一)  安装与配置域控制器

为了方便管理,新网络(办公网)192.168.6.0/24将以一个域网络的形式出现,这里首先要做的就是安装一台域控制器,并且这台域控制器也将作为ISA服务器,再次强调一下,不建议你将ISA安装在域控制器上,这里是因为计算机不够用才走的下策。安装的具体步骤我想就必细说了,这里大致提一下(假设已经安装好了windows server 2003):

1,配置网卡

ISA外网卡(请与图1对照):

IP192.168.5.1/24

网关:无

DNS:无

禁用“TCP/IP上的NetBIOS”,如图2

ISA内网卡:

第一IP192.168.6.1/24

第二IP192.168.0.222/24(如图3

网关:无

DNS:192.168.6.1

WINS: 192.168.6.1

2,在运行框中输入Dcpromo命令把这台服务器提升为域控制器,在提升过程中的“DNS注册诊断”窗口选择第二项“在这台计算机上安装并配置DNS服务器,并将这台DNS服务器设为计算机的首选DNS服务器”,如图4,大家一定要注意,DNS是域的重要组成部分,没有正确配置的DNS你的域将会出现很多问题!

3,安装完成后打开DNS管理控制台,右击服务器图标,进入其属性窗口,然后切换到转发器标签,添加要转发到的DNS服务器,这里也就是ISP提供的DNS服务器,如图5。这样配置之后客户端进行内部访问(如域登录)时就使用内部的DNS服务,访问因特网时就由此DNS进行转发解析。

4,域控制器安装完成后请将这台服务器也安装成WINS服务器,可以从“添加/删除程序”下“添加删除WINDOWS组件”中选择“网络服务”下的WINS安装。

(二)  划分VLAN

要把安全网与办公网从物理上隔开就需要划分VLAN,当你划分了VLAN之后,即使用户把自己的IP改成另一个VLAN子网内的IP,它也是无法访问那个子网内的计算机的。这里把端口24单独设置成一个VLAN,即安全网所连接的端口,其余端口划分为一个VLAN,这里的关键是要把ISA内网卡连接的端口划在两个VLAN中,这里ISA内网卡连接的端口是Port 4,从图6可以看出,我把它划在了两个VLAN中,内网卡第一IP 192.168.6.1对应办公网,第二IP 192.168.0.222对应原来的安全网。

(三)   在域控制器上安装ISA Server 2004标准版

ISA Server 2004标准版的安装很简单,《在线技术》以前的文章也已经详细讲过,所以这里只提一下需要注意的地方,就是在进入“内部网络”配置窗口时,请点击添加按钮,在弹出窗口中点击“选择网卡”按钮,然后在新窗口中清除上面一个复选框,选中“基于windows路由表添加地址范围”,在下面的网卡中选择内网卡,也就是你这里配置的内网应该包括192.168.6.0/24192.168.0.0/24这两个子网,不然后面的通讯会有问题,在ISA server 2004中,不管一块网卡有多少个IP,它们都只能属于一个相同的网络,切记!

 

(四)  配置ISA服务器

 

默认情况下,当ISA server安装好后,它会阻断所有经过它的网络通信。要让网络之间进行通讯,需要创建相应的规则:网络规则和访问规则,二者缺一不可。

1,  配置拨号首选项

由于这里使用的是ADSL连接,首先需要在ISA管理窗口中为它配置拨号首选项,进入ISA管理窗口,定位到configuration/General下,然后点击右窗格中的specify Dial-up Preferences项,在弹出的窗口中选择allow automatic dialing to this network,然后选择External项,并选中下面的configure this dial-up conncetion as the default gateway,接着在Dial-up connection中选择你创建好的ADSL连接(需要你预先在系统的“网络连接”窗口中使用“新建连接向导”创建好),选择之后在下面的dial-up account栏设置好你ADSL拨号使用的帐户和密码,以便ISA自动拨号,如图7

1,  配置办公网访问ISA上的域服务(包括WINS服务)

由于ISA服务器同时又是域控制器,所以需要创建相应的访问规则办公网的客户端才能登录域。各项参数如下:

Rule Action:Allow

Protocols:ISA中的名字)

       DNS

kerberos-sec(TCP)

kerberos-sec(UDP)

LDAP

LDAP(UDP)

LDAP(Global catalog)

Microsoft CIFS(TCP)

Netbios Datagram

Netbios Name Service

Netbios Session

NTP(UDP)

RPC(all interfaces)

Access Rule Sources:新建一个subnetIP范围为192.168.6.0/24,如图8

 

Access Rule Destinations:Local Host

User set:All Users

1,  配置办公网上网进行WEB浏览

配置办公网上网与上面一样,只是协议和目标需要改变一下,由于上面已经允许了DNS,所以协议就只需要HTTPHTTPS协议,Access Rule Destinations变为External即可。

2,  配置安全网访问办公网的文件共享

安全网访问办公网是通过ISA路由的,虽然对ISA来说它们都被定义在一个内网中,但它们之间的通讯仍然要通过ISA(因为有VLAN隔离),所以也要创建相应的访问规则,具体参数如下:

Rule Action:Allow

Protocol: Microsoft CIFS(TCP)

Netbios Datagram

Netbios Name Service

Netbios Session

Access Rule Source:新建一个subnetIP范围是192.168.0.0/24

Access Rule Destinations:subnet 192.168.6.0/24

user set: All Users

3,  配置调度机上网

从图1可以看出,调度机位于子网192.168.5.0/24中,它不属于内网,它是与ISA外网卡相关联的网络,要让调度机上网,我们需要先创建相应的网络和网络规则,步骤如下:

(1)       调度机的IP配置(不加入域)

IP192.168.5.3/24

网关:192.168.5.1

DNS:221.5.203.98

(2)       ISA上创建调度机所在的网络,方法是右击configuration/networks,选择新建/Network,各项参数如下:

Network type:External network

Network Addresses:192.168.5.0/24

3)创建此网络与External网络的网络规则,关系为NAT,要访问内网的话,还要创建与内网的网络规则为Route,与本地主机的网络规则默认就为路由,不能再创建。

4)创建访问规则,各项参数如下:

Rule Action:Allow

Protocols: DNSHTTPHTTPS

Access Rule Sources:新建一个computerIP192.168.5.3

Access Rule Destinations:External

User set:All Users

 

(五)配置ISA自动开机和自动关机

配置ISA服务器自动开机,这很简单,因为BIOS支持在某个时间自动开机,比如是每天早上800开机,在BIOS中作相应配置就行,BIOS可以设置自动开机,但可惜不能配置自动关机,比如需要每天下午600钟自动关机,这时可以下载一个专门的关机软件来实现,比如我这里就是使用的阿达自动关机,它可以配置每天在指定的时间自动关机,具体使用大家一看就知道,这里不再细说。

 

(六)配置调度机自动拨号和自动断线

ISA的自动拨号前面已经介绍了,现在来看看调度机(192.168.5.3)怎样实现自动拨号和自动断线,我们理想的情况是当ISA关机后调度机就自动拨号上网,而每天早上8点在ISA开机后它又应该自动断开连接,以让ISA拨号,这个我们可以通过系统的内置功能实现,也就是由任务计划和系统的rasdial命令一起来实现,实现自动拨号的步骤如下:

1,  在调度机上运行“任务计划向导”,然后在程序中选择windows\system32系统目录下的rasdial.exe程序;

2,  然后在下一步定义好运行时间,比如18:01

接下来输入运行此程序的用户名和密码,通常就是当前登录用户,在最后的完成窗口中选中“在单击完成时,打开此任务的高级属性”,然后我们需要在弹出窗口的运行栏中rasdial.exe命令后加入adsl user password参数,其中的ADSL是你为ADSL连接创建的拨号名,如果不清楚,可以到“开始/设置/网络连接”中找到,user是你ADSL的帐户名,Password就是拨号的密码了,如图9

与上面实现自动拨号相似,要实现早上8:00钟自动断开连接也可以使用任务计划加rasdial,只是图中rasdial后参数变成adsl /disconnect就行了,这里就不再多说了,自己变动一下即可。

 

(七)  客户端配置

办公网的IP范围是192.168.6.0/24,客户端全部加入ISA所在域CJGG.COMDNS、网关和Wins都指向ISA的内网卡192.168.6.1

安全网的IP范围是192.168.0.0/24,属于另外一个域CYCW.COM,所以DNS要指向此域的DNS服务器,然后在这个域的DNS服务器上启用转发,而网关指向192.168.0.222WINS指向192.168.6.1。这里注意要将此域的域控制器的网关也指向192.168.0.222WINS也要指向192.168.6.1,这样可以在网上邻居中看到两个子网的计算机列表,不过也只是能够看到列表,要想在网上邻居中访问另一个子网中的计算机,还需要像上面第四部分第4节一样配置相应的访问规则才行。

另外现在朋友的网络都是基于IP地址来限制访问的,还没有基于用户限制,所以客户端现在也没有安装防火墙客户端,而且如果要基于用户来限制的话,由于安全网属于另外一个域(非同一个森林),所以还需要手动建立两个域之间的信任关系才能实现基于用户限制,这又是另外一篇文章的内容了,如果可能,下次再谈吧。

 

发表于 作者 shukoshi | 1 评论
归档在:

SMS 2003安装时架构更新失败故障的分析与解决

这是很久以前安装SMS2003碰到的一个问题,是关于架构更新的,但并非是大家通常遇到的那种架构不能更新的故障,到底是什么?有兴趣就往下面看吧

准备安装Systems Management Server 2003(以下简称SMS2003),为了让客户端通过查询AD来定位相关服务器,于是在安装向导中选择了Extend the Active Directory schema项(扩展AD架构),但结果却在开始安装时提示下面的错误(如图1):

提示的意思是“安装不能扩展AD架构,你的活动目录不允许架构更新,要继续安装必须取消前面的架构扩展选项,你可以在安装之后使用安装盘上的extadsch.exe程序进行架构扩展。”于是继续安装,安装完成之后使用Extadsch.exe进行架构扩展,但结果仍然是架构更新失败,查看系统盘下的extadsch.log日志文件,结果如下:

<03-28-2005 00:04:56> Modifying Active Directory Schema - with SMS extensions.

<03-28-2005 00:04:56> DS Root:CN=Schema,CN=Configuration,DC=fzz,DC=com

<03-28-2005 00:04:56> Failed to create attribute cn=MS-SMS-Site-Code.  Error code = 8206.

<03-28-2005 00:04:56> Failed to create attribute cn=mS-SMS-Assignment-Site-Code.  Error code = 8206.

<03-28-2005 00:04:56> Failed to create attribute cn=MS-SMS-Site-Boundaries.  Error code = 8206.

<03-28-2005 00:04:56> Failed to create attribute cn=MS-SMS-Roaming-Boundaries.  Error code = 8206.

<03-28-2005 00:04:56> Failed to create attribute cn=MS-SMS-Default-MP.  Error code = 8206.

<03-28-2005 00:04:56> Failed to create attribute cn=mS-SMS-Device-Management-Point.  Error code = 8206.

<03-28-2005 00:04:56> Failed to create attribute cn=MS-SMS-MP-Name.  Error code = 8206.

<03-28-2005 00:04:56> Failed to create attribute cn=MS-SMS-MP-Address.  Error code = 8206.

<03-28-2005 00:04:56> Failed to create attribute cn=MS-SMS-Ranged-IP-Low.  Error code = 8206.

<03-28-2005 00:04:56> Failed to create attribute cn=MS-SMS-Ranged-IP-High.  Error code = 8206.

<03-28-2005 00:04:56> Failed to create class cn=MS-SMS-Management-Point.  Error code = 8202.

<03-28-2005 00:04:56> Failed to create class cn=MS-SMS-Server-Locator-Point.  Error code = 8202.

<03-28-2005 00:04:56> Failed to create class cn=MS-SMS-Site.  Error code = 8202.

<03-28-2005 00:04:57> Failed to create class cn=MS-SMS-Roaming-Boundary-Range.  Error code = 8202.

<03-28-2005 00:04:57> Failed to extend the Active Directory schema.

 

问题分析

通常来说,要进行活动目录架构扩展,需要预先进行一些权限设置,因为大家都知道,活动目录也就是一个数据库,那么我们就可以把架构看成这个数据库中的表结构,很明显表结构是不能随意更改的(不然那不是天下大乱了:),在WIN2000域,默认情况下是禁止修改架构的(在windows 2003域,默认已经允许进行架构扩展),我这里是windows 2000域,所以先要允许进行架构扩展,

允许架构扩展

1,  在域控上运行regsvr32 schmmgmt.dll

2,运行MMC,添加“AD架构”,在打开的窗口右击Active Directory Schema,并选择“操作主机”,选择“架构可以在此域控制器上更改”。

但即使允许了架构扩展,也并不是说每个人都有那个修改的权限,所以还必须指明谁可以进行架构扩展,在默认情况下,只有Schema admins通用组的成员才有这个权限,所以要想能够进行架构扩展,必须以Schema admins成员的身份登录后运行架构扩展(架构扩展是独立的,也就是说可以在SMS安装前或安装时或安装后任意时刻进行),通常这个人也就是根域的administrator但不解的是,上面两个条件我都已经满足,为什么还不能进行架构扩展呢?看来我还需要更进一步了解这里的架构扩展过程,在这个过程中,将会增加4个类和10个属性,所以架构变动并不大,但值得注意的是,由于架构信息是GC的一部分,于是只要架构信息有了变动,它就将立即引发所有的GC进行一次完全复制,那如果有一部分GC此时没有在线将会怎样呢?是不是进行架构扩展时将会先检查所有的GC是不是正常运行,如果没有运行,是不是将不能进行架构扩展?这样一想,倒提醒了我,因为我这里确实有一台GC没有在线,这台GC是以前测试用的,它位于一个远程测试用的子域中,也是一个远程站点中,因为这个远程子域中有一台Exchange服务器,大家知道,由于Exchange服务器对GC的依赖程度所以在每个站点都应该至少有一个GC,所以我把远程子域中的DC也配置成了GC,但这个GC当时并没在线,看来也就是这个原因导致了架构扩展工具extadsch.exe不能检测到它在线,从而更新不能成功,于是进入“AD站点和服务”管理工具,取消远程站点下相应DCGC身份(如图2),具体方法是先定位到相应站点下相应DCNTDS Settings项,然后右击之进入其属性窗口,取消常规签下的“全局编录”项即可。以后要使用这个远程子域时再启用此选项即可。

再次运行extadsch.exe,这次再也不是以前的一闪而过,心想有戏了,隔了一会去看extadsch.log日志,发现更新成功了,证明前面的分析是正确的。日志如下:

<03-28-2005 00:28:29> Modifying Active Directory Schema - with SMS extensions.

<03-28-2005 00:28:30> DS Root:CN=Schema,CN=Configuration,DC=fzz,DC=com

<03-28-2005 00:28:32> Defined attribute cn=MS-SMS-Site-Code.

<03-28-2005 00:28:32> Defined attribute cn=mS-SMS-Assignment-Site-Code.

<03-28-2005 00:28:33> Defined attribute cn=MS-SMS-Site-Boundaries.

<03-28-2005 00:28:34> Defined attribute cn=MS-SMS-Roaming-Boundaries.

<03-28-2005 00:28:34> Defined attribute cn=MS-SMS-Default-MP.

<03-28-2005 00:28:35> Defined attribute cn=mS-SMS-Device-Management-Point.

<03-28-2005 00:28:35> Defined attribute cn=MS-SMS-MP-Name.

<03-28-2005 00:28:36> Defined attribute cn=MS-SMS-MP-Address.

<03-28-2005 00:28:37> Defined attribute cn=MS-SMS-Ranged-IP-Low.

<03-28-2005 00:28:37> Defined attribute cn=MS-SMS-Ranged-IP-High.

<03-28-2005 00:28:40> Defined class cn=MS-SMS-Management-Point.

<03-28-2005 00:28:40> Defined class cn=MS-SMS-Server-Locator-Point.

<03-28-2005 00:28:41> Defined class cn=MS-SMS-Site.

<03-28-2005 00:28:42> Defined class cn=MS-SMS-Roaming-Boundary-Range.

<03-28-2005 00:28:42> Successfully extended the Active Directory schema.

 

<03-28-2005 00:28:42> Please refer to the SMS documentation for instructions on the manual

<03-28-2005 00:28:42> configuration of access rights in active directory which may still

<03-28-2005 00:28:42> need to be performed.  (Although the AD schema has now be extended,

<03-28-2005 00:28:42> AD must be configured to allow each SMS Site security rights to

<03-28-2005 00:28:42> publish in each of their domains.)

 

 

注意,从上面的日志可以看出,架构更新已经成功了,但细心的你从日志的最后五行可以发现上面仅仅只是修改了“表结构”,并没有向里面写入具体内容,也就是说SMS此时并没有向AD中发布信息(虽然这已经不是本文所要解决的问题,但也顺便说一下),向AD发布信息,实质也就是向AD中写入数据,所以需要写入者有相应的权限,这个写入者根据SMS使用的不同的安全模式而不同,如果是高级安全模式,那么这个写入者就是SMS服务器的计算机帐号,如果是标准安全模式,就是SMS的服务帐号,要为它们添加相应的权限,请按下面的步骤操作,

1,运行“AD用户和计算机”管理工具

2,在“查看”菜单下选择“高级功能”

3,右击下面的system,选择“属性”

4,选择“安全”标签

5,选择“高级”按钮

6,点击“添加”按钮

7,添加相应的帐号,高级安全模式这个帐号就是SMS服务器的计算机帐号,标准安全模式就是SMS的服务帐号。

8,给这个帐号完全控制的权限,并应用到“这个对像和全部子对像”。

如果SMS的相关配置正确,可以在上面的“System/system management”下看到MPSLPSMS站点在AD中发布的信息,如图3

结语

 

这个故障的一点启示是,当一个故障发生时,我们应该全面分析这个故障可能产生的原因,最好的方法就是跟踪操作,看故障断点出现在哪里,然后对症下药就行了。

 

发表于 作者 shukoshi | 1 评论
归档在:

二次验证终端服务连接

微软的终端服务为我们远程管理提供了很大方便,与其他众多提供有类似功能的远程控制软件相比,终端服务表现更好,但是终端服务也面临暴力破解的威胁,因为只要别人知道你终端服务的IP和端口,他就可以进行连接尝试。有许多方法来降低这种潜在的危险,这里就推荐两种,它们都是对终端服务连接进行两次验证来达到目的的。

方法一:使用批处理文件

基本思路:终端服务客户端连接上之后终端服务器运行一个批处理文件,以检查客户端是否满足一些条件(比如IP、MAC、计算机名及时间是否是设定的值),只有这些条件满足后才让用户进入桌面,如果条件不满足,那么即使连接成功也是“白连接”,黑客是不能进行任何操作的。我们可以把它看作是登录验证后的第二道防线,相信可以难住一大批菜鸟级黑客。这里就以客户端的计算机名必须是fzserver才能进入桌面为例讲讲,计算机名是指客户端的NETBIOS名称,比如一台客户端的FQDN为fzserver.fzz.com,那么最前面的fzserver就是这台客户端的计算机名,这里之所以用计算机名作为条件,是因为不管客户端是在外部还是在内部它的计算机名都是不变的,而客户端的IP地址就不一定了,比如你想从家里使用终端服务,由于大家上网时的IP通常都是动态的,所以这时以IP为条件显然不行,当然如果是在局域网内部就不同了,因为局域网内部管理机通常都有固定的IP,如果客户端与终端服务器位于同一子网,我们还可以用MAC地址作为条件,这样就更加安全了,当然把它们结合起来就更好了。下面是具体操作步骤(全部在终端服务器上进行,这里是windows server 2003上的终端服务):
1,在使用之前,我们应该搞清楚当客户端连接上终端服务时我们可以从什么地方取得客户端的计算机名,实际上终端服务器会把它(还有其他一些参数)记录在注册表的HKEY_CURRENT_USER\Volatile Environment键下,Volatile Environment的意思就是一种临时环境,当一个新的会话产生时,将修改这个键下的值,用下面的批处理文件(tsc.bat)取得客户端计算机名并与合法的值进行比较,内容如下:
@echo off
for /f  ""tokens=3"" %%a in ('reg query ""HKEY_CURRENT_USER\Volatile Environment"" ^| find /i ""fzserver""') do (goto :yes)
if not defined establish goto :no
goto :EOF
:no
exit
:yes
start explorer
后面一句start explorer是前面的条件满足后就运行explorer桌面程序,如果没有这一句,客户端是不能进入桌面的,上面用到的reg.exe实用程序在windows 2000上没有,可以安装光盘上Support/tools下的支持工具包得到它。
如果上面是用IP作为限制条件,比如限定连接的客户端IP为192.168.254.66,那么就可以把上面第二行的for语句变为:
for /f ""tokens=4 delims=: "" %%a in ('netstat -na ^| find "":3389"" ^| find ""192.168.254.66""') do (goto :yes)
注意上面delims=: 后面还有一个空格,表示以冒号和空格作为分隔符。
2,要使客户端连接上之后终端服务运行此批处理文件还需要在终端服务器上进行设置,进入“终端服务配置”管理工具,双击左边的“连接”项,然后右击右窗格的连接条目,进入属性窗口,选择“环境”标签,如图1:

勾选“替代用户配置文件和远程桌面连接或终端服务客户端的设置”项,然后在下面的“程序路径和文件名”中填入第一步批处理文件的路径及文件名。
3,切换到上面的“会话”标签,勾选上“替代用户设置”项,在“结束已断开的会话”栏选择“1分钟”,在“达到会话限制,或者连接被中断时”栏选择“结束会话”,其他保持默认值,如图2。之所以这样选,是因为当你断开会话时(比如仅仅关掉了终端服务窗口)此会话默认情况下仍然存在,那么此时从另一个地方以同样的用户名进行连接时,它将不会应用上面的批处理文件,因为它连接的是一个存在的会话,所以必须设置断开会话后在短时间内就结束相关会话,这样重新连接时才会应用上面的批处理文件。最好的方法是当退出终端服务时,使用关机菜单中的注销,而不是使用断开或仅仅关闭掉终端服务窗口,因为注销将结束会话。


上面的终端服务是在windows server 2003上,windows 2000 server的终端服务同理,客户端使用的是windows XP的远程桌面客户端,要在windows 2000客户端上使用它,你可以把mstsc.exe和mstscax.dll两个文件从XP复制过来就行了。
上面这种方法有个很大的缺点,就是它是在客户端连接已经成功后才进行的检查,从安全的角度来说,最好是在登录之前就进行检查,下面我们来看第二种方法,这是在登录之前进行检查,但它是使用第三方软件来完成的。
方法二,使用SecureRDP
这种方法比较好,但唯一的缺点就是程序只能试用30天,要继续使用需要购买。你可以到http://www.download.com搜索下载SecureRDP的试用版,它的安装很简单,与其他软件安装无异,当然你应该把它安装在终端服务器上。下面来看看它的使用。
从程序菜单进入SecureRDP窗口,如图3,从图中可以看出,它是以登录过滤器(logon filters)进行检查的,

可以设置IP、计算机名、MAC地址、客户端版本及时间等过滤条件,只有当条件满足时,客户端才被允许进一步进行登录验证,比如这里仍然以计算机名作为条件,就可以点击computer Name图标,然后选择enable computer name filter,点击ADD按钮,填入客户端计算机名fzserver就行了,完成后点击工具栏第一个按钮应用设置即可。其他的设置类似,这里就不再多说。

发表于 作者 shukoshi | 0 评论
归档在:

自定义安全模板在域内分发注册表设置

我想很多朋友都遇到过这样一种情况,就是需要在域内所有的机器上更改某项注册表设置,但如果一台一台地去修改,那实在是一件效率不高又累人的事情,我就曾遇到过这种情况,直到我自定义安全模板之后,因为通过自定义安全模板,我就可以在整个域范围内使用组策略分发注册表设置,再也不必到桌面进行操作了。到底怎样操作,请看下文。

安全模板相关知识

安全模板是组策略的一个组成部分,这里的安全模板表现于组策略窗口下的“计算机配置/windows设置/安全设置/本地策略/安全选项”,虽然说是安全相关的选项,实际上它可以容纳各种注册表设置,而并非一定要是安全相关的设置,我这里的实际情况就不是安全相关的设置。
安全模板主要由sceregvl.inf文件控制,它位于%windir%\inf目录下,图1是这个文件的一部分:

500)this.width=500" border=0>
这个文件初看起来很复杂,实际上很简单,它由[version] 、[Register Registry values]和 [Strings]三个小节组成,很像INI文件的结构,其中[version]指明此文件的版本,而[Register Registry values]是我们主要关注的部分,它是注册表键路径及相关设置,而[Strings]是[Register Registry values]小节中变量的赋值区,下面我们来看看[Register Registry values]中每个条目的组成,包括四个字段(如图2):
500)this.width=500" border=0>
1, 注册表的路径,形如MACHINE\System\CurrentControlSet\Control\Lsa\AuditBaseObjects,对应于HKLM\System\CurrentControlSet\Control\Lsa\AuditBaseObjects,
2, 注册表值的类型,有五种类型,
1---REG_SZ---字符串值
2---REG_EXPAND_SZ---扩展字符串值  
3---REG_BINARY
4---REG_DWORD
7---REG_MULTI_SZ
3,在安全模板中的显示名称,可以使用变量,如果使用变量,请用%%包含起来,并在[Strings]小节中赋值
4, 显示值的类型
0 -Boolean
1 -Number
2 -String
3-Choices
4 -Multivalued
5-Bitmask
如果这里是choices或者bitmask,那么这些可选值应该被列出来,格式为“值|显示的字符串”,这些可选值之间用逗号分隔,例如:0|%RA0%,1|%RA1%,2|%RA2%

实际例子

好了,我们知道了安全模板文件的组成,这下我们就可以自定义了,下面就以我的实际例子来讲解,我们公司有个管理软件客户端,在windows2000/xp中需要修改注册表值和配置环境变量才能使用,开始时我自制了两个注册表文件,安装时手工导入即可,后来发现这样还是不方便,于是就想到了利用组策略,因为组策略很多设置都是修改注册表,所以注册表相关的就可以考虑组策略,当然后来就想到了自定义安全模板,实际上我这里的注册表设置与安全是无关的,但仍然可以在安全模板进行定义。下面将说说从自定义安全模板到在域相关OU中分发策略的大致步骤。
步骤一:根据要求修改sceregvl.inf文件
我在域控制器的sceregvl.inf 文件中[Register Registry values]小节尾部加上了下面的部分:

; 自定义设置部分
; 修改环境变量
MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\sybase,1,"C配置sybase",2
MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\DSQUERY,1,"C配置DSQUERY",2
MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\include,2,"C配置INCLUDE",2
MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\lib,2,"C配置LIB",2
MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\path,2,"C配置PATH",2
; 创建与win98兼容的IP相关配置
MACHINE\SYSTEM\currentCONTROLSET\SERVICES\CLASS\NETTRANS󠧀\ipaddress,1,"c配置IP地址",2
MACHINE\SYSTEM\currentCONTROLSET\SERVICES\CLASS\NETTRANS󠧀\ipmask,1,"c配置子网掩码",2

其中每个条目第3部分的C字头是为了便于在安全模板中进行识别,这样一眼就可以看出是自定义设置。
步骤2:完成了对sceregvl.inf的修改,还需要在计算机中登记这些新的入口(也就是新添的自定义设置),在修改此文件的计算机上运行下面的命令(通常都是在DC上):
Regsvr32 %windir%\system32\scecli.dll
注意每次修改完sceregvl.inf文件后都需要这样注册,注册完之后,在这台计算机上打开任何一个组策略编辑窗口,你就将会看到上面的自定义条目(如图3):

500)this.width=500" border=0>
步骤3:在相应域或OU的组策略窗口中给上面的自定义条目赋值,双击条目,在弹出窗口中赋值或选择即可,如图4,注意对于REG_EXPAND_SZ类型的赋值,请用双引号(””)把他们引起来,比如我这里为PATH环境变量赋值就必须把它引起来,不然它只会应用第一个分号前的值。编辑完之后,你可以在一台客户机上使用gpupdate /target:computer(XP支持)命令来刷新组策略,然后到注册表中检查是否已成功应用了修改,如果成功了,那祝贺你,如果有不如意的地方,那就再仔细检查一下上面几个步骤。
500)this.width=500" border=0>
发表于 作者 shukoshi | 6 评论
归档在:

PPPoE验证的隐患与利用

    网通(重庆网通信息港)的宽带接入通常都是LAN的方式,即所有的用户都位于一个大的局域网中,客户端要上网,需要先使用相应的帐号进行PPPoE拨号,通过验证之后获得公网IP,然后才能上网。但是就是这个PPPoE验证过程,却使得用户的帐号和密码有被窃取的可能,因为在默认情况下,这个帐号和密码是通过明文传输的,非法者只要想法监听到用户的验证过程,那么他就可以轻而易举地获得大量的用户帐号和密码,在网通,只要你有了帐号和密码,只要有网通的地方你就可以上网,这就为那些不想花钱又想上网的有心人提供了可能。现在的关键是怎样来窃取别人的帐号和密码呢?方法可以说有很多,这里就来看一种操作简单的方法,这种方法是利用PPPoE验证的缺陷来达到目的的。

但需要注意的是,正是上面所讲的原因,由于广播的不安全性,所以通常接入层交换机(这里指最终用户所直接连接的交换机)都是支持固定端口隔离的,也就是说端口与端口之间无法通信,用户接入的端口只能与上行端口通信(也就是级联到上一层交换机的端口),而且这种端口隔离是固化的,不可使用软件配置的方式进行更改,所以同一楼层的用户是无法互相监听的,但这里仍然有个漏洞,就是所有用户端口能够与上行端口通信,那如果某个用户把自己的网线连接到上行端口他不就可以监听所有用户通信了吗?实际上这是很容易实现的,因为网通的楼层交换机机柜通常都是没有锁的,你只要先在家中开启好监听软件,然后到机柜处拔掉上行线,把你的网线插入上行端口,嘿嘿,在上网高峰时刻,5秒钟时间你就可以获得一大把上网帐号和密码,至于可以实现的原因及详细的准备工作,还请参看下文。

 

注意,这种行为可能触犯法律,这里只是提供一种理论上的可能,请勿以身试法

PPPoE验证的基本过程

如图1所示,假如客户端要通过一个局域网与远方的PPPoE服务器进行身份验证,PPPoE会话有两个不同的阶段:发现阶段和PPP会话阶段。当一个客户端想开始一个PPPoE会话时,它必须首先进行发现阶段以识别对端的以太网MAC地址,并建立一个PPPoESESSION_ID。在发现阶段,基于网络的拓扑,客户端可以发现多个PPPoE服务器。发现阶段允许客户端发现所有的PPPoE服务器,然后从中选择一个,不过通常都是选择反应最快的一个,这与DHCP发现过程是不是很类似?当发现阶段成功完成,客户端和它选择的PPPoE服务器都有了它们在以太网上建立PPP连接的信息。直到PPP会话建立,发现阶段一直保持无状态的状态。一旦PPP会话建立,客户端和PPPoE服务器都必须为PPP虚拟接口分配资源。图2显示了PPPoE通信流程。

发现阶段有四个步骤,当此阶段完成,通信的两端都知道PPPoESESSION_ID和对端的以太网地址,他们一起唯一定义PPPoE会话。这些步骤包括:客户端广播一个发起分组(PADI),一个或多个PPPoE服务器发送响应分组(PADO),客户端向选中的服务器发送请求分组(PADR),选中的PPPoE服务器发送一个确认分组(PADS)给客户端。当客户端接收到确认分组,它可以开始进行PPP会话阶段。当PPPoE服务器发送出确认分组,它可以开始进行PPP会话阶段。当客户端在指定的时间内没有接收到PADO,它应该重新发送它的PADI分组,并且加倍等待时间,这个过程会被重复期望的次数。如果客户端正在等待接收PADS,应该使用具有客户端重新发送PADR的相似超时机制。在重试指定的次数后,主机应该重新发送PADI分组。PPPoE还有一个PADT分组,它可以在会话建立后的任何时候发送,来终止PPPOE会话。它可以由客户端或者PPPoE服务器发送。当接收到一个PADT,不再允许使用这个会话来发送PPP业务。在发送或接收PADT后,即使正常的PPP终止分组也不必发送。PPP对端应该使用PPP协议自身来终止PPPoE会话,但是当PPP不能使用时,可以使用PADT。一旦PPPoE会话开始,PPP数据就可以以任何其它的PPP封装形式发送。所有的以太网帧都是单播的,身份验证是发生在会话阶段的。PPPOE会话的SESSION_ID一定不能改变,并且必须是发现阶段分配的值。

 

从上面的过程我们需要注意两点:

1,  发现阶段是广播方式进行的,会话阶段是单播;

2,  客户端通常选择反应快的PPPoE服务器进行身份验证和接入,什么是反应快,我们可以理解成客户端将与最近的PPPoE服务器进行身份验证,这就是今天要说的关键,如果你自己架设一个PPPoE服务器,那与你同一交换机(通常是一个楼层的)的用户都将会选择这个服务器进行接入和身份验证而不会去找远方的服务器!于是,这时至少同一交换机的用户帐号和密码将自动送上门来,你只管开一个sniffer软件就可以轻而易举的获得这些帐号和密码。可能你要说,怎样做PPPoE服务器呢?难不成我还要去买一个硬件东西,这样是不是有点得不偿失,毕竟一个硬件形式的PPPoE服务器价格不菲,呵呵,不必沮丧,如果真要去买一个硬东西,也不会有这篇文章了,既然路由器都可以在操作系统上实现,PPPoE服务器为什么不可以?这里就将把你的路由与远程访问服务变成一个PPPoE服务器,这也是本文真正要说的:)

 

RRAS增加PPPoE服务功能的具体过程

 

首先要保证你的“PPPoE服务器”是一台windows 2000/2003 server,我这里是用的windows server 2003,因为将会用到它的“路由与远程访问”服务(实际上使用win98winxp等都行,但操作比较复杂,这里就略过)。下面是具体步骤:

1,  启用路由与远程访问服务

默认情况下,路由与远程访问服务是没有启用的,从“管理工具”中运行“路由与远程访问”管理单元,然后在窗口中右击服务器图标选择“配置并启用路由与远程访问”,在向导里选择“手动配置服务器”。

2,  安装PPPoE驱动

这里要安装的是RASPPPOE_098B驱动,它可以让你的路由与远程访问服务增加PPPoE服务功能,下载后安装这个驱动:

A,把压缩包解压到一个目录;

右击网上邻居,进入其属性窗口,然后右击其中的本地连接图标,在弹出的属性窗口中选择“安装/协议”,然后选择上面的解压目录,确定安装。安装完成之后你将在本地连接属性中看到“PPP over Ethernet Protocol”条目,如图3

  3,配置路由与远程访问服务使用明文验证
虽然此时你的这台计算机已经是一台PPPoE服务器了,但此时你sniffer不到明文密码,因为此时客户端与服务器协商结果不会使用PAP明文验证协议,我们需要进一步配置以得到明文密码,再次进入RRAS(路由与远程访问)管理窗口,右击服务器图标,进入属性窗口,选择“安全”标签,在“身份验证提供程序”栏选择“windows身份验证”,然后点击下面的“身份验证方法”按钮,取消其他所有验证方法,只选择“不加密的密码(PAP)”,如图4,确定时会弹出一个对话框,选择“否”即可。

接着定位到窗口中的“远程访问策略”,双击打开第一条策略,这条策略通常就叫“到其他访问服务器的链接”,在它的属性窗口会看到一条名叫“Day-And-Time-Restrictions”的策略,确保它在任何时间都是允许的,然后点击下方的“编辑配置文件”按钮,弹出新窗口,选择“身份验证”标签,与上面一样,只选择“未加密的身份验证(PAPSPAP)”项。

这样你的工作就完成了,在这台服务器上打开你的sniffer软件,开始监听吧,建议使用Ethereal。结果如图5所示,从中可以清楚地看到帐号和密码。

后记

 

请注意,如果你在一个电信ADSL拨号环境中安装了这个PPPoE服务器,那么你的ADSL拨号也将不会成功,因为它不会跑到电信去验证了,所以拨号不会成功,小心别人利用这点在你局域网中进行PPPoE拒绝服务攻击啊,另外,用这种方法来获取公司的ADSL上网帐号和密码简直太容易了,因为公司内网的交换通常都不是“固定端口隔离”的,所以用上面的方法可以很容易监听到密码,与网通一样,中国电信的ADSL帐号也是随处可用,只要你开通了ADSL的,所以你得小心公司的ADSL帐号被“内贼”盗取。

当然从上面所讲你也许还可以想到利用这个PPPOE做点别的“好事”,比如让它真正成为你公司的一个PPPoE服务器,让只有拨号成功的用户才能上网,就像网通一样,当然此时你千万不能把身份验证配置为PAP了,我想网通也该改进一下他们的身份验证方法了。

 

发表于 作者 shukoshi | 3 评论
归档在: