LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 17321|回复: 42

[绝对原创] shorewall 企业防火墙的完美实现

[复制链接]
发表于 2003-12-12 12:04:19 | 显示全部楼层 |阅读模式

  1. =================== 这篇文章绝对原创,作者:xjdong (Andy_xjdong ) ===============
  2. ===================        如需转载,请注明出自 LinuxSir.org      ===============
复制代码

相信大家一定很想自己做一个企业级应用得防火墙,看到大家在论坛上常常问到类似得问题,现在我将我自己身边得一个防火墙企业级应用实例共享出来,希望能帮到需要帮助得朋友。

第一篇:网络接入情况

现在很多企业有的是用专线接入,有的是用ADSL 接入,但最终结果都是一样,就是在互联网上有一个公网IP(或者一个网段)得Route 到你得网关服务器上或者接入路由器上。 好了,知道了这点我就来说一下互联网得接入这一部分,我以专线接入为例子:

如图:


  1.                                          Route A
  2.                                       ( Internet or ISP  )
  3.                                           /(192.168.5.2/255.255.255.252)
  4.                                          /
  5.                                       /\/
  6.                                      /  
  7.                                     / (IP:192.168.5.1/255.255.255.252)
  8.                                  (Route B)
  9.                                     | (IP 211.111.111.1/255.255.255.0)
  10.                                     |
  11.                                     |_____ (局域网)
复制代码
                             
当你是专线接入得时候,一般都会有一个专线接入单,上面会有如下相关信息:

1:你得IP地址范围
2:用户端接入IP,以及局端IP

从上图中我们可以看出:
1:ISP分配给你得是一个C类公网地址
2:用户端得接入IP 是 192.168.5.1,局端IP 是 192.168.5.2

好了,下面是我要重点说得了,很多人以为在一个防火墙得外网接口上一定得绑定公网IP,其实这是一个错误得认识,其实只要有 Route 信息,你就可以上互联网。怎么以上面得图为例子,在 ISP 商得路由器那头,就是绑定 192.168.5.2 那个路由器一定有一个 Route 信息是这样得:
ip route 211.111.111.0/24 via 192.168.5.1

通常得做法就是像如图一样在Route B 得以太网口处帮定一个公网IP 211.111.111.1 ,然后大家以这个为网关上网,通常会先接入防火墙,然后后面接局域网用户,如图:


  1.                                           Route A
  2.                                       ( Internet or ISP  )
  3.                                           /(192.168.5.2/255.255.255.252)
  4.                                          /
  5.                                       /\/
  6.                                      /  
  7.                                     / (IP:192.168.5.1/255.255.255.252)
  8.                                  (Route B)
  9.                                     | (IP 211.111.111.1/255.255.255.0)
  10.                                     |
  11.                                     |                                       
  12.                                     | (211.111.111.2/24)
  13.                                |----------|
  14.                                | Firewall |
  15.                                |----------|
  16.                    (10.1.2.0/24)/        \(10.1.1.0/24)
  17.                                /          \
  18.                               /            \
  19.                              /              \  
  20.              (局域网 A) ____/                \_____ (局域网 B)     
  21.             
复制代码


这是一个很典型得企业应用,我想我说得没错吧,但是我觉得这里面有几个不好得地方:
  
  1:就是公网IP不能很好得管理,在 Firewall 和 Route B 之间是通过公网IP 连接得,比如通过交换机连接,这样如果有人在交换机上接一个计算机自己随意绑定公网IP 就可以上网了。
  2:这是一个C类得IP ,在Firewall 上需要绑定很多公网IP ,才能使用这些IP ,这样管理有很多弊端。
  
  好了,说了这么多,下面引入正题,就是分享一下我得防火墙得实际解决方案。(续看第二篇)
 楼主| 发表于 2003-12-12 12:05:13 | 显示全部楼层
第二篇:网络结构得设计

  
  对于一个C类得公网IP 我们可以重新设计一个网络拓扑:
  
  方案一:就是不对C类网段分段,还是用一个网段,如图:

  1.                                           Route A
  2.                                       ( Internet or ISP  )
  3.                                           /(192.168.5.2/255.255.255.252)
  4.                                          /
  5.                                       /\/
  6.                                      /  
  7.                                     / (IP:192.168.5.1/255.255.255.252)
  8.                                  (Route B)
  9.                                     | (IP 192.168.1.1/255.255.255.252)
  10.                                     |
  11.                                     |                                       
  12.                                     | (192.168.1.2/255.255.255.252)
  13.                                |----------|
  14.                                | Firewall |
  15.                                |----------|
  16.                    (10.1.1.1/24)/        \(10.1.2.1/24)
  17.                                /          \
  18.                               /            \
  19.                              /              \  
  20.              (局域网 A) ____/                \_____ (局域网 B  DMZ 服务器区)      
  21.   
复制代码
注意: 在 Route B 上需要添加一个静态路由, ip route 211.111.111.0 255.255.255.0 192.168.1.2
  
  好了,这样 Firewall 就可以完全控制和分配这 254 个公网IP 了
  
  
    方案二:就是对C类网段分段,分成两个公网IP网段,有两个防火墙如图:
   

  1.                                               Route A
  2.                                          ( Internet or ISP  )
  3.                                              /(192.168.5.2/255.255.255.252)
  4.                                             /
  5.                                          /\/
  6.                                         /  
  7.                                        / (IP:192.168.5.1/255.255.255.252)
  8.                                   |----------|
  9.                                   | Route B  |
  10.                                   |----------|
  11.                                        |(IP 192.168.1.1/255.255.255.248)
  12.                                        |
  13.                                  /------------\
  14. (IP 192.168.1.2/255.255.255.248)/              \ (IP 192.168.1.3/255.255.255.248)
  15.                     |-----------|          |-----------|
  16.                     | Firewall A|          | Firewall B|
  17.                     |-----------|          |-----------|                        
  18.                       /                              \  
  19.       (局域网 A) ____/                                \_____ (局域网 B)               

  20.       
  21.       在 Route B 上添加两条静态路由:

  22.         ip route 211.111.111.0   255.255.255.128 192.168.1.2
  23.         ip route 211.111.111.128 255.255.255.128 192.168.1.3
  24.       
复制代码


这样一来,我们就将一个 C类得公网IP 拆分成了两个:
Firewall A 得IP 范围是211.111.111.1-127
Firewall B 得IP 范围是211.111.111.129-254

好了,网络设计好了,下面我就以 方案一 我来讲如何配置防火墙 (续看第三篇)
 楼主| 发表于 2003-12-12 12:06:06 | 显示全部楼层
第三篇 防火墙得实现

我选用的平台是:

Redhat 8.0 + Shorewall 1.4.8 (其实就是基于iptables), 有三块网卡,以方案一为例。

可能很多朋友都不太清楚 shorewall (http://www.shorewall.net),我先介绍一下 shorewall ,其实他是一个基于 iptables 得一个防火墙,他得优点在于配置方便,便于管理,用它很容易就能配出一个企业级得防火墙策略。

这里我说一下我个人观点,iptables 得命令过于复杂和麻烦,在管理方面和可读性方面比较差,我个人认为我们作为一个网管得精力应该放在如何设计防火墙策略,而不要陷身于一个命令得写法上。好了,废话不说了。

安装好 Redhat 8.0 ,并装好三块网卡后,
http://slovakia.shorewall.net/pu ... -1.4.8-1.noarch.rpm下载 shorewall 的rpm 包(或者 tar 包都可以)

一:安装
rpm -ivh shorewall-1.4.8-1.noarch.rpm

二:配置

shorewall 得所有配置文件都在 /etc/shorewall 下面,好了我将详细得讲解如何配置 shorewall

这里我们假设 DMZ区域有如下一些的服务器:

  1. mail server:     10.1.2.2/24      公网地址:211.111.111.2
  2. pptp vpn server: 10.1.2.3/24      公网地址:211.111.111.3
  3. dns  server:  10.1.2.4/24      公网地址:211.111.111.4
  4. http server:     10.1.2.5/24      公网地址:211.111.111.5
复制代码

在 /etc/shorewall  可以看到有很多配置文件:

(我只讲我们要用到的配置文件,其它得很少用到,大家可以自己去看帮助,很好理解得)

zones     (定义防火墙得区域)
interfaces (定义接口)
masq        (定义伪装IP)
policy      (定义默认策略)
rules        (定义防火墙规则)


下面是各个配置文件的内容

  1. cat /etc/shorewall/zones:
  2. ================================================
  3. wan        Internet         Internet
  4. dmz        DMZ              Dmz
  5. lan        Lan              Lan
  6. ================================================

  7. cat /etc/shorewall/interfaces
  8. ================================================
  9. wan     eth0    detect
  10. lan     eth1    detect
  11. dmz     eth2    detect
  12. ================================================

  13. cat /etc/shorewall/masq
  14. ================================================
  15. eth0    192.168.1.2/32          211.111.111.1         #----- Firwall To Internet
  16. eth0    10.1.1.0/24             211.111.111.1         #----- Lan A To Internet
  17. eth0    10.1.2.2/32                211.111.111.2         #----- mail server To Internet
  18. eth0    10.1.2.3/32                211.111.111.3         #----- pptp server To Internet
  19. eth0    10.1.2.4/32                211.111.111.4         #----- dns server To Internet
  20. eth0    10.1.2.5/32                211.111.111.5         #----- http server To Internet
  21. ================================================

  22. cat /etc/shorewall/policy
  23. ================================================
  24. fw      all     ACCEPT      # Firewall 可以任意访问所有区域,包括互联网
  25. lan     wan     ACCEPT      # Lan A 可以任意访问互联网
  26. dmz     wan     ACCEPT      # DMZ 服务器可以任意访问互联网
  27. lan     dmz     ACCEPT      # Lan A 可以任意访问和管理DMZ服务器区

  28. wan     all     DROP        # 互联网不能随意访问内部网络和DMZ
  29. all     all     REJECT
  30. ================================================

  31. cat /etc/shorewall/rules
  32. ================================================

  33. #---------------------- Internet To mail Server -------------------------------

  34. DNAT    wan     dmz:10.1.2.2         tcp    smtp    -       211.111.111.2
  35. DNAT    wan     dmz:10.1.2.2         tcp    POP3    -       211.111.111.2

  36. #---------------------- Internet To PPTP Server -------------------------------

  37. DNAT    wan     dmz:10.1.2.3         tcp    1723    -       211.111.111.3
  38. DNAT    wan     dmz:10.1.2.3         47      -      -       211.111.111.3

  39. #---------------------- Internet To DNS Server -------------------------------

  40. DNAT    wan     dmz:10.1.2.4         tcp    53      -       211.111.111.4
  41. DNAT    wan     dmz:10.1.2.4         udp    53      -       211.111.111.4

  42. #---------------------- Internet To http Server -------------------------------

  43. DNAT    wan     dmz:10.1.2.5         tcp    http      -       211.111.111.5

  44. ================================================
复制代码

好了,防火墙都配置好了,现在防火墙的结果如下:


  1. Lan A 的用户     10.1.1.0/24      的用户全部伪装成 211.111.111.1 去访问互联网
  2. mail server:     10.1.2.2/32      以公网地址:211.111.111.2 访问互联网
  3. pptp vpn server: 10.1.2.3/32      以公网地址:211.111.111.3 访问互联网
  4. dns  server:  10.1.2.4/32      以公网地址:211.111.111.4 访问互联网
  5. http server:     10.1.2.5/32      以公网地址:211.111.111.5 访问互联网

  6. Firewall    可以任意访问所有区域,包括互联网
  7. Lan A       可以任意访问互联网
  8. DMZ         服务器可以任意访问互联网
  9. Lan A       可以任意访问和管理DMZ服务器区
  10. 互联网不能随意访问内部网络和DMZ
复制代码


好了,到这所有配置文件都已经配好了,然后删除 /etc/shorewall/startup_disable 文件,
用 shorewall restart 就可以启动防火墙了。

总结:

相信到现在,大家对 shorewall 的配置文档有了一定的了解了,大家可以看出shorewall 的配置是很通俗易懂的,很容易的就可以配置好,希望我写的这个文章能给大家一点帮助。

唉!!!! 写了将近两个小时,好累啊!

===================================== 完 ====================================
发表于 2003-12-12 12:45:54 | 显示全部楼层
兄弟辛苦了

台兄的大作,我已经拜读过了,水平高,而且行文也很严谨。新手也能看得懂。


向台兄致意 。

我已经把文章提交入库,但vbb中能实现图文保持原样,在postnuke中,就做不到这点。<code>控制无效,有点想不明白。

http://www.linuxsir.cn/postnuke/ ... order=0&thold=0
 楼主| 发表于 2003-12-12 13:00:29 | 显示全部楼层
最初由 北南南北 发表
兄弟辛苦了

台兄的大作,我已经拜读过了,水平高,而且行文也很严谨。新手也能看得懂。


向台兄致意 。

我已经把文章提交入库,但vbb中能实现图文保持原样,在postnuke中,就做不到这点。<code>控制无效,有点想不明白。

http://www.linuxsir.cn/postnuke/ ... order=0&thold=0


呵呵,是啊,我也是第一次发这么长的帖子,平时都没空,今天难的有空所以就写了一篇,我真心的希望这个论坛办的越来越好。这个Linux 论坛是我最常来的。 一开始我也不知道如何保存图文原样,后来不知道怎么就好了,后来看到多了个 code 代码,后来我就修改了。如果没有图的话新手看起来就没有这么直观了。  

希望大家多多交流,这样大家才会进步。  呵呵 :p
发表于 2003-12-12 21:09:49 | 显示全部楼层
强.....
学习中....
发表于 2003-12-13 16:48:52 | 显示全部楼层

请教~~~~~

关于
cat /etc/shorewall/masq
================================================
eth0    192.168.1.2/32          211.111.111.1         #----- Firwall To Internet
eth0    10.1.1.1/24             211.111.111.1         #----- Lan A To Internet
eth0    10.1.2.2/24                211.111.111.2         #----- mail server To Internet
eth0    10.1.2.3/24                211.111.111.3         #----- pptp server To Internet
eth0    10.1.2.4/24                211.111.111.4         #----- dns server To Internet
eth0    10.1.2.5/24                211.111.111.5         #----- http server To Internet
================================================

这一段能不能改成:
cat /etc/shorewall/masq
================================================
      
eth0    10.1.1.0/24             211.111.111.1         #----- Lan A To Internet
eth0    10.1.2.2/24                211.111.111.2         #----- mail server To Internet
eth0    10.1.2.3/24                211.111.111.3         #----- pptp server To Internet
eth0    10.1.2.4/24                211.111.111.4         #----- dns server To Internet
eth0    10.1.2.5/24                211.111.111.5         #----- http server To Internet
================================================
因为上面有ip的部分是网段,而且关于eth0接口的地址
必须要注明吗???
发表于 2003-12-13 17:05:14 | 显示全部楼层
兄弟文章写的很好 惭愧啊 刚刚看见
 楼主| 发表于 2003-12-14 09:47:30 | 显示全部楼层

回复: 请教~~~~~

最初由 yzyangfs 发表
关于
cat /etc/shorewall/masq
================================================
eth0    192.168.1.2/32          211.111.111.1         #----- Firwall To Internet
eth0    10.1.1.1/24             211.111.111.1         #----- Lan A To Internet
eth0    10.1.2.2/24                211.111.111.2         #----- mail server To Internet
eth0    10.1.2.3/24                211.111.111.3         #----- pptp server To Internet
eth0    10.1.2.4/24                211.111.111.4         #----- dns server To Internet
eth0    10.1.2.5/24                211.111.111.5         #----- http server To Internet
================================================

这一段能不能改成:
cat /etc/shorewall/masq
================================================
      
eth0    10.1.1.0/24             211.111.111.1         #----- Lan A To Internet
eth0    10.1.2.2/24                211.111.111.2         #----- mail server To Internet
eth0    10.1.2.3/24                211.111.111.3         #----- pptp server To Internet
eth0    10.1.2.4/24                211.111.111.4         #----- dns server To Internet
eth0    10.1.2.5/24                211.111.111.5         #----- http server To Internet
================================================
因为上面有ip的部分是网段,而且关于eth0接口的地址
必须要注明吗???


对的兄弟,你第一行是对的,是我写错了:

1: masq 是顺序执行的,你第一行写对了,就是
eth0 10.1.1.0/24    211.111.111.1  ,意思就是说所有 10.1.1.0/24 的网段从 eth0 接口出去的数据包都伪装成 211.111.111.1

2:但是eth0    192.168.1.2/32          211.111.111.1         #----- Firwall To Internet
这一行一定要加上,不然 Firewall 自己就不能上互联网了。

3:你第二行开始都写错了, 全部都应该是/32的掩码,因为 10.1.2.2/24 不是一个网络地址,所以必须用 10.1.2.2/32 来表示一个主机地址,后面的几行也都应该是 /32的掩码。

4:eth0 的出口伪装地址必须要写,你看拓扑结构就知道了,因为 eth0 是没有绑定任何一个公网地址的,他绑定的是私网地址,但他这个eth0的私网IP能够获得一个 C 类的公网地址路由,所以你必须指定你的出口伪装IP,当然,如果你在 eth0 已经绑定了公网IP的话,就不必指定了。 # 号后面的都可以不用写,不过写了就容易看懂一些。
 楼主| 发表于 2003-12-14 10:06:19 | 显示全部楼层

重要更正!!!!

重要更正!!!!!

我突然发现我有个地方可能是写的太快了,写错了。为了不影响网友的学习,特在此更正:

第一个错误:在第三篇
  1. [b]
  2. cat /etc/shorewall/masq
  3. ================================================
  4. eth0    192.168.1.2/32                211.111.111.1         #----- Firwall To Internet
  5. eth0    10.1.1.1/24[color=red]改成 10.1.1.0/24 [/color]                211.111.111.1         #----- Lan A To Internet
  6. eth0    10.1.2.2/24[color=red]改成 10.1.2.2/32 [/color]                211.111.111.2         #----- mail server To Internet
  7. eth0    10.1.2.3/24[color=red]改成 10.1.2.3/32 [/color]                211.111.111.3         #----- pptp server To Internet
  8. eth0    10.1.2.4/24[color=red]改成 10.1.2.4/32 [/color]                211.111.111.4         #----- dns server To Internet
  9. eth0    10.1.2.5/24[color=red]改成 10.1.2.5/32 [/color]                211.111.111.5         #----- http server To Internet
  10. ================================================
复制代码


第二个错误:在第三篇
  1. [b]
  2. 现在防火墙的结果如下:

  3. Lan A 的用户     10.1.1.0/24      的用户全部伪装成 211.111.111.1 去访问互联网
  4. mail server:     10.1.2.2/24[color=red]改成 10.1.2.2/32 [/color]      以公网地址:211.111.111.2 访问互联网
  5. pptp vpn server: 10.1.2.3/24[color=red]改成 10.1.2.3/32 [/color]      以公网地址:211.111.111.3 访问互联网
  6. dns  server:  10.1.2.4/24[color=red]改成 10.1.2.4/32 [/color]      以公网地址:211.111.111.4 访问互联网
  7. http server:     10.1.2.5/24[color=red]改成 10.1.2.5/32 [/color]      以公网地址:211.111.111.5 访问互联网

  8. Firewall    可以任意访问所有区域,包括互联网
  9. Lan A       可以任意访问互联网
  10. DMZ         服务器可以任意访问互联网
  11. Lan A       可以任意访问和管理DMZ服务器区
  12. 互联网不能随意访问内部网络和DMZ
复制代码

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表