精华区 [关闭][返回]

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

主题:FIREWALL 补充文档
发信人: 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]

[关闭][返回]






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