精华区 [关闭][返回]

当前位置:月光软件>>讨论区精华>>〖电脑技术〗>>● WinNT系统>>网络构架>>路由、防火墙相关>>Firewall的原理

主题:Firewall的原理
发信人: yurer(孤星)
整理人: ipaq(2001-05-28 13:59:40), 站内信件
Firewall的原理 


  各公司都有各自的FIREWALL产品,而且在各平台下都有不同的FIREWALL。我们不可能接触到所有类型的FIREWALL,因此我在此就FIREWALL的原理与大家讨论讨论。

  各公司的FIREWALL之间有一定的差异,但原理是相通的。现有的FIREWALL大致分为两种:基于包过滤方式的;基于应用级别的(比如PROXY)。下面分别就这两种FIREWALL做一些说明。

  基于包过滤方式的FIREWALL:

  在Internet上走的基本上是IP包,FIREWALL都是对IP包进行过滤的,TCP、UDP、ICMP等都是封装在IP包之内的,所以基于IP包过滤的FIREWALL能够很好的控制进出站的TCP、UDP、ICMP包。
IP包通过基于包过滤方式的FIREWALL时并没有被隔断(这是与PROXY的最大区别),过滤的法则只能控制某个IP包能否进站或出站。

  配置基于包过滤方式的FIREWALL,需要对IP、TCP、UDP、ICMP等各种协议有一定程度的了解(更确切的说是需要有很深入的了解)。下面我们就一个例子来说明基于包过滤方式的FIREWALL是怎么工作的:

  假设我们希望在FIREWALL内部的安全网络的用户能TELNET到FIREWALL外部的非安全网络,而不希望非安全网络的用户TELNET到安全网络。

  首先我们看看一个TELNET连接是怎样建立的:

  在CLIENT端发起一个TELNET连接到SERVER端,首先CLIENT端打开一个大于1023的TCP端口,向SERVER端23端口发出一个连接请求(SYN),如果SERVER端允许23端口连接,那么SERVER端的23端口向CLINET端的大于1023的TCP端口发出一个允许连接的回应(SYN/ACK),最后CLIENT端的大于1023的端口向SERVER端的23端口发出一个确认连接的数据包(ACK)。这称为TCP的三步握手。上面的ACK标志说明前一个TCP包已经被接收到;SYN的意思是表示这一次的连接是新建的。

  FIREWALL正是利用这两个标志来限制某些连接的。我们用下面的方式来定义一个TCP连接:

< Source Address,Source Port,Destination Address,Destination
Port>

  要注意的是:建立TCP连接的第一个包没有ACK标志,接下来的回应包有ACK标志,这就可以决定一个TCP连接的方向。

我们打算让FIREWALL内部的安全网络的CLIENT端能够用TELNET访问FIREWALL外部的非安全网络的SERVER端,而不允许非安全网络TELNET进安全网络,那我们可以建立以下的法则来实现:

  1 拒绝所有的TCP连接

  2 允许源IP地址为安全网段的TCP端口大于1023,目的IP地址为0.0.0.0(所有IP地址)TCP端口等于23的TCP包从FIREWALL内部经FIREWALL出站。

  3 允许源IP地址为0.0.0.0、TCP端口等于23,目的IP地址为安全网段IP、目的TCP端口大于1023的TCP/ACK包从FIREWALL外部经FIREWALL进站。

  这样我们就可以很霸道的使用Internet了,我能TELNET你,而你不能TELNET我。UDP和TCP类似。

  ICMP叫做消息控制协议,这个协议的主要应用是察看目标主机的信息(PING),还有目标网络的信息(TRACEROUTE)。ICMP对应用程序来说并不重要,当然有一小部分的应用程序用PING来察看目标主机是否活动。但ICMP对暴露我们的网络结构有很大的威胁。我们也能像过滤TCP包一样过滤ICMP包,做到我能PING你,而你不能PING我。

  包过滤是基于IP地址,各种协议端口(TCP、UDP、ICMP)来过滤包的,它可以防止IP欺骗,半开扫描等等攻击。

  基于应用级别的FIREWALL(PROXY),也许更为大家所熟悉。IP包在FIREWALL中是断开的,当内部网络向外部网络申请一个连接时,PROXY截断了这个申请,并以自己的身份向目标申请连接,最后把结果返回内部网络。PROXY的最大缺点是不支持UDP(我没见过哪个PROXY支持UDP)。

  我所见过的PROXY有HTTP,HTTPS,FTP,TELNET,SMTP,SOCK等等。

  SOCK代理能用于任何应用,但必须在CLIENT端加装SOCK CLIENT,这在WINDOWS下很容易实现,但是在UNIX中就有点麻烦了,我一直找不到UNIX下的SOCK CLIENT。而且SOCK PROXY还和一些应用不兼容----微软建议:不要把EXCHANGE SERVER和MS PROXY CLIENT端装在一台NT机上。

  

[关闭][返回]






转载请注明:转载自 月光程序代码网 [ http://www.moon-soft.com ]