发信人: javabase()
整理人: 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、目的TC P端口大于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和M S PROXY CLIENT端装在一台NT机上。
以上是对两种常见的FIREWALL的简略说明,下面是对FIREWALL的一些问题的讨论 :
(一)DMZ(非军事区)
通常的说法是FIREWALL与ROUTER之间的区域。
ROUTER DMZ FIREWALL
\ \
__\_______ ___\_________
____| |_______________| |_________________ SECURE NETWORK
|__________| |_____________|
有一种新的架构,FIREWALL用三块网卡。
ROUTER FIREWALL
\ \
__\_______ ___\_________
____| |_______________| |_________________ SECURE NETWORK
|__________| |_____________|
|
______|______
| |
| DMZ |
|_____________|
我个人认为,第二种DMZ才象真正的DMZ。但是这种配置较复杂,FIREWALL的效率 也低。
(二)NAT(网络地址转换)
为什么要用NAT?
一般来说,FIREWALL内部的安全网络的IP为RFC定义的三段保留IP,但是这种IP是 不能直接路由出去的。所以我们会在FIREWALL中用NAT把保留IP转换成注册IP。
NAT存在的主要问题是FTP的问题。FTP的一些命令会把源IP地址作为参数发给SER VER,但是这个IP地址是作为数据封装在IP包内的,NAT不会转换,这就会造成错 误。解决办法是用PASV命令。我所接触的FIREWALL的NAT号称能够识别FTP命令, 转换这种IP地址。
我想知道的是:
有没有别的解决方案?
(三)MAIL SERVER的位置
在一些有SMTP代理的FIREWALL,建议把MAIL SERVER放在FIREWALL安全网络一侧; 但是在MS PROXY这种环境下好象只能把EXCHANGE放在MS PROXY外部,因为微软建 议不要在EXCHANGE SERVER上装MS PROXY CLIENT。那这又如何来控制EXCHANGE的 安全呢?
(四)WEB SERVER的位置
WEB SERVER是最容易受到攻击的服务器,它的位置是个难题:放在安全网段必须 在FIREWALL上开80端口,如果WEB SERVER被黑掉,会成为黑客攻击内部安全网络 的基地;如果WEB SERVER放在外部网络,又得不到保护。我认为,可以放在第二 种DMZ中,既能过滤端口,又能保证内部网络的安全性,但是配置复杂。
我一直坚持尽量把服务器放在FIREWALL内部,就是想给服务器加上一层屏障,过 滤一些不必要的端口。像一台NT+IIS架成的WEB SERVER,默认情况有21、70、80 、139等端口,如果我只想使用它的WEB SERVER,可以把21、70端口关闭,但是1 39端口我不知怎么关闭,而139端口是一个很危险的端口,我们应当关闭它,可以 在NT上安装一些过滤软件,把139过滤掉。
(五)过滤法则
基于包过滤的FIREWALL的过滤法则该设置些什么?
下面是我觉得有必要的法则,各位有什么补充,给我来信。
# Between The World and Public Interface
# Service : Anti Spoofing
# Description : Deny inbound non-secure packets with secure source addresses
#
# 禁止IP欺骗:
# 攻击者伪造IP,使IP包看来像从安全网络的一台信任主机发出的,所以我们
# 拒绝源地址为安全网段IP的包进入非安全网卡
#
deny 192.168.1.1 255.255.255.0 0 0 all any 0 any 0 non-secure both inb ound l=y f=h
#
# Between Public Interface and The World
# Service : Block Spoofing
# Description : Deny outbound non-secure packets with secure sourc e address
#
# 禁止IP欺骗:
# 攻击者伪造IP,使IP包看来像从安全网络的一台信任主机发出的,所以我们
# 拒绝目标地址为安全网段IP的包从非安全网卡出站
#
deny 0 0 192.168.1.1 255.255.255.0 all any 0 any 0 non-secure both out bound l=n f=y
#
# Between RFC 1627 Clase B reserves IP and The World
# Service : Deny Inbound Non-secure Interface
# Description : Deny Inbound Non-secure Interface
#
# 禁止源IP地址为B类保留IP地址的IP包从非安全网卡进站
#
deny 172.16.0.0 255.240.0.0 0 0 all any 0 any 0 non-secure both inboun d l=n f=y
#
# Between RFC 1627 Clase C reserves IP and The World
# Service : Deny Inbound Non-secure Interface
# Description : Deny Inbound Non-secure Interface
#
# 禁止源IP地址为C类保留IP地址的IP包从非安全网卡进站
#
deny 192.168.0.0 255.255.0.0 0 0 all any 0 any 0 non-secure both inbou nd l=n f=y
#
# Between RFC 1627 Clase A reservers IP and The World
# Service : Deny Inbound Non-secure Interface
# Description : Deny Inbound Non-secure Interface
#
# 禁止源IP地址为A类保留IP地址的IP包从非安全网卡进站
#
deny 10.0.0.0 255.0.0.0 0 0 all any 0 any 0 non-secure both inbound l= n f=y
#
# Between The World and The World
# Service : Definiton UDP port 514
# Description : Definiton UDP port 514
#
# 保护SYSLOG SERVER(UDP PROT 514)
#
deny 0 0 0 0 udp any 0 eq 514 both both both l=n f=y
#
# Between Loopback Address and The World
# Service : All Deny
# Description : All Deny
#
# Loopback地址是不会出现在真实的网卡上的,禁止Loopback地址进出FIREWALL
#
deny 127.0.0.0 255.0.0.0 0 0 all any 0 any 0 both both both l=y f=y
#
# Between The World and The World
# Service : Protect Resource System
# Description : Protect Resource System
#
# 这是AIX控制系统资源的端口,应该禁止
#
deny 0 0 0 0 all any 0 eq 200 non-secure both inbound l=n f=y
#
# Between Security Network and The World
# Service : HTTP direct out
# Description : Permit HTTP from secure network directly to non-se cure network
#
# 允许从安全网络访问外部网络的WEB资源
#
permit 192.168.1.0 255.255.255.0 0 0 tcp gt 1023 eq 80 secure route in bound l=n f=y
permit 192.168.1.0 255.255.255.0 0 0 tcp gt 1023 eq 80 non-secure rout e outbound l=n f=y
permit 0 0 192.168.1.0 255.255.255.0 tcp/ack eq 80 gt 1023 non-secure route inbound l=n f=y
permit 0 0 192.168.1.0 255.255.255.0 tcp/ack eq 80 gt 1023 secure rout e outbound l=n f=y
#
# Between Security Network and The World
# Service : Ping
# Description : Permit Ping outbound secure network to anywhere
#
# 允许从安全网络PING外部网络
#
permit 192.168.1.0 255.255.255.0 0 0 icmp eq 8 eq 0 both both both l=n f=y
permit 0 0 192.168.1.0 255.255.255.0 icmp eq 0 eq 0 both both both l=n f=y
#
# Between Security Network and The World
# Service : Allow FTP outbound Secure Interface
# Description : Allow FTP outbound Secure Interface
#
# 允许从安全网络FTP到外部网络的FTP SERVER
#
permit 192.168.1.0 255.255.255.0 0 0 tcp gt 1023 eq 21 secure route in bound l=n f=y
permit 192.168.1.0 255.255.255.0 0 0 tcp gt 1023 eq 21 non-secure rout e outbound l=n f=y
permit 0 0 192.168.1.0 255.255.255.0 tcp/ack eq 21 gt 1023 non-secure route inbound l=n f=y
permit 0 0 192.168.1.0 255.255.255.0 tcp/ack eq 21 gt 1023 secure rout e outbound l=n f=y
permit 0 0 192.168.1.0 255.255.255.0 tcp eq 20 gt 1023 non-secure rout e inbound l=n f=y
permit 0 0 192.168.1.0 255.255.255.0 tcp eq 20 gt 1023 secure route ou tbound l=n f=y
permit 192.168.1.0 255.255.255.0 0 0 tcp/ack gt 1023 eq 20 non-secure route outbound l=n f=y
permit 192.168.1.0 255.255.255.0 0 0 tcp/ack gt 1023 eq 20 secure rout e inbound l=n f=y
permit 0 0 192.168.1.0 255.255.255.0 tcp/ack gt 1023 gt 1023 non-secur e route inbound l=n f=y
permit 0 0 192.168.1.0 255.255.255.0 tcp/ack gt 1023 gt 1023 secure ro ute outbound l=n f=y
permit 192.168.1.0 255.255.255.0 0 0 tcp gt 1023 gt 1023 secure route inbound l=n f=y
permit 192.168.1.0 255.255.255.0 0 0 tcp gt 1023 gt 1023 non-secure ro ute outbound l=n f=y
#
# Between Security Network and The World
# Service : Telnet direct out
# Description : Permit Telnet outbound from secure network to non- secure network
#
# 允许从安全网络TELNET外部网络的主机
#
permit 192.168.1.0 255.255.255.0 0 0 tcp gt 1023 eq 23 secure route in bound l=n f=y
permit 192.168.1.0 255.255.255.0 0 0 tcp gt 1023 eq 23 non-secure rout e outbound l=n f=y
permit 0 0 192.168.1.0 255.255.255.0 tcp/ack eq 23 gt 1023 non-secure route inbound l=n f=y
permit 0 0 192.168.1.0 255.255.255.0 tcp/ack eq 23 gt 1023 secure rout e outbound l=n f=y
这份文档完全是我对FIREWALL的一些理解和配置FIREWALL的一些经验,其中有不 少疑问,希望大家能够给我解答。
-- 欢迎到 WinNT 版来做客!
※ 来源:.月光程序代码网 http://www.moon-soft.com.[FROM: 202.103.59.226]
|
|