📄 00000014.htm
字号:
来完成这个工作,首先我们可以考虑一下防火墙的基本构架: <BR> <BR> 防火墙通过一个网卡接入internet,这片网卡构成了所有internet访问的数据通路, <BR>不妨假定其地址是202.199.248.1,接口是eth0。(当然,实际情况中,我们更多地通过 <BR>专用的路由器接入广域网,不过这不会影响我们的问题的本质)。 <BR> <BR> DMZ中包含了我们的所有对外服务主机,外部网络可以透过防火墙申请这些主机的服务 <BR>。我们假设这些主机的地址在C类网202.199.248.0中,地址空间是从202.199.248.2到2 <BR>02.199.248.255,或者说202.199.248.0/24。其中,我们有一台www主机,地址是202.1 <BR>99.248.8,ftp主机的网络地址是202.199.248.9,电子邮件主机是202.199.248.10,DN <BR>S主机是202.199.248.11。另外,ftp主机也同时提供samba服务。为了使DMZ能够直接和 <BR>防火墙主机通信,我们将DMZ用独立的一个以太网系统连接起来,并且在防火墙上加入第 <BR>二块网卡与之通联,设为eth1,IP地址是202.199.248.2。所有DMZ区域中的机器的网关 <BR>地址都设置为202.199.248.2。 <BR> <BR> 第三个区域是私用网络(private),假设我们使用的私用网络是192.168.0.0/24,它 <BR>们也用一个独立的以太网连接起来,然后在防火墙上加入第三片网卡,设为eth2,其地 <BR>址为192.168.0.1,与私用网络连接在一起,所有私用网络内的主机网关设置为192.168 <BR>.0.1。 <BR> <BR> 整个网络体系如图所示: <BR> <BR> 图8.2 含有DMZ的防火墙 <BR> <BR> 现在我们来考虑防火墙策略,首先要按照上一节的方法打开核心的IP转发,接下来, <BR>我们首先定义几个链,用来表示各种访问模式: <BR> <BR> ipchains –N wan_DMZ <BR> <BR> 从外部网访问DMZ。 <BR> <BR> ipchains –N wan_private <BR> <BR> 从外部网访问私用网络 <BR> <BR> ipchains –N DMZ-wan <BR> <BR> 从停火区访问外部网 <BR> <BR> ipchains –N DMZ-private <BR> <BR> 从停火区访问私用网络 <BR> <BR> ipchains –N private_DMZ <BR> <BR> 从私用网络访问停火区 <BR> <BR> ipchains –N private_wan <BR> <BR> 从私用网络访问外部。 <BR> <BR> 还要有一个链用来管理ICMP服务: <BR> <BR> ipchains –N icmp_acct <BR> <BR> 然后,在设置任何防火墙之前,首先设置缺省行为,对于防火墙,主要是forward链: <BR> <BR> ipchains –P forward DENY <BR> <BR> 接下来,我们的任务是正确地将各种连接请求归纳入对应的链。首先是从私用网发送 <BR>到外部网上的数据包,显然这些包的源地址应该是192.168.0.0/24,转发的目标接口是 <BR>eth0,因此可以将所有这些数据包“跳转”到链private_wan: <BR> <BR> ipchains –A forward –s 192.168.0.0/24 –i eth0 –j private_wan <BR> <BR> 从私用网发送到停火区的数据包目标转发接口是eth1,所以 <BR> <BR> ipchains –A forward -s 192.168.0.0/24 –i eth1 –j private_DMZ <BR> <BR> 从停火区出发的数据包,其源地址是202.199.248.0/24,而送到私用网络或者外部网 <BR>,目标转发接口应该是eth2或者eth0,所以: <BR> <BR> ipchains –A forward –s 202.199.248.0/24 –i eth2 –j DMZ_private <BR> <BR> ipchains –A forward –s 202.199.248.0/24 –i eth0 –j DMZ_wan <BR> <BR> 由于-j是“跳转”,所以如果经过了上面的几条链还没有跳走,那么显然数据包应该 <BR>是从eth0进入的,所以 <BR> <BR> ipchains –A forward –i eth2 –j wan_private <BR> <BR> ipchains –A forward –i eth1 –j wan_DMZ <BR> <BR> 然后定义行为规则,从私用网络到DMZ的连接是最简单的,所有访问非服务器端口的行 <BR>为都是非法,应该禁止,标示目标端口可以用我们前面讲的办法: <BR> <BR> ipchains –A private_DMZ –p TCP –d 202.199.248.8 www –j ACCEPT <BR> <BR> ipchains –A private_DMZ –p TCP –d 202.199.248.9 ftp –j ACCEPT <BR> <BR> ipchains –A private_DMZ –p TCP –d 202.199.248.9 ftp-data –j ACCEPT <BR> <BR> ipchains –A private_DMZ –p TCP –d 202.199.248.9 137:139 –j ACCEPT <BR> <BR> ipchains –A private_DMZ –p UDP –d 202.199.248.9 137:139 –j ACCEPT <BR> <BR> ipchains –A private_DMZ –p TCP –d 202.199.248.10 smtp –j ACCEPT <BR> <BR> ipchains –A private_DMZ –p TCP –d 202.199.248.10 pop-3 –j ACCEPT <BR> <BR> ipchains –A private_DMZ –p TCP –d 202.199.248.11 domain –j ACCEPT <BR> <BR> ipchains –A private_DMZ –p UDP –d 202.199.248.11 domain –j ACCEPT <BR> <BR> <BR> 显然这样的防火规则将使得你的员工只能使用被动ftp工具。注意域名服务和samba服 <BR>务的协议都是TCP/UDP两用的,因此必须分别标出。接下来还有一个合法的请求就是pin <BR>g服务,所以 <BR> <BR> ipchains –A private_DMZ –p ICMP –j icmp_acct <BR> <BR> 不符合上述规则的显然就是非法请求: <BR> <BR> ipchains –A private_DMZ –j DENY <BR> <BR> 再考虑从外部到DMZ的行为规则,这个规则与上述的很类似,但是显然不应该允许外部 <BR>用户使用samba服务(不要忘了,netbios名字是靠广播来传递的,如果有个用户从外部 <BR>网访问你的samba服务,可以肯定他使用了某些扫描程序)。因此: <BR> <BR> ipchains –A wan_DMZ –p TCP –d 202.199.248.8 www –j ACCEPT <BR> <BR> ipchains –A wan_DMZ –p TCP –d 202.199.248.9 ftp –j ACCEPT <BR> <BR> ipchains –A wan_DMZ –p TCP –d 202.199.248.9 ftp-data –j ACCEPT <BR> <BR> ipchains –A wan_DMZ –p TCP –d 202.199.248.10 smtp –j ACCEPT <BR> <BR> ipchains –A wan_DMZ –p TCP –d 202.199.248.11 domain –j ACCEPT <BR> <BR> ipchains –A wan_DMZ –p UDP –d 202.199.248.11 domain –j ACCEPT <BR> <BR> ipchains –A wan_DMZ –p ICMP –j icmp_acct <BR> <BR> ipchains –A wan_DMZ –j DENY <BR> <BR> 在这里我们看到了一些非常头痛的事情,由于我们使用了一个过分严厉的防火墙规则 <BR>,所以外部世界的任何人都无法用IE从你的ftp服务器上下载软件了。也许你应该在你的 <BR>主页上告诉你的访问者们用cute-ftp或者其他的任何能够使用被动模式的东西来下载, <BR>也许你应该使用一个宽松一些的防火墙规则,允许访问ftp服务器比较高的端口,例如用 <BR>下面的规则替代: <BR> <BR> ipchains –A wan_DMZ –p TCP –d 202.199.248.9 1024:5999 –j ACCEPT <BR> <BR> ipchains –A wan_DMZ –p TCP –d 202.199.248.9 6010: –j ACCEPT <BR> <BR> 注意这个规则有些怪异,它允许了几乎所有比较高的端口,但是禁止了6000-6010之间 <BR>的端口,原因是6000-6010之间的端口通常是用于X windows的远程服务。显然,让别人 <BR>可以远地使用你的X window无助于你的系统安全。 <BR> <BR> 下面需要定义从私用网络到外部网络的访问,这部分的规则,我们仍然使用偏于严厉 <BR>的防火墙规则,毕竟说服你的员工使用被动模式ftp要容易一些: <BR> <BR> ipchains -A private_wan -p tcp --destination-port www -j MASQ <BR> <BR> ipchains -A private_wan -p tcp --destination-port ssh -j MASQ <BR> <BR> ipchains -A private_wan -p tcp --destination-port telnet -j MASQ <BR> <BR> ipchains -A private_wan -p tcp --destination-port pop-3 -j MASQ <BR> <BR> ipchains -A private_wan -p tcp --destination-port smtp -j MASQ <BR> <BR> ipchains -A private_wan -p tcp --destination-port ftp --j MASQ <BR> <BR> ipchains -A private_wan -p tcp --destination-port ftp-data -j MASQ <BR> <BR> ipchains -A private_wan -p icmp --icmp-type ping -j MASQ <BR> <BR> ipchains -A private_wan -j REJECT -l <BR> <BR> 接下来是从DMZ到私用网络,这基本就是前面的内容的翻版: <BR> <BR> ipchains –A private_DMZ –p TCP –-destination-port www –j ACCEPT <BR> <BR> ipchains –A private_DMZ –p TCP –s 202.199.248.9 137:139 –j ACCEPT <BR> <BR> ipchains –A private_DMZ –p UDP –s 202.199.248.9 137:139 –j ACCEPT <BR> <BR> ipchains –A private_DMZ –p TCP -s 202.199.248.10 smtp –j ACCEPT <BR> <BR> ipchains –A private_DMZ –p TCP –s 202.199.248.10 pop-3 –j ACCEPT <BR> <BR> ipchains –A private_DMZ –p TCP –s 202.199.248.11 domain –j ACCEPT <BR> <
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -