防火墙的原理及应用

posted on 2006年5月1日 23:45 由 中国IT网

防火墙定义

  防火墙就是一个位于计算机和它所连接的网络之间的软件。该计算机流入流出的所有网络通信均要经过此防火墙。

  防火墙的功能

  防火墙对流经它的网络通信进行扫描,这样能够过滤掉一些攻击,以免其在目标计算机上被执行。防火墙还可以关闭不使用的端口。而且它还能禁止特定端口的流出通信,封锁特洛伊木马。最后,它可以禁止来自特殊站点的访问,从而防止来自不明入侵者的所有通信。

  为什么使用防火墙

  防火墙具有很好的保护作用。入侵者必须首先穿越防火墙的安全防线,才能接触目标计算机。你可以将防火墙配置成许多不同保护级别。高级别的保护可能会禁止一些服务,如视频流等,但至少这是你自己的保护选择。

  防火墙的类型

  防火墙有不同类型。一个防火墙可以是硬件自身的一部分,你可以将因特网连接和计算机都插入其中。防火墙也可以在一个独立的机器上运行,该机器作为它背后网络中所有计算机的代理和防火墙。最后,直接连在因特网的机器可以使用个人防火墙。


  《一》防火墙的工作原理

什么是防火墙?

  防火墙就是一种过滤塞(目前你这么理解不算错),你可以让你喜欢的东西通过这个塞子,别的玩意都统统过滤掉。在网络的世界里,要由防火墙过滤的就是承载通信数据的通信包。

  天下的防火墙至少都会说两个词:Yes或者No。直接说就是接受或者拒绝。最简单的防火墙是以太网桥。但几乎没有人会认为这种原始防火墙能管多大用。大多数防火墙采用的技术和标准可谓五花八门。这些防火墙的形式多种多样:有的取代系统上已经装备的TCP/IP协议栈;有的在已有的协议栈上建立自己的软件模块;有的干脆就是独立的一套操作系统。还有一些应用型的防火墙只对特定类型的网络连接提供保护(比如SMTP或者HTTP协议等)。还有一些基于硬件的防火墙产品其实应该归入安全路由器一类。以上的产品都可以叫做防火墙,因为他们的工作方式都是一样的:分析出入防火墙的数据包,决定放行还是把他们扔到一边。

  所有的防火墙都具有IP地址过滤功能。这项任务要检查IP包头,根据其IP源地址和目标地址作出放行/丢弃决定。看看下面这张图,两个网段之间隔了一个防火墙,防火墙的一端有台UNIX计算机,另一边的网段则摆了台PC客户机。

  当PC客户机向UNIX计算机发起telnet请求时,PC的telnet客户程序就产生一个TCP包并把它传给本地的协议栈准备发送。接下来,协议栈将这个TCP包“塞”到一个IP包里,然后通过PC机的TCP/IP栈所定义的路径将它发送给UNIX计算机。在这个例子里,这个IP包必须经过横在PC和UNIX计算机中的防火墙才能到达UNIX计算机。

  现在我们“命令”(用专业术语来说就是配制)防火墙把所有发给UNIX计算机的数据包都给拒了,完成这项工作以后,“心肠”比较好的防火墙还会通知客户程序一声呢!既然发向目标的IP数据没法转发,那么只有和UNIX计算机同在一个网段的用户才能访问UNIX计算机了。

 

  还有一种情况,你可以命令防火墙专给那台可怜的PC机找茬,别人的数据包都让过就它不行。这正是防火墙最基本的功能:根据IP地址做转发判断。但要上了大场面这种小伎俩就玩不转了,由于黑客们可以采用IP地址欺骗技术,伪装成合法地址的计算机就可以穿越信任这个地址的防火墙了。不过根据地址的转发决策机制还是最基本和必需的。另外要注意的一点是,不要用DNS主机名建立过滤表,对DNS的伪造比IP地址欺骗要容易多了。

  服务器TCP/UDP 端口过滤

  仅仅依靠地址进行数据过滤在实际运用中是不可行的,还有个原因就是目标主机上往往运行着多种通信服务,比方说,我们不想让用户采用 telnet的方式连到系统,但这绝不等于我们非得同时禁止他们使用SMTP/POP邮件服务器吧?所以说,在地址之外我们还要对服务器的TCP/ UDP端口进行过滤。

 

  比如,默认的telnet服务连接端口号是23。假如我们不许PC客户机建立对UNIX计算机(在这时我们当它是服务器)的telnet连接,那么我们只需命令防火墙检查发送目标是UNIX服务器的数据包,把其中具有23目标端口号的包过滤就行了。这样,我们把IP地址和目标服务器TCP/UDP端口结合起来不就可以作为过滤标准来实现相当可靠的防火墙了吗?不,没这么简单。

  客户机也有TCP/UDP端口

  TCP/IP是一种端对端协议,每个网络节点都具有唯一的地址。网络节点的应用层也是这样,处于应用层的每个应用程序和服务都具有自己的对应“地址”,也就是端口号。地址和端口都具备了才能建立客户机和服务器的各种应用之间的有效通信联系。比如,telnet服务器在端口23侦听入站连接。同时telnet客户机也有一个端口号,否则客户机的IP栈怎么知道某个数据包是属于哪个应用程序的呢?

  由于历史的原因,几乎所有的TCP/IP客户程序都使用大于1023的随机分配端口号。只有UNIX计算机上的root用户才可以访问1024以下的端口,而这些端口还保留为服务器上的服务所用。所以,除非我们让所有具有大于1023端口号的数据包进入网络,否则各种网络连接都没法正常工作。

 

  这对防火墙而言可就麻烦了,如果阻塞入站的全部端口,那么所有的客户机都没法使用网络资源。因为服务器发出响应外部连接请求的入站(就是进入防火墙的意思)数据包都没法经过防火墙的入站过滤。反过来,打开所有高于1023的端口就可行了吗?也不尽然。由于很多服务使用的端口都大于1023,比如X client、基于RPC的NFS服务以及为数众多的非UNIX IP产品等(NetWare/IP)就是这样的。那么让达到1023端口标准的数据包都进入网络的话网络还能说是安全的吗?连这些客户程序都不敢说自己是足够安全的。


  双向过滤

  OK,咱们换个思路。我们给防火墙这样下命令:已知服务的数据包可以进来,其他的全部挡在防火墙之外。比如,如果你知道用户要访问Web服务器,那就只让具有源端口号80的数据包进入网络:

 

  不过新问题又出现了。首先,你怎么知道你要访问的服务器具有哪些正在运行的端口号呢? 象HTTP这样的服务器本来就是可以任意配置的,所采用的端口也可以随意配置。如果你这样设置防火墙,你就没法访问哪些没采用标准端口号的的网络站点了!反过来,你也没法保证进入网络的数据包中具有端口号80的就一定来自Web服务器。有些黑客就是利用这一点制作自己的入侵工具,并让其运行在本机的80端口!

  检查ACK位

  源地址我们不相信,源端口也信不得了,这个不得不与黑客共舞的疯狂世界上还有什么值得我们信任呢?还好,事情还没到走投无路的地步。对策还是有的,不过这个办法只能用于TCP协议。

  TCP是一种可靠的通信协议,“可靠”这个词意味着协议具有包括纠错机制在内的一些特殊性质。为了实现其可靠性,每个TCP连接都要先经过一个“握手”过程来交换连接参数。还有,每个发送出去的包在后续的其他包被发送出去之前必须获得一个确认响应。但并不是对每个TCP包都非要采用专门的ACK包来响应,实际上仅仅在TCP包头上设置一个专门的位就可以完成这个功能了。所以,只要产生了响应包就要设置ACK位。连接会话的第一个包不用于确认,所以它就没有设置ACK位,后续会话交换的TCP包就要设置ACK位了。

 

  举个例子,PC向远端的Web服务器发起一个连接,它生成一个没有设置ACK位的连接请求包。当服务器响应该请求时,服务器就发回一个设置了ACK位的数据包,同时在包里标记从客户机所收到的字节数。然后客户机就用自己的响应包再响应该数据包,这个数据包也设置了ACK位并标记了从服务器收到的字节数。通过监视ACK位,我们就可以将进入网络的数据限制在响应包的范围之内。于是,远程系统根本无法发起TCP连接但却能响应收到的数据包了。

  这套机制还不能算是无懈可击,简单地举个例子,假设我们有台内部Web服务器,那么端口80就不得不被打开以便外部请求可以进入网络。还有,对UDP包而言就没法监视ACK位了,因为UDP包压根就没有ACK位。还有一些TCP应用程序,比如FTP,连接就必须由这些服务器程序自己发起。

  FTP带来的困难

  一般的Internet服务对所有的通信都只使用一对端口号,FTP程序在连接期间则使用两对端口号。第一对端口号用于FTP的“命令通道”提供登录和执行命令的通信链路,而另一对端口号则用于FTP的“数据通道”提供客户机和服务器之间的文件传送。

  在通常的FTP会话过程中,客户机首先向服务器的端口21(命令通道)发送一个TCP连接请求,然后执行LOGIN、DIR等各种命令。一旦用户请求服务器发送数据,FTP服务器就用其20端口 (数据通道)向客户的数据端口发起连接。问题来了,如果服务器向客户机发起传送数据的连接,那么它就会发送没有设置ACK位的数据包,防火墙则按照刚才的规则拒绝该数据包同时也就意味着数据传送没戏了。通常只有高级的、也就是够聪明的防火墙才能看出客户机刚才告诉服务器的端口,然后才许可对该端口的入站连接。

 

  UDP端口过滤

  好了,现在我们回过头来看看怎么解决UDP问题。刚才说了,UDP包没有ACK位所以不能进行ACK位过滤。UDP 是发出去不管的“不可靠”通信,这种类型的服务通常用于广播、路由、多媒体等广播形式的通信任务。NFS、DNS、WINS、NetBIOS-over-TCP/IP和 NetWare/IP都使用UDP。

  看来最简单的可行办法就是不允许建立入站UDP连接。防火墙设置为只许转发来自内部接口的UDP包,来自外部接口的UDP包则不转发。现在的问题是,比方说,DNS名称解析请求就使用UDP,如果你提供DNS服务,至少得允许一些内部请求穿越防火墙。还有IRC这样的客户程序也使用UDP,如果要让你的用户使用它,就同样要让他们的UDP包进入网络。我们能做的就是对那些从本地到可信任站点之间的连接进行限制。但是,什么叫可信任!如果黑客采取地址欺骗的方法不又回到老路上去了吗?

  有些新型路由器可以通过“记忆”出站UDP包来解决这个问题:如果入站UDP包匹配最近出站UDP包的目标地址和端口号就让它进来。如果在内存中找不到匹配的UDP包就只好拒绝它了!但是,我们如何确信产生数据包的外部主机就是内部客户机希望通信的服务器呢?如果黑客诈称DNS服务器的地址,那么他在理论上当然可以从附着DNS的UDP端口发起攻击。只要你允许DNS查询和反馈包进入网络这个问题就必然存在。办法是采用代理服务器。

  所谓代理服务器,顾名思义就是代表你的网络和外界打交道的服务器。代理服务器不允许存在任何网络内外的直接连接。它本身就提供公共和专用的DNS、邮件服务器等多种功能。代理服务器重写数据包而不是简单地将其转发了事。给人的感觉就是网络内部的主机都站在了网络的边缘,但实际上他们都躲在代理的后面,露面的不过是代理这个假面具。

  小结

  IP地址可能是假的,这是由于IP协议的源路有机制所带来的,这种机制告诉路由器不要为数据包采用正常的路径,而是按照包头内的路径传送数据包。于是黑客就可以使用系统的IP地址获得返回的数据包。有些高级防火墙可以让用户禁止源路由。通常我们的网络都通过一条路径连接ISP,然后再进入Internet。这时禁用源路由就会迫使数据包必须沿着正常的路径返回。

  还有,我们需要了解防火墙在拒绝数据包的时候还做了哪些其他工作。比如,防火墙是否向连接发起系统发回了“主机不可到达”的ICMP消息?或者防火墙真没再做其他事?这些问题都可能存在安全隐患。ICMP“主机不可达”消息会告诉黑客“防火墙专门阻塞了某些端口”,黑客立即就可以从这个消息中闻到一点什么气味。如果ICMP“主机不可达”是通信中发生的错误,那么老实的系统可能就真的什么也不发送了。反过来,什么响应都没有却会使发起通信的系统不断地尝试建立连接直到应用程序或者协议栈超时,结果最终用户只能得到一个错误信息。当然这种方式会让黑客无法判断某端口到底是关闭了还是没有使用。

 

《二》防火墙及防火墙的渗透

  (一)  防火墙介绍

    防火墙是一种功能,它使得内部网络和外部网络或Internet互相隔离,以此来保护内部网络或主机。简单的防火墙可以由Router,3 Layer Switch的ACL(access control list)来充当,也可以用一台主机,甚至是一个子网来实现。复杂的可以购买专门的硬件防火墙或软件防火墙来实现。
    
    防火墙的功能有:
    1、过滤掉不安全服务和非法用户
    2、控制对特殊站点的访问
    3、提供监视Internet安全和预警的方便端点
    
    防火墙并不是万能的,也有很多防火墙无能为力的地方:
    1、防火墙防不住绕过防火墙的攻击。比如,防火墙不限制从内部网络到外部网络的连接,那么,一些内部用户可能形成一个直接通往Internet的连接,从而绕过防火墙,造成一个潜在的backdoor.恶意的外部用户直接连接到内部用户的机器上,以这个内部用户的机器为跳板,发起绕过防火墙的不受限制的攻击。
    2、防火墙不是防毒墙,不能拦截带病毒的数据在网络之间传播。
    3、防火墙对数据驱动式攻击也无能为力。

    因此,我们不能过分依赖防火墙。网络的安全是一个整体,并不是有某一样特别出色的配置。网络安全遵循的是“木桶原则”。

    一般防火墙具备以下特点:

    1、广泛的服务支持:通过将动态的、应用层的过滤能力和认证相结合,可实现WWW浏览器、HTTP服务器、 FTP等;

    2、对私有数据的加密支持:保证通过Internet进行虚拟私人网络和商务活动不受损坏;

    3、客户端认证只允许指定的用户访问内部网络或选择服务:企业本地网与分支机构、商业伙伴和移动用户间安全通信的附加部分;

    4、反欺骗:欺骗是从外部获取网络访问权的常用手段,它使数据包好似来自网络内部。防火墙能监视这样的数据包并能扔掉它们;

    5、C/S模式和跨平台支持:能使运行在一平台的管理模块控制运行在另一平台的监视模块。

    让我们来看看传统的防火墙工作原理及优缺点:
    
    1.(传统的)包过滤防火墙的工作原理

  包过滤是在IP层实现的,因此,它可以只用路由器完成。包过滤根据包的源IP地址、目的IP地址、源端口、目的端口及包传递方向等报头信息来判断是否允许包通过。过滤用户定义的内容,如IP地址。其工作原理是系统在网络层检查数据包,与应用层无关,包过滤器的应用非常广泛,因为CPU用来处理包过滤的时间可以忽略不计。而且这种防护措施对用户透明,合法用户在进出网络时,根本感觉不到它的存在,使用起来很方便。这样系统就具有很好的传输性能,易扩展。但是这种防火墙不太安全,因为系统对应用层信息无感知——也就是说,它们不理解通信的内容,不能在用户级别上进行过滤,即不能识别不同的用户和防止IP地址的盗用。如果攻击者把自己主机的IP地址设成一个合法主机的IP地址,就可以很轻易地通过包过滤器,这样更容易被黑客攻破。 基于这种工作机制,包过滤防火墙有以下缺陷:

  通信信息:包过滤防火墙只能访问部分数据包的头信息;

  通信和应用状态信息:包过滤防火墙是无状态的,所以它不可能保存来自于通信和应用的状态信息;

  信息处理:包过滤防火墙处理信息的能力是有限的。

    比如针对微软IIS漏洞的Unicode攻击,因为这种攻击是走的防火墙所允许的80端口,而包过滤的防火墙无法对数据包内容进行核查,因此此时防火墙等同于虚设,未打相应patch的提供web服务的系统,即使在防火墙的屏障之后,也会被攻击者轻松拿下超级用户的权限。

    包过滤防火墙的缺点和不足,可以在应用层解决。下面我们来看看应用层网关

  2.应用网关
    
    1、应用代理服务器(Application Gateway Proxy)

    在网络应用层提供授权检查及代理服务。当外部某台主机试图访问受保护网络时,必须先在防火墙上经过身份认证。通过身份认证后,防火墙运行一个专门为该网络设计的程序,把外部主机与内部主机连接。在这个过程中,防火墙可以限制用户访问的主机、访问时间及访问的方式。同样,受保护网络内部用户访问外部网时也需先登录到防火墙上,通过验证后,才可访问。

    应用网关代理的优点是既可以隐藏内部IP地址,也可以给单个用户授权,即使攻击者盗用了一个合法的IP地址,也通不过严格的身份认证。因此应用网关比报文过滤具有更高的安全性。但是这种认证使得应用网关不透明,用户每次连接都要受到认证,这给用户带来许多不便。这种代理技术需要为每个应用写专门的程序。

    2、回路级代理服务器

    即通常意义的代理服务器,它适用于多个协议,但不能解释应用协议,需要通过其他方式来获得信息,所以,回路级代理服务器通常要求修改过的用户程序。

    套接字服务器(Sockets Server)就是回路级代理服务器。套接字(Sockets)是一种网络应用层的国际标准。当受保护网络客户机需要与外部网交互信息时,在防火墙上的套服务器检查客户的User ID、IP源地址和IP目的地址,经过确认后,套服务器才与外部的服务器建立连接。对用户来说,受保护网与外部网的信息交换是透明的,感觉不到防火墙的存在,那是因为网络用户不需要登录到防火墙上。但是客户端的应用软件必须支持 “Socketsified API”,受保护网络用户访问公共网所使用的IP地址也都是防火墙的IP地址。

    3、代管服务器

    代管服务器技术是把不安全的服务如FTP、Telnet等放到防火墙上,使它同时充当服务器,对外部的请求作出回答。与应用层代理实现相比,代管服务器技术不必为每种服务专门写程序。而且,受保护网内部用户想对外部网访问时,也需先登录到防火墙上,再向外提出请求,这样从外部网向内就只能看到防火墙,从而隐藏了内部地址,提高了安全性。

    4、IP通道(IP Tunnels)

    如果一个大公司的两个子公司相隔较远,通过Internet通信。这种情况下,可以采用IP Tunnels来防止Internet上的黑客截取信息,从而在Internet上形成一个虚拟的企业网。

    5、网络地址转换器(NAT Network Address Translate)

    当受保护网连到Internet上时,受保护网用户若要访问Internet,必须使用一个合法的IP地址。但由于合法Internet IP地址有限,而且受保护网络往往有自己的一套IP地址规划(非正式IP地址)。网络地址转换器就是在防火墙上装一个合法IP地址集。当内部某一用户要访问Internet时,防火墙动态地从地址集中选一个未分配的地址分配给该用户,该用户即可使用这个合法地址进行通信。同时,对于内部的某些服务器如Web服务器,网络地址转换器允许为其分配一个固定的合法地址。外部网络的用户就可通过防火墙来访问内部的服务器。这种技术既缓解了少量的IP地址和大量的主机之间的矛盾,又对外隐藏了内部主机的IP地址,提高了安全性。

    6、隔离域名服务器(Split Domain Name Server )

    这种技术是通过防火墙将受保护网络的域名服务器与外部网的域名服务器隔离,使外部网的域名服务器只能看到防火墙的IP地址,无法了解受保护网络的具体情况,这样可以保证受保护网络的IP地址不被外部网络知悉。

   7、邮件技术(Mail Forwarding)

    当防火墙采用上面所提到的几种技术使得外部网络只知道防火墙的IP地址和域名时,从外部网络发来的邮件,就只能送到防火墙上。这时防火墙对邮件进行检查,只有当发送邮件的源主机是被允许通过的,防火墙才对邮件的目的地址进行转换,送到内部的邮件服务器,由其进行转发。

  应用网关是检查所有应用层的信息包,并将检查的内容信息放入决策过程,这样安全性有所提高。然而,它们是通过打破客户机/服务器模式实现的,每一个客户机/服务器通信需要两个连接:一个是从客户端到防火墙,另一个是从防火墙到服务器。另外,每一个代理需要一个不同的应用进程,或一个后台运行的服务程序,这样如果有一个新的应用就必须添加对此应用的服务程序,否则不能使用该种服务,可伸缩性差。 基于这种工作机制,应用网关防火墙有以下缺陷:

  连接限制:每一个服务需要自己的代理,所以可提供的服务数和伸缩性受到限制;

  技术限制:应用网关不能为UDP、RPC及普通协议族的其他服务提供代理;

  性能:实现应用网关防火墙牺牲了一些系统性能。

    
防火墙的体系结构及组合形式

    1、屏蔽路由器(Screening Router)

    这是防火墙最基本的构件。它可以由厂家专门生产的路由器实现,也可以用主机来实现。屏蔽路由器作为内外连接的唯一通道,要求所有的报文都必须在此通过检查。路由器上可以装基于IP层的报文过滤软件,实现报文过滤功能。许多路由器本身带有报文过滤配置选项,但一般比较简单。

单纯由屏蔽路由器构成的防火墙的危险带包括路由器本身及路由器允许访问的主机。它的缺点是一旦被攻陷后很难发现,而且不能识别不同的用户。

    2、双宿主机网关(Dual Homed Gateway)

    任何拥有多个接口卡的系统都被称为多宿的,双宿主机网关是用一台装有两块网卡的主机做防火墙。两块网卡各自与受保护网和外部网相连。主机上运行着防火墙软件,可以转发应用程序,提供服务等。

    双宿主机网关优于屏蔽路由器的地方是:堡垒主机的系统软件可用于维护系统日志、硬件拷贝日志或远程日志。这对于日后的检查很有用。但这不能帮助网络管理者确认内网中哪些主机可能已被黑客入侵。

    双宿主机网关的一个致命弱点是:一旦入侵者侵入堡垒主机并使其只具有路由功能,则任何网上用户均可以随便访问内网。

    3、被屏蔽主机网关(Screened Host Gateway)

    屏蔽主机网关易于实现也很安全,因此应用广泛。例如,一个分组过滤路由器连接外部网络,同时一个堡垒主机安装在内部网络上,通常在路由器上设立过滤规则,并使这个堡垒主机成为从外部网络唯一可直接到达的主机,这确保了内部网络不受未被授权的外部用户的攻击。

    如果受保护网是一个虚拟扩展的本地网,即没有子网和路由器,那么内网的变化不影响堡垒主机和屏蔽路由器的配置。危险带限制在堡垒主机和屏蔽路由器。网关的基本控制策略由安装在上面的软件决定。如果攻击者设法登录到它上面,内网中的其余主机就会受到很大威胁。这与双穴主机网关受攻击时的情形差不多。

    4、被屏蔽子网 (Screened Subnet)

    这种方法是在内部网络和外部网络之间建立一个被隔离的子网,用两台分组过滤路由器将这一子网分别与内部网络和外部网络分开。在很多实现中,两个分组过滤路由器放在子网的两端,在子网内构成一个“非军事区”DMZ。有的屏蔽子网中还设有一堡垒主机作为唯一可访问点,支持终端交互或作为应用网关代理。这种配置的危险带仅包括堡垒主机、子网主机及所有连接内网、外网和屏蔽子网的路由器。

    如果攻击者试图完全破坏防火墙,他必须重新配置连接三个网的路由器,既不切断连接又不要把自己锁在外面,同时又不使自己被发现,这样也还是可能的。但若禁止网络访问路由器或只允许内网中的某些主机访问它,则攻击会变得很困难。在这种情况下,攻击者得先侵入堡垒主机,然后进入内网主机,再返回来破坏屏蔽路由器,整个过程中不能引发警报。

    建造防火墙时,一般很少采用单一的技术,通常是多种解决不同问题的技术的组合。这种组合主要取决于网管中心向用户提供什么样的服务,以及网管中心能接受什么等级风险。采用哪种技术主要取决于经费,投资的大小或技术人员的技术、时间等因素。一般有以下几种形式:
1、使用多堡垒主机;
2、合并内部路由器与外部路由器;
3、合并堡垒主机与外部路由器;
4、合并堡垒主机与内部路由器;
5、使用多台内部路由器;
6、使用多台外部路由器;
7、使用多个周边网络;
8、使用双重宿主主机与屏蔽子网。

    随着人们对网络安全意识的提高,防火墙的应用越来越广泛。有钱的用高级硬件防火墙,没钱的用免费的软件防火墙。那么,硬件防火墙和软件防火墙相比,有哪些优点呢?
    硬件防火墙采用专用的硬件设备,然后集成生产厂商的专用防火墙软件。从功能上看,硬件防火墙内建安全软件,使用专属或强化的操作系统,管理方便,更换容易,软硬件搭配较固定。硬件防火墙效率高,解决了防火墙效率、性能之间的矛盾,可以达到线性。
软件防火墙一般基于某个操作系统平台开发,直接在计算机上进行软件的安装和配置。由于客户平台的多样性,软件防火墙需支持多操作系统,如Unix、Linux、SCO-Unix、Windows等,代码庞大、安装成本高、售后支持成本高、效率低。

1、性能优势。防火墙的性能对防火墙来说是至关重要的。它决定了每秒钟通过防火墙的数据流量。单位是Bps,从几十M到几百M不等,还有千兆防火墙甚至达到几G的防火墙。而软件防火墙则不可能达到如此高的速率。

2、CPU占用率的优势。硬件防火墙的CPU占用率当然是0了,而软件防火墙就不同了,如果处于节约成本的考虑将防火墙软件安装在提供服务的主机上,当数据流量较大时,CPU占用率将是主机的杀手,将拖跨主机。

3、售后支持。硬件防火墙厂家会对防火墙产品有跟踪的服务支持,而软件防火墙的用户能得到这种机会的相对较少,而且厂家也不会在软件防火墙上下太大的功夫和研发经费。



------------------------------------------------------------

(二)防火墙渗透

    以上我们简单的介绍了防火墙的原理,分类,优缺点等。下面,我们将对防火墙的渗透技术做一下简单的介绍。

    精心配置过的防火墙固然将让绝大多数crackers挡在外围,掌握网络控制的主动权,但是,防火墙并不是万能的,我们也在上一节的内容中简单的讲了防火墙的缺点。没有任何一样网络产品可以说是绝对安全的。绿盟的san的一篇的文章介绍了渗透防火墙的shellcode,有兴趣的朋友可以参考一下:http://www.winnerinfo.net/infoview.asp?Kind=145&ID=529 ,我在这里想再提起“通道技术”。

    说到通道技术,我想再提一下“端口复用”,很多朋友以为通道技术就是端口复用技术。那么,错了,端口复用是指一个端口上建立了多个连接,而不是在一个端口上面开放了多个服务而互不干扰。假如你想在已经开放了WWW服务的主机上,在80端口再添加一项服务,只有2种可能:1.添加服务失败 2.WWW服务出错。那么什么是通道呢?这里所谓的通道,是指一种绕过防火墙端口屏蔽的通讯方式。防火墙两端的数据包封装在防火墙所允许通过的数据包类型或是端口上,然后穿过防火墙与处在防火墙后面的主机通讯,当封装的数据包到达目的地时,再将数据包还原,并将还原后的数据包交送到相应的服务上,是在一个端口上面开放了多个服务而互不干扰的。

    为了通信,不论是什么防火墙,都不可能把所有的服务,所有的端口都封闭。(如果有那样的防火墙,还不如拔网线来的直接,呵呵)大多数的防火墙或多或少都要开放一个端口或服务(比如HTTP),只要开放了端口和服务,就给了我们渗透的可能。HTTP是一种比较简单而常用的互交式协议,你给服务器发送一个请求,服务器就返回给你一个回应。几乎所有的主机都被允许发送HTTP请求。网络上HTTP协议使用的是如此广泛,这也决定了我们可以通过使用通道技术而轻松的通过防火墙或其他类似设备而将我们需要的数据发送至目标。一个很典型的例子就是http-tunnel.

    在http-tunnel的官方网站http://www.http-tunnel.com上有这么一句话:“http-tunnel在HTTP请求中建立了一个双向的虚拟数据连接。HTTP请求可以经过代理而被发送,这就可以被那些处在限制了端口的防火墙背后的用户使用。如果通过HTTP代理的WWW浏览是被允许的,那么http-tunnel也就可以成立,也就是说,可以在防火墙外telnet或者PPP到防火墙的内部。”这样看来,攻击者可以使用这种技术来实现远程控制。我们来看看http-tunnel的设计思路:

    A主机在防火墙的外面,没有做任何限制。B主机在防火墙内部,受到防火墙保护,防火墙配置的访问控制原则是只允许80端口的数据进出,但主机开放了telnet服务。现在假设需要从A系统Telnet到B系统上去,怎么办?使用正常的telnet肯定是不可能了,因为telnet使用的23端口被防火墙屏蔽,防火墙收到这个telnet的包后,发现不符合只允许80端口的数据通过的过滤原则,就丢弃了。但我们知道可用的有80端口,那么这个时候使用Httptunnel通道,就是一个好的办法,思路如下:

    在A机器上运行tunnel的客户端,让它侦听本机的一个不被使用的任意指定端口(最好是1024以上65535以下),如,8888。同时将来自8888端口上的数据指引到B机的80端口上,因为是80端口,防火墙是允许通过的。然后在B机上起一个服务端,(在只有80端口对外开放的情况下,只能先得到一个WEBSHELL,想办法提升自己的权限,并运行服务端)同样挂接在80端口上,同时指引80端口的来自客户端的转发到本机的telnet服务端口23,这样就OK了。现在在A机上telnet本机端口8888,根据刚才的设置数据包会被转发到目标端口为80的B机,因为防火墙允许通过80端口的数据,因此数据包畅通的穿过防火墙,到达B机。此时B机在80端口侦听的进程收到来自A的数据包,会将数据包还原,再交还给telnet进程。当数据包需要由B到A返回时,将由80端口再回送,同样可以顺利的通过防火墙。

    上述功能似乎用端口映射也能做的到,把A主机上的23端口重定向到80端口,再把B主机上的80端口重定向到23端口就行了。但如果B主机已经开启了WWW服务了呢?要使用上述功能,使用端口映射必须牺牲B主机的80端口,这是得不偿失的。试想在一次渗透防火墙的对某台主机的攻击中,把别人本来已经开启的WWW服务DOWN了,你还能在这台主机上呆多久?但是,使用http-tunnel就可以完美实现,即使B主机已经开放80,提供WWW,我们也照样可以发送telnet到其80端口上,享受到“正版”的telnet服务。

    对于通道技术,我们的解决方案是采用应用层的数据包检测技术,因为在正常的HTTP请求中,GET、POST等行为是必不可少的,如果来自一个连接的HTTP请求中,总是没有GET、POST,那么这个连接肯定有问题。从而终止此连接。现在已经有公司的IDS产品能够查出隐藏在80中的tunnel,但是这些IDS产品的费用恐怕也不是中小型企业能承受的了的。

    对于防火墙的渗透,还有一些方法,比如找防火墙本身的设计缺陷等等,但那些难度太大。恐怕不是我们应该考虑的了。

--------------------------------------------------------

总结:

我们又把防火墙和防火墙的渗透深入浅出的复习了一遍。现在我们应该更清楚的知道,防火墙不是万能的,即使是经过精心配置的防火墙也抵挡不住隐藏在看似正常数据下的通道程序。那么,对于一个网络来说,我们应该怎么做才能够保证它的最大安全呢?

1.根据需要合适的配置防火墙,尽量少开端口。

2.采用过滤严格的WEB程序。

3.采用加密的HTTP协议(HTTPS)。

4.如果条件允许,购买一台功能较强大的NIDS。

5.管理好你的内网用户,防止攻击者和内网用户直接连接绕过防火墙。

6.经常升级你的firewall产品。

 

《三》测试防火墙系统

  这次测试的目的是为了知道防火墙是否想我们想象中的意图来工作的。在此之前你必须:

·制定一个完整的测试计划,测试的意图主要集中在路由、包过滤、日志记录与警报的性能上
·测试当防火墙系统处于非正常工作状态时的恢复防御方案
·设计你的初步测试组件

其中比较重要的的测试包括:

·硬件测试(处理器、内外储存器、网络接口等等)
·操作系统软件(引导部分、控制台访问等等)
·防火墙软件
·网络互联设备(CABLES、交换机、集线器等等)
·防火墙配置软件
      -路由型规则
      -包过滤规则与关联日志、警报选项



*****为什么说这些是比较重要的呢?*****


测试与效验你的防火墙系统有利于提高防火墙的工作效率,使其发挥令你满意的效果。你必须了解每个系统组件有可
能出现的错误与各种错误的恢复处理技术。一旦在你的规划下有防火墙系统出现非工作状态,这就需要你及时去进行
恢复处理了。

造成防火墙系统出现突破口的最常见原因就是你的防火墙配置问题。要知道,你需要在所有的测试项目之前做一个全
面的针对配置的测试(例如路由功能、包过滤、日志处理能力等)。



*****应该怎么去做?*****


“建立一个测试计划”

    你需要在做一个计划,让系统本身去测试防火墙系统与策略的执行情况,然后测试系统的执行情况。

        1建立一个所有可替代的系统组件的列表,用来记录一些会导致防火墙系统出错的敏感故障。
        2为每一个组件建立一个简短的特征说明列表列表,用语阐述其对防火墙系统运作的影响。不必理会这些影
         响对防火墙系统的损害类型与程度和其可能发生的系数高低。
        3为每一个关联的故障类型
             -设计一个特定的情况或某个指标去模拟它
             -设计一个缓冲方案去削弱它对系统的冲击性破坏

    打比方一个测试的特定情况是运行防火墙软件的主机系统出现不可替换的硬件问题时,且这个硬件将会影响到
    信息通信的枢纽问题,例如网络适配器损坏,模仿这类型的故障可以简单地拔出该网络接口。

    至于防御/恢复策略的例子可以是做好一整套的后备防火墙系统。当信息包出现延误等问题时在最短的时间内
    将机器替换。

    测试一个策略在系统中的运作情况是很困难的。用尽方法去测试IP包过滤设置是不可行的;这样可能出现很多
    种情况。我们推崇你使用分界测试(分部测试)来取代总体测试。在这些测试上,你必须确定你实施的包过滤规
    则与每个分块之间的分界线。这样你需要做到:

        ·为每个规则定义一个边界规则。通常,每个规则的必要参数都会有一个或两个边界点的。在这个区域里
          将会被划分为一个多面型的包特征区。通常划分的特征包括:通信协议、源地址、目标地址、源端口、
          目标端口等。基本上,每种包特征都可以独立地去配对包过滤规则在区域里所定义的数值尺度。例如,
          其中一个规则允许TCP包从任何主机发送到你的WEB服务器的80端口,这个例子使用了三个配对特征(协议
          、目标地址、目标端口),在这个实例中也将一个特征区划分成三个区域:TCP包到WEB服务器低于80端口、

          等于80端口、大于80端口。

        ·你必须为每一个已经设置好的区域做一些信息交换的测试。确认一下这些特定的区域能否正常地通过与
          拒绝所有的信息交换。做一个单独的区域,在区域中拒绝或者通过所有的信息交换;这样做的目的是为
          了划分包特征通信的区域问题。

    作为一个综合性的规则群,它可以是一种比较单一的处理机制,并且有可能是没有被应用过的。若是没有被应
    用过的规则群,这要求一群人去反复审核它们的存在性并要求有人能够说出每一个规则所需要实施的意义。

    整个测试计划包括案例测试、配置测试、与期待目标:

        ·测试路由配置、包过滤规则(包括特殊服务的测试)、日志功能与警报

        ·测试防火墙系统整体性能(例如硬/软件故障恢复、足够的日志存储容量、日志档案的容错性、监视追踪
          器的性能问题)

        ·尝试在正常或不正常这两种情况下进行的测试

    同样你也需要记录你在测试中打算使用的工具(扫描器、监测器、还有漏洞/攻击探测工具),并且相应地测试一
    下它们的性能。


“获取测试工具”

    逐步使用你的各种防火墙测试工具能够知道你的防火墙产品在各类性能指标上是否存在着不足

    各种类型的防火墙测试工具包括①:

       ·网络通信包生成器(如SPAK[Send PAcKets]、ipsend、Ballista)
       ·网络监视器(如tcpdump与Network Monitor)
       ·端口扫描器(如strobe与nmap)
       ·漏洞探测器(可以扫描到一定的有效范围、能针对多种漏洞的)
       ·入侵测试系统[IDS]如NFR②[Network Flight Recorder]与Shadow③

    查阅相关信息可以看Detecting Signs of Intrusion[Allen 00],特定的实践可以参阅"Identify data that
    characterize systems and aid in detecting signs of suspicious behavior"、建议书在"Identify tools
     that aid in detecting signs of intrusion"。


“在你的测试环境中测试防火墙系统的功能”

    建立一个测试框架以便你的防火墙系统能在两台独立的主机之中连通,这两台端一端代表外网一端代表外网。
    事例图在8-1"Test Environment"。

    在测试时要确保内网的默认网关为防火墙系统(当然这里指的是企业级带路由的防火墙啦:),如果你已经选择
    好一个完整的日志记录体系(推崇),工作在内网主机与日志记录主机之间的话,那么你就可以进行日志记录选
    项测试了。如果日志记录在防火墙机器上完成的话,你可以直接使用内网机器连上去。

    把安装有扫描器与嗅探器的机器安置在拓扑的内部与外部,用于分析与捕捉双向的通信问题与通信情况(数据
    从内到外、从外到内)。

    测试执行的步骤应该遵循:

       ·停止包过滤。
        ·注入各类包用于演示路由规则并通过防火墙系统。
        ·通过防火墙的日志与你的扫描器的结果来判断包的路由是否准确。
        ·打开包过滤。
        ·接入网间通信,为各种协议、所有端口、有可能使用的源地址与目标地址的网间通信摄取样本记录。
        ·确认应该被堵塞(拒绝)的包被堵塞了。比方说,如果所有的UDP包被设置为被堵塞,要确认没有一个UDP
          包通过了。还有确认被设置为通过或脱离(允许)的包被通过和脱离了。你可以通过防火墙的日志与扫描
          器的分析来得到这些实验的结果。
        ·扫描那些被防火墙允许与拒绝的端口,看看你的防火墙系统是否像你设置时预期的一样。
        ·检查一下包过滤规则中日志选项参数,测试一下日志功能是否在所有网络通信中能像预期中工作。
        ·测试一下在所有网络通信中出现预定警报时是否有特定的通知信号目的者(如防火墙系统管理员)与特殊
          的行动(页面显示与EMAIL通知)。

    上述的步骤需要至少两个人一步步计划与实施:最初由某一个人负责整个工程的实施,包括路由配置、过过滤
    规则、日志选项、警报选项,而另外单独一个人负责工程的复检工作、鉴定每个部分的工作程序、商订网络的
    拓扑与安全策略的实施是否恰当。


“在你的实施环境中测试防火墙系统的功能”

    在这个步骤你必须把环境从单层次的体系结构(图8-2"Single layer firewall architecture")演变为多层次
的体系结构(图8-3"Multiple layer firewall architecture")。


    这个步骤也同样需要你设定一个联合有一个或几个私网与公网的网络拓扑环境。在公网主要是定义为向内网进
    行如WWW(HTTP)、FTP、email(SMTP)、DNS这样的请求的应答,有时也会向内网提供诸如SNMP、文件访问、登陆
    等的服务的。在公网里你的主机也可以被描述为DMZ(非军事区)。在内网则被定义为内网各用户的工作站。详
    细图表可以看图8-4"Production Environment"。


    测试执行的步骤应该遵循:

        ·把你的防火墙系统连接到内外网的拓扑之中。
        ·设置内外网主机的路由配置,使其能通过防火墙系统进行通信。这一步的选择是建立在一个service-by
          -service的基础上,例如,一台在公网的WEB服务器有可能要去访问某台在私网的某台主机上的一个文
          件。围绕着这类型的服务还有WEB、文件访问、DNS、mail、远程登陆详细图则可以参照图8-4"Product
          ion Environment"。
        ·测试防火墙系统能否记录‘进入’或者‘外出’的网络通信。你可以使用扫描器与网络嗅探器来确认一下这一点。
        ·确认应该被堵塞(拒绝)的包被堵塞了。比方说,如果所有的UDP包被设置为被堵塞,要确认没有一个UDP
          包通过了。还有确认被设置为通过或脱离(允许)的包被通过和脱离了。你可以通过防火墙的日志与扫描
          器的分析来得到这些实验的结果。
        ·仔细地扫描你的网络内的所有主机(包括防火墙系统)。检查你扫描的包是否被堵塞,从而确认你不能从
          中得到任何数据信息。尝试使用特定的‘认证端口’(如使用FTP的20端口)发送包去扫描各端口的存活
          情况,看看这样能不能脱离防火墙的规则限制。
        ·你可以把入侵测试系统安装在你的虚拟网络环境或现实网络环境中,帮助你了解与测试你的包过滤规则
          能否保护你的系统与网络对抗现有的攻击行为。要做到这样你将需要在基本的规划上运行这一类的工具
          并定期分析结果。当然,你可以将这一步的测试工作推迟到你完全地配置后整个新的防火墙系统之后。
        ·检查一下包过滤规则中日志选项参数,测试一下日志功能是否在所有网络通信中能像预期中工作。
        ·测试一下在所有网络通信中出现预定警报时是否有特定的通知信号目的者(如防火墙系统管理员)与特殊
          的行动(页面显示与EMAIL通知)。

    你不可以把测试路由功能的工作放在连接防火墙系统至你的外网接口之后[请查阅“9. Install the firewall
     system.”(http://www.cert.org/security-improvement/practices/p061.html)与“10. Phase the firew-
    all system into operation.”(http://www.cert.org/security-improvement/practices/p063.html)]。最
    后,你应该先把新的防火墙系统安装在内网,并配置通过,然后再接上外网接口。为了降低最后阶段测试所带
    来的风险,管理员可以在内网连上少量的机器(主管理机器群与防火墙系统),当测试通过后才逐步增加内网的
    机器数目。


“选定与测试日志文件的内容特征”

    当日志文件出现存放空间不足时,你需要设置防火墙系统自行反应策略。下面有几种相关的选择:

        ·防火墙系统关闭所有相关的外网连接。
        ·继续工作,新日志复写入原最旧的日志空间中。
        ·继续工作,但不作任何日志记录。

    第一个选择是最安全但又不允许使用在防火墙系统上的。你可以尝试一下模拟防火墙系统在日志空间被全部占
    用时的运行状态,看看能否到达你所选择的预期效果。

    选择与测试适当的日志内容选项,这些选项包括:

        ·日志文件的路径(例如防火墙本地或远程机器的储存器)

       ·日志文件的存档时间段
        ·日志文件的清除时间段


“测试防火墙系统”

    每一个相关联的故障都应该写入测试报告中去(看整个测试过程的第一步),尝试执行与模拟所有有可能发生的
    特定情况,并测试相应的舒缓策略与评估其影响的破坏指数。


“扫描缺陷”

    使用一系列的缺陷(漏洞等等)探测工具扫描你的防火墙系统,看看有否探测出存在着已经被发现的缺陷类型。
    若探测工具探测出有此类缺陷的补丁存在,请安装之并重新进行扫描操作,这样可以确认缺陷已被消除。


“设计初步的渗透测试环境”

    在正常工作的情况下,选定一个特定的测试情况集来进行渗透测试。这些需要参考的情况包括出入数据包是否
    已经被路由了、过滤、记录,且在此基础上确保一些特殊服务(WWW、email、FTP等等)也能在预期中进行此类
    处理。

    一旦需要到新的防火墙系统加入至正常的工作环境时,你可以在改变网络现状前选择使用一系列的测试来检验
    该改变是否会为正常的工作带来什么负面影响。


“准备把系统投入使用”

    在你完成整个防火墙系统的测试之前你必须建立与记录一套‘密码’通信机制或其他的安全基准手段以便你能
    与防火墙系统进行安全的交流与管理。查阅相关信息可以看Detecting Signs of Intrusion[Allen 00],特定
    的实践可以参阅"Identify data that characterize systems and aid in detecting signs of suspicious
     behavior."。

    在你完成测试过程时必须做一个配置选项列表的备份。查阅相关信息可以看Securing Desktop Workstations
    [Simmel 99],,特定的实践可以参阅"Configure computers for file backups."。


“准备进行监测任务”

    监控网络的综合指数、吞吐量以及防火墙系统是确保你已经正确地配置安全策略并且这些安全策略在正常执行
    的唯一途径。

    确保你的安全策略、程序、工具等等资源处于必要的位置以便你能很好地监控你的网络与机器群,包括你的防
    火墙系统。



*****策略注意事项*****


    你的组织/团队作防火墙/系统/网络等安全测试行为应该遵循以下:

        ·测试的防火墙系统必须在你能监控的环境下进行。
        ·防火墙系统在每次出现配置或结构更改时应该重新进行渗透测试。
        ·定期升级渗透测试组件用于测试防火墙系统的配置状况。
        ·定期升级与维护保护区中的各种应用程序、操作系统、常用组件与硬件。
        ·监控所有网络与系统,包括你的防火墙系统,这是非常有必要的。

 

《四》国内外著名防火墙集锦

Kerio Personal Firewall

系统资源占用率很小,该有的功能都有,简单的基于规则设置的防火墙。不能支持server系统,对个人免费。KPF个人防火墙可以帮助用户控制同internet或者本地局域网络电脑进行数据交换,在一个组织内,KPF可以让单一的个人电脑避免来自内部用户的攻击。远程工作站或者安装有KPF的笔记本电脑可以避免来自internet的攻击。

http://www.kerio.com/kpf_download.html




GoldTach


一个体积小巧但功能强大的个人防火墙,集成了4个主要的功能:防火墙,进程控制、邮件保护、网页内容过滤。它可以在应用层、TDI层和NDIS层截取和捕捉数据,根据现有的规则进行分析,删除恶意的数据来保护网络安全。这就意味着你可以查看和控制进出网络的所有IP包,控制网络应用的各种操作:访问网站、充当服务器和收发电子邮件等等,通过改变电子邮件附件的扩展名来保护邮件安全,过滤恶意或者无用的HTTP内容如:阻截Cookie、WSH教本和弹出广告窗口等。

http://www.goldtach.com/


McAfee.Personal.Firewall.Plus.2004

McAfee公司的一个出色的个人防火墙软件,是基于ConSeal Private Desktop Signal 9 Solutions 获得国际认证个人防火墙软件包。它可以保护你免受来自Internet 黑客和特洛伊木马程序等攻击。它的特色是:保护个人信息、即时报警、详细事件记录、阻塞特定的互联网系统、多层安全、24小时自动更新,还有就是整合了hackerwatch.com的资源,使得你能查看详细的攻击信息.


ZoneAlarm

  ZoneAlarm来保护你的电脑,防止Trojan(特洛伊木马)程序,Trojan也是一种极为可怕的程序。ZoneAlarm可以帮你执行这项重大任务喔。而且还是免费的。使用很简单,你只要在安装时填入你的资料,如有最新的ZoneAlarm,你就可以免费网上更新。安装完后从新开机,ZoneAlarm就会自动启动,帮你执行任务。当有程序想要存取Internet时,如网络浏览器可能会出现连不上网络,这时你可以在右下角ZoneAlarm的小图示上按两下鼠标左键,选取Programs的选项,勾选你要让哪些软件上网,哪些不可以上网,利用此种方法来防治一些来路不明的软件偷偷上网。最好的方法是锁住(Lock)网络不让任何程序通过,只有你核准的软件才可以通行无阻。你还可利用它来看看你开机后已经使用多少网络资源,也可以设定锁定网络的时间。这么好用的软件你一定要亲自使用才能感觉到它的威力。

Norton Personal Firewall

Norton出品的个人防火墙将提供完整的网络安全,防止重要资料被窃,并有过滤网站的功能,能够阻隔各种网络黑客可能的入侵方式:Java applets,ActiveX 控制,以防您的私人信息被窃取和损坏。



Outpost Firewall Pro

Agnitum Outpost Firewall 是一款短小精悍的网络防火墙软件,它的功能是同类PC软件中最强的,甚至包括了广告和图片过滤、内容过滤、DNS缓存等功能。它能够预防来自Cookies、广告、电子邮件病毒、后门、窃密软件、解密高手、广告软件和其它 Internet 危险的威胁。该软件不需配置就可使用,这对于许多新手来说,变得很简单。尤为值得一提的是,这是市场上第一个支持插件的防火墙,这样它的功能可以很容易地进行扩展。该软件资源占用也很小。 Outpost的其它强大功能毋庸多说,你亲自试一试就知道了。

Tiny Personal Firewall 5.1.1284



Tiny Software公司是一家面向中小型网络路由器和防火墙软件的开发商, 最近发布了其颇受欢迎的Tiny Personal Firewall第三版。Tiny Personal Firewall 目的是为了妨止非法使用时的不安全性,保障计算机的安全。这一版本是基于通过 ICSA认证的 WinRoute Pro安全保障技术,是 WinRoute 的子集,只具备防火墙功能。该项技术已经获得成功。

  Tiny Personal Firewall 可以设置为手工启动,或者设置为一个服务器。其中包括一个桌面管理工具,可用于对本地或远程计算机上的安全引擎进行详细配置。用户的安全设置有高、中、低三级,通过它的包过滤特性(packet-filtering),每一级设置还可进行不同的配置,以满足特殊的需求。高级用户可以建立基于断口,应用,协议和目标的规则,每当遇到新的情况,立即提示,包括拒绝,接受或者建立处理未来动作的规则。其它的特性包括MD5签名支持,密码保护,日志功能和高可配置的报告功能,记录特殊的侵入动作。

  Tiny Personal Firewall是一个全面,却又简单易用的网络防骇软件。他可以管理你的计算机与国际网络的数据交换,会阻挡任何未经认证的用户进入你的计算机,读取你的档案。支持MD5签名认证,可以防止特洛依程序使用计算机认可的应用程序来闯入计算机,判断出那个程序安全与否,共有叁个安全等级可设置,可以考虑自己网络活动来作调整。

  程序包含主引擎、网络状况监视器、事件纪录簿。如你要打开某个网页,会问你是否允许存取。你也可以作一个过滤器,允许某个连接持续运作,限制使用那个埠(port)或者目的ip。也会纪录所有可疑的活动到log中,随时可叫出来检查,可说相当方便有强力的一款软件。

WyvernWorks Firewall 2003

这是一款真正免费的防火墙哦...虽然功能很简单...基本上可以作为系统防火墙的Power版...而且这家公司的产品大部分都通过了Designed for Microsoft Windows XP产品认证,在Windows Catalog网站可以查得到...
Your computer`s ports are the equivalent of doors to its hard drive, so why not hire a doorman, especially if he works for free? WyvernWorks Firewall is freeware that protects your computer from being attacked via its ports.

You can add an unlimited number of ports to the firewall protection list. Once installed, WyvernWorks Firewall is located in the system tray and blocks unauthorized inbound and outbound traffic. If someone tries to hack into your network, WyvernWorks Firewall alerts you to the attempt and includes the Internet Protocol (IP) address of the perpetrator.


Sygate Personal Firewall

是一个简单易用的个人防火墙,适合于那些网络中的单机用户来防止入侵者非法进入系统。作为一个基于主机的解决方案,该软件提供了多层保护的防火墙安全环境,可以有效地防止入侵者和黑客的侵袭。与真正的防火墙不同的是,Sygate Personal Firewall 能够从系统内部进行保护,并且可以在后台不间断地运行。另外,该软件还提供有安全访问和访问监视功能,并可向你提供所有用户的活动报告,当检测到入侵和不当的使用后,能够立即发出警报。

TZ Personal Firewall 3.2.0.0

TZ personal firewall防火墙软件,可以防止黑客、特洛伊病毒、间谍程序、计算机病毒、DOS 攻击以及数据窃取者,并保护你的个人计算机免于因特网的威胁。当你使用网络时,在你的计算机跟黑客之间筑起一到安全的防火墙。


VisNetic Firewall V2.1.3

信你一定有听过FTP Serv-U这个架FTP站台的软件,他也出了一套防火墙软件Deerfield VisNetic Firewall,可以让你在Windows底下,轻松的防护好你的计算机并阻绝外人对你的计算机系统的入侵,从此不用在为网络的安全而担心了。


AnalogX PortBlocker 1.02

能用来关闭服务器某些端口的访问。虽不是防火墙软件, 但可以让你的服务器只在内部网中被访问, 而从internet上无法进入。而且可以将访问已封禁端口的企图都记录下来。

只有231K的小东东.


WinGate是个功能强大又易用的防火墙。
http://www.deerfield.com/products/wingate/
天网个人防火墙

“天网个人防火墙”是早期国内用户比较喜欢的一款个人防火墙软件,由于该软件可以免费下载测试使用,并且网站提供安全检测服务,为用户检测电脑系统的安全情况所提供的帮助文件与在线使用手册的内容也十分丰富,它曾经是大部分国内用户的首选产品。但目前,它的情况却不尽如人意,软件更新缓慢,只提供一些基本的功能。“天网个人防火墙”提供多种预先设置的安全级别,同时也支持用户自定义应用程序的安全规则与系统的安全策略,支持应用程序通信控制,同时具备自动识别功能,但绝大部分的应用程序无法自动识别,用户需要在程序第一次访问网络时配置防火墙规则。此外,它还提供特洛伊木马和入侵检测功能,可以通过厂商的安全数据库自动查找系统的漏洞。 “天网个人防火墙”占用系统资源较少,中文的界面和简单的操作对于新手来说,也比较容易上手。安装时软件还提供设置向导,提示用户选择个人防火墙的安全级别,并帮助局域网环境下的用户设置本地电脑的IP地址,以确保不影响内部网络通信。该软件提供自动更新功能,惟一需要用户经常处理的就是应用程序访问互联网的请求,如果您不想处理这些请求,还可以将应用程序通信控制功能设置为“允许所有通信”。因此,对于安全风险较低,并且希望很少管理个人防火墙软件的用户来说,可以考虑使用该软件。

金山网镖

“金山网镖”“瑞星”包括天网本身都是基于规则简单的包过滤型防火墙,和国外防火墙在防护原理上有着本质的区别,适合网络新手使用



防火墙的局限性

在此次个人防火墙软件专题中,我们为您介绍了当前流行的个人防火墙软件,基本上这些防火墙软件都能够提供不错的安全防御功能,它们之间的差别只在于所使用的技术和所提供的功能不同。网络安全问题变化莫测,构建一个安全的网络系统,防火墙是必不可少的,但防火墙并非万无一失的,首先,作为互联网通讯基础的TCP/IP协议,就存在着难以完全根除的安全缺陷,在最初设计时就缺乏对安全的考虑,导致其存在一系列安全缺陷,诸如缺乏加密认证机制、TCP序列号易被猜测、定时器以及连接建立过程中存在大量问题等。


除了无法消除TCP/IP协议的致命弱点以外,数据延迟也是防火墙面临的一个难题。防火墙采用的滤波技术使网络的性能降低,过于简单的检测将无法起到安全防御作用,而过于复杂的话,延迟问题又将使网络系统无法支持实时服务请求。此外,您还需要考虑互联网的便利性,过于苛刻的防火墙安全设置可以提供更好的安全性,但不可避免地会影响系统的便利性,在两者之间取得平衡并不是一件简单的事情。配置防火墙可以解决大多数的网络安全问题,但并不能作到一劳永逸。

 

《五》防火墙防止DDOS的几种方式

DoS(Denial of Service拒绝服务)和DDoS(Distributed Denial of Service分布式拒绝服务)攻击是大型网站和网络服务器的安全威胁之一。2000年2月,Yahoo、亚马逊、CNN被攻击等事例,曾被刻在重大安全事件的历史中。SYN Flood由于其攻击效果好,已经成为目前最流行的DoS和DDoS攻击手段。

SYN Flood利用TCP协议缺陷,发送了大量伪造的TCP连接请求,使得被攻击方资源耗尽,无法及时回应或处理正常的服务请求。一个正常的TCP连接需要三次握手,首先客户端发送一个包含SYN标志的数据包,其后服务器返回一个SYN/ACK的应答包,表示客户端的请求被接受,最后客户端再返回一个确认包ACK,这样才完成TCP连接。在服务器端发送应答包后,如果客户端不发出确认,服务器会等待到超时,期间这些半连接状态都保存在一个空间有限的缓存队列中;如果大量的SYN包发到服务器端后没有应答,就会使服务器端的TCP资源迅速耗尽,导致正常的连接不能进入,甚至会导致服务器的系统崩溃。

防火墙通常用于保护内部网络不受外部网络的非授权访问,它位于客户端和服务器之间,因此利用防火墙来阻止DoS攻击能有效地保护内部的服务器。针对SYN Flood,防火墙通常有三种防护方式:SYN网关、被动式SYN网关和SYN中继。

SYN网关 防火墙收到客户端的SYN包时,直接转发给服务器;防火墙收到服务器的SYN/ACK包后,一方面将SYN/ACK包转发给客户端,另一方面以客户端的名义给服务器回送一个ACK包,完成TCP的三次握手,让服务器端由半连接状态进入连接状态。当客户端真正的ACK包到达时,有数据则转发给服务器,否则丢弃该包。由于服务器能承受连接状态要比半连接状态高得多,所以这种方法能有效地减轻对服务器的攻击。

被动式SYN网关 设置防火墙的SYN请求超时参数,让它远小于服务器的超时期限。防火墙负责转发客户端发往服务器的SYN包,服务器发往客户端的SYN/ACK包、以及客户端发往服务器的ACK包。这样,如果客户端在防火墙计时器到期时还没发送ACK包,防火墙则往服务器发送RST包,以使服务器从队列中删去该半连接。由于防火墙的超时参数远小于服务器的超时期限,因此这样能有效防止SYN Flood攻击。

SYN中继防火墙在收到客户端的SYN包后,并不向服务器转发而是记录该状态信息然后主动给客户端回送SYN/ACK包,如果收到客户端的ACK包,表明是正常访问,由防火墙向服务器发送SYN包并完成三次握手。这样由防火墙做为代理来实现客户端和服务器端的连接,可以完全过滤不可用连接发往服务器。

《六》

拒绝服务攻击原理及解决方法

Internet给全世界的人们带来了无限的生机,真正实现了无国界的全球村。但是还有很多困绕我们的因素,象IP地址的短缺,大量带宽的损耗,以及政府规章的限制和编程技术的不足。现在,由于多年来网络系统累积下了无数的漏洞,我们将面临着更大的威胁,网络中潜伏的好事者将会以此作为缺口来对系统进行攻击,我们也不得不为以前的疏忽付出更大的努力。虽然大多的网络系统产品都标榜着安全的旗号,但就我们现在的网络协议和残缺的技术来看,危险无处不在。

  拒绝服务攻击是一种遍布全球的系统漏洞,黑客们正醉心于对它的研究,而无数的网络用户将成为这种攻击的受害者。Tribe Flood Network, tfn2k, smurf, targa…还有许多的程序都在被不断的开发出来。这些程序想瘟疫一样在网络中散布开来,使得我们的村落更为薄弱,我们不得不找出一套简单易用的安全解决方案来应付黑暗中的攻击。

  在这篇文章中我们将会提供:

  对当今网络中的拒绝服务攻击的讨论。
  安全环境中的一些非技术性因素以及我们必须克服的一些障碍问题。
  如何认清产品推销商所提供的一些谎言。

  在我们正式步入对这些问题的技术性讨论之前,让我们先从现实的生活中的实际角度来看一下这些困绕我们的问题。

  1、当前的技术概况

  在我们进入更为详细的解决方案之前,让我们首先对问题做一下更深入的了解。

  与安全相关的这些小问题如果详细来讲的话都能成为一个大的章节,但限于篇幅的原因,我们只能先作一下大体的了解。

  软件弱点是包含在操作系统或应用程序中与安全相关的系统缺陷,这些缺陷大多是由于错误的程序编制,粗心的源代码审核,无心的副效应或一些不适当的绑定所造成的。根据错误信息所带来的对系统无限制或者未经许可的访问程度,这些漏洞可以被分为不同的等级。

  典型的拒绝服务攻击有如下两种形式:资源耗尽和资源过载。当一个对资源的合理请求大大超过资源的支付能力时就会造成拒绝服务攻击(例如,对已经满载的Web服务器进行过多的请求。)拒绝服务攻击还有可能是由于软件的弱点或者对程序的错误配置造成的。区分恶意的拒绝服务攻击和非恶意的服务超载依赖于请求发起者对资源的请求是否过份,从而使得其他的用户无法享用该服务资源。

  错误配置也会成为系统的安全隐患。这些错误配置通常发生在硬件装置,系统或者应用程序中。如果对网络中的路由器,防火墙,交换机以及其他网络连接设备都进行正确的配置会减小这些错误发生的可能性。如果发现了这种漏洞应当请教专业的技术人员来修理这些问题。

  如果换个角度,也可以说是如下原因造成的:

  错误配置。错误配置大多是由于一些没经验的,无责任员工或者错误的理论所导致的。开发商一般会通过对您进行简单的询问来提取一些主要的配置信息,然后在由经过专业培训并相当内行的专业人士来解决问题。

  软件弱点。由于使用的软件几乎完全依赖于开发商,所以对于由软件引起的漏洞只能依靠打补丁,安装hot fixes和Service packs来弥补。当某个应用程序被发现有漏洞存在,开发商会立即发布一个更新的版本来修正这个漏洞。

  拒绝服务攻击。拒绝服务攻击大多是由于错误配置或者软件弱点导致的。某些DoS攻击是由于开发协议固有的缺陷导致的,某些DoS攻击可以通过简单的补丁来解决,还有一些导致攻击的系统缺陷很难被弥补。最后,还有一些非恶意的拒绝服务攻击的情况,这些情况一般是由于带宽或者资源过载产生瓶颈导致的,对于这种问题没有一个固定的解决方案。

  2、深入DoS

  DoS的攻击方式有很多种。最基本的DoS攻击就是利用合理的服务请求来占用过多的服务资源,致使服务超载,无法响应其他的请求。这些服务资源包括网络带宽,文件系统空间容量,开放的进程或者向内的连接。这种攻击会导致资源的匮乏,无论计算机的处理速度多么快,内存容量多么大,互连网的速度多么快都无法避免这种攻击带来的后果。因为任何事都有一个极限,所以,总能找到一个方法使请求的值大于该极限值,因此就会使所提供的服务资源匮乏,象是无法满足需求。千万不要自认为自己拥有了足够宽的带宽就会有一个高效率的网站,拒绝服务攻击会使所有的资源变得非常渺小。

传统上,攻击者所面临的主要问题是网络带宽,由较小的网络规模和较慢的网络速度,无法使攻击者发出过多的请求,然而,类似"the ping of death"的攻击类型紧需要很少量的包就可以摧毁一个没有打过补丁的UNIX系统。当然,多数的DoS攻击还是需要相当大的带宽的,但是高带宽是大公司所拥有的,而以个人为主的黑客很难享用。为了克服这个缺点,恶意的攻击者开发了分布式的攻击。这样,攻击者就可以利用工具集合许多的网络带宽来对同一个目标发送大量的请求。

  以下的两种情况最容易导致拒绝服务攻击:

  由于程序员对程序错误的编制,导致系统不停的建立进程,最终耗尽资源,只能重新启动机器。不同的系统平台都会采取某些方法可以防止一些特殊的用户来占用过多的系统资源,我们也建议尽量采用资源管理的方式来减轻这种安全威胁。

  还有一种情况是由磁盘存储空间引起的。假如一个用户有权利存储大量的文件的话,他就有可能只为系统留下很小的空间用来存储日志文件等系统信息。这是一种不良的操作习惯,会给系统带来隐患。这种情况下应该对系统配额作出考虑。

  从安全的角度来看,本地的拒绝服务攻击可以比较容易的追踪并消除。而我们这篇文章主要是针对于网络环境下的DoS攻击。下面我们大体讨论一下较为常见的基于网络的拒绝服务攻击:

  Smurf (directed broadcast)。广播信息可以通过一定的手段(通过广播地址或其他机制)发送到整个网络中的机器。当某台机器使用广播地址发送一个ICMP echo请求包时(例如PING),一些系统会回应一个ICMP echo回应包,也就是说,发送一个包会收到许多的响应包。Smurf攻击就是使用这个原理来进行的,当然,它还需要一个假冒的源地址。也就是说在网络中发送源地址为要攻击主机的地址,目的地址为广播地址的包,会使许多的系统响应发送大量的信息给被攻击主机(因为他的地址被攻击者假冒了)。使用网络发送一个包而引出大量回应的方式也被叫做"放大器",这些smurf放大器可以在www.netscan.org网站上获得,一些无能的且不负责任的网站仍有很多的这种漏洞。

  SYN flooding 一台机器在网络中通讯时首先需要建立TCP握手,标准的TCP握手需要三次包交换来建立。一台服务器一旦接收到客户机的SYN包后必须回应一个SYN/ACK包,然后等待该客户机回应给它一个ACK包来确认,才真正建立连接。然而,如果只发送初始化的SYN包,而不发送确认服务器的ACK包会导致服务器一直等待ACK包。由于服务器在有限的时间内只能响应有限数量的连接,这就会导致服务器一直等待回应而无法响应其他机器进行的连接请求。

  Slashdot effect 这种攻击手法使web服务器或其他类型的服务器由于大量的网络传输而过载,一般这些网络流量是针对某一个页面或一个链接而产生的。当然这种现象也会在访问量较大的网站上正常发生,但我们一定要把这些正常现象和拒绝服务攻击区分开来。如果您的服务器突然变得拥挤不堪,甚至无法响应再多的请求时,您应当仔细检查一下这个资源匮乏的现象,确认在10000次点击里全都是合法用户进行的,还是由5000个合法用户和一个点击了5000次的攻击者进行的。

  拒绝服务一般都是由过载导致的,而过载一般是因为请求到达了极限。


 

3、拒绝服务攻击的发展

  由于我们防范手段的加强,拒绝服务攻击手法也在不断的发展。

  Tribe Flood Network (tfn) 和tfn2k引入了一个新概念:分布式。这些程序可以使得分散在互连网各处的机器共同完成对一台主机攻击的操作,从而使主机看起来好象是遭到了不同位置的许多主机的攻击。这些分散的机器由几台主控制机操作进行多种类型的攻击,如UDP flood, SYN flood等。

  操作系统和网络设备的缺陷在不断地被发现并被黑客所利用来进行恶意的攻击。如果我们清楚的认识到了这一点,我们应当使用下面的两步来尽量阻止网络攻击保护我们的网络:

  A)尽可能的修正已经发现的问题和系统漏洞。

  B)识别,跟踪或禁止这些令人讨厌的机器或网络对我们的访问。

  我们先来讨论一下B),在B)中我们面临的主要问题是如何识别那些恶意攻击的主机,特别是使用拒绝服务攻击的机器。因为这些机器隐藏了他们自己的地址,而冒用被攻击者的地址。攻击者使用了数以千记的恶意伪造包来使我们的主机受到攻击。"tfn2k"的原理就象上面讲的这么简单,而他只不过又提供了一个形象的界面。假如您遭到了分布式的拒绝服务攻击,实在是很难处理。

  解决此类问题的一些专业手段----包过滤及其他的路由设置

  有一些简单的手法来防止拒绝服务式的攻击。最为常用的一种当然是时刻关注安全信息以期待最好的方法出现。管理员应当订阅安全信息报告,实时的关注所有安全问题的发展。:)

  第二步是应用包过滤的技术,主要是过滤对外开放的端口。这些手段主要是防止假冒地址的攻击,使得外部机器无法假冒内部机器的地址来对内部机器发动攻击。

  我们可以使用Cisco IOS来检查路由器的详细设置,当然,它也不仅限于Cisco的设备,但由于现在Cisco设备在网络中占有了越来越多的市场份额(83%),所以我们还是以它为例子,假如还有人有其他的例子,我们也非常高兴你能提出您的宝贵信息。

登陆到将要配置的路由器上,在配置访问控制列表之前先初始化一遍:

c3600(config)#access-list 100 permit ip 207.22.212.0 0.0.0.255 any
c3600(config)#access-list 100 deny ip any any
然后我们假设在路由器的S0口上进行ACL的设置,我们进入S0口,并进入配置状态:
c3600(config)#int ser 0
c3600(config-if)#ip access-group 100 out
通过显示access-list来确认访问权限已经生效:
c3600#sho access-lists 100
Extended IP access list 100
permit ip 207.22.212.0 0.0.0.255 any (5 matches)
deny ip any any (25202 matches)

  对于应该使用向内的包过滤还是使用向外的包过滤一直存在着争论。RFC 2267建议在全球范围的互连网上使用向内过滤的机制,但是这样会带来很多的麻烦,在中等级别的路由器上使用访问控制列表不会带来太大的麻烦,但是已经满载的骨干路由器上会受到明显的威胁。

  另一方面,ISP如果使用向外的包过滤措施会把过载的流量转移到一些不太忙的设备上。 ISP也不关心消费者是否在他们的边界路由器上使用这种技术。当然,这种过滤技术也并不是万无一失的,这依赖于管理人员采用的过滤机制。

  我们经常会听到设备销售或集成商这样的推脱之词,他们总是说使用ACL会导致路由器和网络性能的下降。ACL确实会降低路由器的性能并加重CPU的负载,但这是微乎其微的。我们曾经在Cisco 2600 和3600系列路由器上作过实验:

  以下是不使用和使用ACL时的对照表:

Test Speed w/o ACL (Mbps) w/ ACL (Mbps) w/o ACL (total time) w/ ACL (total time) % change
Cisco 2600 100Mbps -> 100 Mbps File transfers 36.17 Mbps 35.46 Mbps 88.5 90.2 2.50%
Cisco 3600 10Mbps -> 10Mbps File transfers 7.95 Mbps 8.0Mbps 397 395 0.30%

  使用的路由器配置如下:

  2 Cisco 3640 (64MB RAM, R4700 processor, IOS v12.0.5T)
  2 Cisco 2600 (128MB RAM, MPC860 processor, IOS v12.0.5T)

  由表我们可以看出,在使用ACL前后对路由器性能的影响并不是很大。

  4、使用DNS来跟踪匿名攻击

  也许大家仍旧保存着侥幸心理,认为这些互连网上给我们带来无数麻烦DoS漏洞或许随着路由器包过滤,网络协议升级到IPv6或者随时的远程响应等手段变得越来越不重要。但从一个具有责任感的网管的观点来看,我们的目标并不是仅仅阻止拒绝服务攻击,而是要追究到攻击的发起原因及操作者。

  当网络中有人使用假冒了源地址的工具(如tfn2k)时,我们虽然没有现成的工具来确认它的合法性,但我们可以通过使用DNS来对其进行分析:

  假如攻击者选定了目标www.technotronic.com,他必须首先发送一个DNS请求来解析这个域名,通常那些攻击工具工具会自己执行这一步,调用gethostbyname()函数或者相应的应用程序接口,也就是说,在攻击事件发生前的DNS请求会提供给我们一个相关列表,我们可以利用它来定位攻击者。

  使用现成工具或者手工读取DNS请求日志,来读取DNS可疑的请求列表都是切实可行的,然而,它有三个主要的缺点:

  1) 攻击者一般会以本地的DNS为出发点来对地址进行解析查询,因此我们查到的DNS请求的发起者有可能不是攻击者本身,而是他所请求的本地DNS服务器。尽管这样,如果攻击者隐藏在一个拥有本地DNS的组织内,我们就可以把该组织作为查询的起点。

  2) 攻击者有可能已经知道攻击目标的IP地址,或者通过其他手段(host, ping)知道了目标的IP地址,亦或是攻击者在查询到IP地址后很长一段时间才开始攻击,这样我们就无法从DNS请求的时间段上来判断攻击者(或他们的本地服务器)。

  3) DNS对不同的域名都有一个却省的存活时间,因此攻击者可以使用存储在DNS缓存中的信息来解析域名。为了更好做出详细的解析记录,您可以把DNS却省的TTL时间缩小,但这样会导致DNS更多的去查询所以会加重网络带宽的使用。

  在许多情况下,只要您拥有足够的磁盘空间,记录所有的DNS请求并不是一种有害的做法。在BIND8.2中做记录的话,可以在named.conf中假如下面的几行:

logging {
channel requestlog { file "dns.log"; };
category queries { requestlog; };
};

5、使用 ngrep来处理tfn2k 攻击

  根据使用DNS来跟踪tfn2k驻留程序的原理,现在已经出现了称为ngrep的实用工具。经过修改的ngrep(参见附录)可以监听大约五种类型的tfn2k拒绝服务攻击(targa3, SYN flood, UDP flood, ICMP flood 和 smurf),它还有一个循环使用的缓存用来记录DNS和ICMP请求。如果ngrep发觉有攻击行为的话,它会将其缓存中的内容打印出来并继续记录ICMP回应请求。假如攻击者通过ping目标主机的手段来铆定攻击目标的话,在攻击过程中或之后记录ICMP的回应请求是一种捕获粗心的攻击者的方法。由于攻击者还很可能使用其他的服务来核实其攻击的效果(例如web),所以对其他的标准服务也应当有尽量详细的日志记录。

还应当注意,ngrep采用的是监听网络的手段,因此,ngrep无法在交换式的环境中使用。但是经过修改的ngrep可以不必和你的DNS在同一个网段中,但是他必须位于一个可以监听到所有DNS请求的位置。经过修改的ngrep也不关心目标地址,您可以把它放置在DMZ网段,使它能够检查横贯该网络的tfn2k攻击。从理论上讲,它也可以很好的检测出对外的tfn2k攻击。

  运行 ngrep, 您将看到:

[root@lughnasad ngrep]# ./ngrep
Ngrep with TFN detection modifications by wiretrip / www.wiretrip.net
Watching DNS server: 10.0.0.8
interface: eth0 (10.0.0.0/255.255.0.0)

  从这里开始ngrep将监听tfn2k攻击,如果检测到攻击, ngrep将在屏幕上打印:

Sun Jan 9 17:30:01 2000
A TFN2K UDP attack has been detected!
Last (5000) DNS requests:
《list of IPs that made DNS requests, up to DNS_REQUEST_MAX length》
Last (1000) ICMP echo requests (pings):
《list of IPs that made ICMP echo requests, up to ICMP_REQUEST_MAX length》
Incoming realtime ICMP echo requests (pings):
《all ICMP echo requests since the attack was detected》

  以上的列表并不是唯一的,可以对它进行调整让他不仅显示是谁请求,而且请求多少次,频率为多少等等。在ICMP flood事件中,ICMP回应请求的报告中将不包括做为tfn2k flood一部分的ICMP包。Ngrep还可以报告检测出来的除smurf之外的攻击类型(TARGA, UDP, SYN, ICMP等)。混合式的攻击在缺省情况下表现为ICMP攻击,除非你屏蔽了向内的ICMP回应请求,这样它就表现为UDP或SYN攻击。这些攻击的结果都是基本类似的。

  6、附录- Ngrep.c with tfn2k detection

  以下的代码在使用前应当更改一些参数。
  #define DNS_REQUEST_MAX 5000
  #define ICMP_REQUEST_MAX 1000
  通知ngrep最大的请求跟踪数(在检测攻击之前)。传输较为繁忙的网站应当增加这一数值(网络流量较为繁忙的网站DNS的请求数最好在10,000,而ICMP请求为2000-3000)

  #define FLOOD_THRESHOLD 20

  用在10秒中内有多少同一类型的攻击包来确认为真正的攻击。数目设计的越大,程序报受攻击的可能性就越小。假如您老是收到错误的警报,那么您应当增加一下这个数值。

  #define DNS_SERVER_IP "10.0.0.8"

  Ngrep通过监视DNS服务器的53端口的UDP包来跟踪向内的DNS请求(只有UDP)。因此,ngrep需要知道您的DNS服务器的IP地址。

  我们的设备可能会有多个DNS服务器,但我们认为对一台DNS服务器的支持足以证明这项技术的能力。
#define TTL_THRESHOLD 150

  tfn2k SYN flood 攻击使用的 TTL值通常在200-255的范围内。估计到攻击者与目标主机之间不止50跳,因此我们可以只查找TTL时间高于150的包。假如您相信攻击者在50跳左右,那么您可以对TTL的限制进行一下更改。

  编译更改过的 ngrep

  编译和安装都非常简单。您仅需要使用以下之一来取代ngrep.c 文件。处于方便起见,我们可以详细说明。

  这段代码只是在RedHat 6.1 和Mandrake 6.5 Linux上测试过。

首先您需要在 http://www.packetfactory.net/ngrep/ 下载ngrep,我们测试的是1.35版。

  然后在 ftp://ftp.ee.lbl.gov/libpcap.tar.Z下载libpcap 我们使用的是 0.40版。

把文件放在临时文件夹里并解包,tar xvzf libpcap.tar.Z

  然后进行编译

  cd libpcap-0.4; ./configure; make; make install; make install-incl

  假如您遇到了困难,可以参见在libpcap-0.4目录里的README或INSTALL文件。根据我们实验的经验,如果/usr/local/include 和/usr/local/include/net目录在linux系统中不存在的话,安装会失败。加入您在安装时遇到了pcap.h 或 bpf.h的错误时你可以运行
mkdir /usr/local/include; mkdir /usr/local/include/net然后重新运行'make install-incl'。然后我们需要编译ngrep (使用我们修改过的版本)。首先解包:

  tar xvzf ngrep-1.35.tar.gz

  然后进行配置:

  cd ngrep; ./configure

  然后把ngrep.c复制到ngrep目录里。你可以覆盖也可以备份原始的ngrep.c文件。在这里,您应当回顾在修改过的ngrep.c里的配置,至少您应当把DNS_SERVER_IP更改为您所使用的DNS的地址。更改完毕后你就可以运行'make',这样就建立了ngrep应用程序。

Modified ngrep.c source code
/* this code is available for download from http://www.wiretrip.net/na/ngrep.c */
/*
* $Id: ngrep.c,v 1.35 1999/10/13 16:44:16 jpr5 Exp $
*
*/
/* TFN detection code added by Rain Forest Puppy / rfp@wiretrip.net
and Night Axis / na@wiretrip.net */

/********* TFN detection defines *******************************/

/* how many DNS and ICMP requests to track */
#define DNS_REQUEST_MAX 5000
#define ICMP_REQUEST_MAX 1000

/* flood threshold is matches per 10 seconds */
#define FLOOD_THRESHOLD 20

/* IP of your DNS server */
#define DNS_SERVER_IP "10.9.100.8"

/* TFN syn uses ttl between 200-255. Assuming less than 50 hops,
flag stuff with ttl > TTL_THRESHOLD (other critera are used
as well) */
#define TTL_THRESHOLD 150

/**************************************************************/

#include
#include
#include
#ifdef LINUX
#include
#endif
#if defined(BSD)

《七》Windows XP和2003防火墙(ICF)设置指南

Internet 连接防火墙是充当网络与外部世界之间的保卫边界的安全系统。Internet 连接防火墙 (ICF)是用来限制哪些信息可以从你的电脑访问 Internet 以及从 Internet 进入您电脑的一种软件。  
  
如果你的电脑使用 Internet 连接共享 (ICS) 来为多台计算机提供 Internet 访问能力,最好在共享的Internet 连接中启用 ICF。当然,ICS 和 ICF 都可以单独启用。如果你的电脑是直接连接到 Internet ,也建议你在这个 Internet 连接上启用 ICF。要查看是否启用了 ICF 或者是否要启用防火墙,请参阅
  
图1。  
  
xp中的ICF设置不像其他的防火墙一样是基于程序的,所以看起来不是很直观。ICF的设置都是基于端口的 ,所以效率更高,但是我们在设置防火墙的时候需要对程序占用的端口有详细的了解,下面的内容我们会用实际的例子来说明。


在新窗口打开screen.width-333) this.width=screen.width-333" border=0>

ICF 本质上是状态防火墙。状态防火墙可以用来监视所有通讯端口,并且检查所处理的每个消息的源和目标地址。  
  
默认的情况下,ICF不允许所有来自外部网络的未经请求的通信进入本机。所有从 Internet 进入通信都会接受ICF的检查并和自己的设置相比较。只有本机发出的信息的反馈消息才能进入我的电脑,原自外部 的消息默认情况是不允许进入本机的,这也解释了为什么开启ICF后从我的电脑可以ping通别人的电脑,但是外部的电脑不能我的主机。 (除非在“服务”选项卡上建立了允许该通讯通过的条目)。  
  
默认情况下,ICF 的处理过程不会反馈给使用者,而是静态地阻止未经请求的通讯,防止像端口扫描这样的常见黑客袭击。因为如果反馈这种通知消息的话会过于频繁以至于成为一种干扰,就像我们常见的天网或者norton一样,时不时出来一个消息框告诉你检测的进程。笔者就认为这种提示对我的工作干扰很大,而且有一种请功的心态,这是我最讨厌的。  
  
最后一点,xp中自带的ICF 一样可以创建安全日志,通过查看安全日志我们一样清楚被防火墙跟踪的各种活动,以及被防火墙拦截的各种信息,同时还可以设置跟踪记录的文件的最大值,以防无限占用硬盘空间接下来我们用实际的例子来说明ICF的配置。

xp自带的ICF的配置和实例  
  
在拨号上网的图标上鼠标右键选属性,打开高级选项,勾选1以启用ICF,再点击2,开始设置ICF,如图:


在新窗口打开screen.width-333) this.width=screen.width-333" border=0>

如图3,在服务栏里面有xp自带的一些服务,可以勾选你想要的服务。如果觉得这些自带的服务不够或者不理想,可以按下面的添加,手工添加你自定义的服务。


在新窗口打开screen.width-333) this.width=screen.width-333" border=0>

再看第二项-安全日志,方框1里面的设置可以记录防火墙的跟踪记录,包扩丢弃和成功的所有事项,2所指的地方可以更改记录文件存放的目录,3指的地方可以修改记录文件的大小,避免过渡占用空间。可以依自己的需要设置。  
  
要注意的是,xp默认的选项是不记录任何拦截或成功的事项,同时记录文件的大小默认是4M


在新窗口打开screen.width-333) this.width=screen.width-333" border=0>

再看下一个选项ICMP,ICMP的全称是internet control messenge protocal,internet控制信息协议,所 有支持tcp/ip的网络都必须支持ICMP。我们通过ICMP的反馈信息来确定网络的状态,比如网络通不通,是 否有拥塞等等。实际例子中,比如我们ping一个ip地址,就是ICMP把ping的结果返回给ping命令的发送着,从而让发送着知道网络的状态。  
  
ICMP是一个非常好且有用的协议,但是如果不加以限制的话,会造成很大的不便。比如你通过adsl上网, 假设你的带宽是2M,如果同时有许多人用小数据包ping你,因为你的电脑要给所有ping你的人答复,这样 就造成了你带宽的浪费。如果ping你的人数达到一定的数量,则你的网络带宽完全被用来做答复别人的回 应,从而是你正常的通讯无法进行。  

实际上ICMP反馈只是让我们了解网络的状态,并不影响正常的通讯,所以我们可以关闭它。这样的话别人 不能ping通我的电脑,但是可以和我进行正常的数据交流。  
  
上面的例子是用ping来解说ICMP的功能,实际上ICMP的作用很多的,我们可以打开或关闭某些。如图5,当我们选定鼠标所指的选项时,下方会出来相应的描述信息,我们可以安装我们的要求进行配置。注意的 是默认情况下所有的ICMP都没有打开。


在新窗口打开screen.width-333) this.width=screen.width-333" border=0>

接下来的过程让我们配置一个实例。  
  
大家都知道,在使用msn messenger的时候,有一项功能是文件传输。但是文件传输经常不能成功,其中的机制就是msn的文件传输采用了特殊的端口,而一般的防火墙是关闭这个端口的,包括xp的防火墙也一 样。  
  
如果通话双方要进行文件传输,多数网友都是直接关闭防火墙,传送完毕以后再打开,相信大多数的网友 都遇到过类似的问题。这是因为一般的防火墙软件比如天网和norton都是基于程序的。(当然也能基于端 口,但是配置不直观)。xp自带的防火墙恰恰是基于端口的,因此非常方便。  
  
举个例子,如果我们想禁止本机的ftp服务,用基于程序的防火墙来禁止的话,只要你安装的ftp程序一连 接到互联网,防火墙就跳出来报警,你就要配置一次。如果你安装了100个ftp的程序,防火墙就会跳出了100次报警,你就要配置100次。我不知道实际工作的时候有多少人会仔细的看报警的内容并仔细配置,反正我看到的朋友都是一有报警的对话框,就一路回车下去,这样配置等于没有安装防火墙。(我不否认部分朋友确实有耐心仔细配置,但是这样的话你累不累?)  
  
如果我们采用了xp的ICF,它是基于端口的,不管你用什么样的程序去做ftp服务,你必须要采用21号端口 ,我们只要禁止21号端口就行了。而且xp自带的ICF默认是不显示拦截或通过的信息的,这样我们的工作就不会收到任何的干扰,但是防火墙却实实在在地在工作。  
  
通过查找msn messenger的帮助,我们发现msn用来传送文件的端口是6891-6900一共10个端口,也就是允许同时传送最多10个文件。xp自带的ICF默认是关闭6891-6900这10个端口的,为了使msn的文件传输功能正常进行,我们必须打开它。(当然,如果我们使用msn messenger同时传送的文件只有一个,那打开一个端口就行了)。  
  
下面是实际的操作过程。

先打开你的上网连接的属性,高级,启用ICF,并点选设置进行设置。在服务选项里面,我们没有看到关于msn messenger文件传送的现成的可以使用的服务,所以我们手工创建一个,点下面的添加按钮:  
在1处输入你要创建的规则的名称  
在2处输入你的网卡的ip地址  
在3和4处输入你想要打开的端口号,msn messenger占用的是6891-6900,我们随便输入其中的一个  
在5处选择TCP而不是UDP,因为msn的文件传输属于可靠的服务(TCP),UDP指的是不可靠的服务。(TCP
  
和UDP的概念如果大家感兴趣下次再详细说说)


在新窗口打开screen.width-333) this.width=screen.width-333" border=0>

选择完成以后,按确定,新的规则已经创建,如图7,有必要的话可以按下面的编辑对这条创建好的规则 进行修改。  
  
当然,这条规则要生效的话,不要忘记在前面打勾:)  
  
现在再打开你的msn messenger,试试文件传输是不是已经很好用了:)


在新窗口打开screen.width-333) this.width=screen.width-333" border=0>

ICF不但可以用于防止internet的非法入侵,在局域网上同样有效。但是有一点一定要注意:  

如果你的机器是代理服务器,局域网的别的机器是通过你的电脑上网的,那千万不要在你的局域网上打开ICF,否则你所在的局域网内的其他用户不能通过你上网

 

《八》巧用Windows 2003构筑校园网服务器防火墙

在校园网的日常管理与维护中,网络安全正日益受到人们的关注。校园网服务器是否安全将直接影响学校日常教育教学工作的正常进行。为了提高校园网的安全性,网络管理员首先想到的就是配备硬件防火墙或者购买软件防火墙,但硬件防火墙价格昂贵,软件防火墙也价格不菲,这对教学经费比较紧张的广大中小学来说是一个沉重的负担。在此笔者结合自己的工作经验,谈谈如何利用Windows 2003提供的防火墙功能为校园网服务器构筑安全防线。

Windows 2003防火墙功能介绍

   Windows 2003提供的防火墙称为Internet连接防火墙,通过允许安全的网络通信通过防火墙进入网络,同时拒绝不安全的通信进入,使网络免受外来威胁。Internet连接防火墙只包含在 Windows Server 2003 Standard Edition和32位版本的 Windows Server 2003 Enterprise Edition 中。

Internet连接防火墙的设置

   在Windows 2003服务器上,对直接连接到 Internet 的计算机启用防火墙功能,支持网络适配器、DSL 适配器或者拨号调制解调器连接到 Internet。

1. 启动/停止防火墙

   (1)打开“网络连接”,右击要保护的连接,单击“属性”,出现“本地连接属性”对话框。

   (2)单击“高级”选项卡,出现如图1所示启动/停止防火墙界面。如果要启用 Internet 连接防火墙,请选中“通过限制或阻止来自 Internet 的对此计算机的访问来保护我的计算机和网络”复选框;如果要禁用Internet 连接防火墙,请清除以上选择。

2. 防火墙服务设置

   Windows 2003 Internet连接防火墙能够管理服务端口,例如HTTP的80端口、FTP的21端口等,只要系统提供了这些服务,Internet连接防火墙就可以监视并管理这些端口。

   (1)标准服务的设置
   我们以Windows 2003服务器提供的标准Web服务为例(默认端口80),操作步骤如下:在图1所示界面中单击[设置]按钮,出现如图2所示“服务设置”对话框;在“服务设置”对话框中,选中“Web服务器(HTTP)”复选项,单击[确定]按钮。设置好后,网络用户将无法访问除Web服务外本服务器所提供的的其他网络服务。



图1 本地连接属性对话框


 



图2 服务设置对话框


   注:您可以根据Windows 2003服务器所提供的服务进行选择,可以多选。常用标准服务系统已经预置在系统中,你只需选中相应选项就可以了。如果服务器还提供非标准服务,那就需要管理员手动添加了。

   (2)非标准服务的设置

   我们以通过8000端口开放一非标准的Web服务为例。在图2“服务设置”对话框中,单击[添加]按钮,出现“服务添加”对话框,在此对话框中,填入服务描述、IP地址、服务所使用的端口号,并选择所使用的协议(Web服务使用TCP协议,DNS查询使用UDP协议),最后单击[确定]。设置完成后,网络用户可以通过8000端口访问相应的服务,而对没有经过授权的TCP、UDP端口的访问均被隔离。

3. 防火墙安全日志设置

   在图2“服务设置”对话框中,选择“安全日志”选项卡,出现“安全日志设置”对话框,选择要记录的项目,防火墙将记录相应的数据。日志文件默认路径为C:\Windows\Pfirewall.log,用记事本可以打开。所生成的安全日志使用的格式为W3C扩展日志文件格式,可以用常用的日志分析工具进行查看分析。

   注:建立安全日志是非常必要的,在服务器安全受到威胁时,日志可以提供可靠的证据。

Internet 连接防火墙应用思考

   Internet 连接防火墙可以有效地拦截对Windows 2003服务器的非法入侵,防止非法远程主机对服务器的扫描,提高Windows 2003服务器的安全性。同时,也可以有效拦截利用操作系统漏洞进行端口攻击的病毒,如冲击波