转from http://iptables-tutorial.frozentux.net/cn/iptables-tutorial-cn-1.1.19.html
Chapter 7. 防火墙配置实例 rc.firewall
在本章里,我们将要建立一个防火墙,并且周详地说明了如何去阅读、理解他。在这个例子中,我们使用的是最基本的配置,对其工作方式和我们在里面做了些什么都有深入的解释。这个例子应该能在某些方面给您提供基本的思路,比如,如何解决不同的问题(当然是网络方面的),再如,在真正把脚本应用于工作之前应该考虑些什么,等等。对本例中的变量值做些修改就可能在实际的网络中使用,但不建议您这样做,因为您的网络配置和我在例子中使用的情况可能不相同哦。但只要您有了这个基本的防火墙规则集,很可能只需要少量的调整就能够把他用于实际了。
![]() | 可能有效率更高的方法来建立规则集,但这个脚本就是为易读而写的,所以每个人都能理解他,即使没有多少BASH脚本编程的知识。 |
7.1. 关于rc.firewall
好,既然您能从头看到这儿,就说明您已做好一切准备来检查这个脚本了。例子rc.firewall.txt(代码在附录示例脚本的代码里)很大,但没有多少注释。我建议您先大致看看他的内容,留个印象,再来仔细地阅读本章(要有耐心哦)。
7.2. rc.firewall详解
7.2.1. 参数配置
本小节要对照着rc.firewall脚本代码来看。
rc.firewall.txt的第一小节是配置选项,包含的都是一些至关重要的信息,他们是随着您的网络的不同而改变的。比如,每个网络的IP地址都不相同,任何要把他放在这儿。$INET_IP的值应该是在Internet上能使用的才能够,假如您有$INET_IP的话。假如没有,您就要看看 rc.DHCP.firewall.txt这种配置方法了,里面有很多有趣的东西。变量 $INET_IFACE应该指向连接Internet的真实设备,比如eth0、eth1、ppp0、tr0等等。
这个脚本里没有包含任何DHCP或PPPoE的选项,所以这两节是空白的。其他空白的部分,也是这样的原因。之所以保留这些空白,是为了更容易区分这些结构相同而内容不同的脚本。假如您需要这些部分,能够从其他脚本拷贝过来,或您自己写了:)
Local Area Network小节包含的是LAN必须的信息,如连接到LAN的网卡的IP、LAN所用的地址段等。
Localhost configuration小节里的信息在99%的情况下都不要改变,因为我们总是使用127.0.0.1作为地址,也总是把接口命名为lo。紧随其后的是IPTables Configuration,里面只有一个变量,即$IPTABLES。他指定的是iptables程式的准确位置,假如是自己编译安装的话,一般都是/usr/local/sbin/iptables。但更多的发行版都把程式放在另外的地方,如 /usr/sbin/iptables,等等。
7.2.2. 外部模块的装载
首先,我们要使用命令/sbin/depmod -a使module dependencies files保持最新,然后,再装载脚本需要的模块。我们应该始终避免装入无需的模块,假如可能,还要尽力避免装入无所事事的模块,除非您确实需要他们。这样做主要是为了安全,因为每增加一个模块都要花费额外的努力以增加新的规则(这样就容易出漏洞哦)。比如,假如您想支持LOG、REJECT和MASQUERADE target,不要把相应的功能静态地编译进内核,我们使用以下模块来完成:
/sbin/insmod ipt_LOG
/sbin/insmod ipt_REJECT
/sbin/insmod ipt_MASQUERADE
![]() | 注意,本文使用的脚本都是用类似命令装入模块,这可能会引起装载失败(有错误信息显示)。原因是多方面的,但假如较基本的模块也失败的话,那最大的可能是哪个模块或相应的功能已被静态地编译进内核了。进一步的信息能够看看附录常见问题和解答中的模块装载问题。 |
接下来的一行是装载ipt_owner模块,他的作用是“只允许特定的用户创建特定的连接”。在这个例子中,我没有使用到他,但您可能会用到。比如,您可能只允许root建立FTP 和HTTP连接访问redhat.com,而其他用户都不能够。您也能够只允许您自己使用的用户名和root才能访问 Internet,这样别人会很烦的,但您的安全性在某些方面会有所提高哦,比如,把您当作发起攻击的跳板的情况。关于ipt_owner的更多信息,能够看看章节规则是如何练成的里的Owner match 。
在这儿我们也能够为状态匹配安装扩展模块。状态匹配和连接跟踪的任何扩展模块的名字都是这样的: ip_conntrack_*和ip_nat_* 。连接跟踪的helper是一些特别的模块,正是他们告诉了内核怎样恰当地跟踪特别的连接。没有这些helper,内核在处理特别连接的时候,就不知道该查看些什么东西。NAT helper就是连接跟踪helper的扩展,他会告诉内核在包里找什么、如何转换他们,这样连接才能真正工作起来。比如, FTP是个复杂的协议,他利用包的有效数据部分来发送连接信息。假如一台需要被NAT的机子(译者注:也就是说,机子在一个内网里)连接Internet上的FTP服务器,他就会把自己的内网IP地址放在包的数据区内发送出去,以使FTP服务器能连接到那个地址。但私有地址不能在LAN外使用,所以FTP服务器不知道用他做什么,连接就会断掉了。FTP NAT helper能完成这些连接中任何的地址转换工作,因此FTP服务器就知道该往哪儿连了。同样的事情也发生在DCC的文档传输(这里指的是发送)和聊天上,为了建立连接,IP地址和端口都需要利用IRC协议的数据区发送,而且还要做一些转换工作。没有这些helper的话,FTP和IRC只有一部分工作是正常的,但另一部分根本就无法工作。例如,您能够通过DCC接收文档,但就是不能发送。这个问题的原因在于DCC是如何建立连接的。当DCC想发送文档时,会告诉接收者您要发送文档,并让他知道要连接到什么地方。假如没有helper,这个DCC连接最终会断开,因为接收者收到的是内网的地址。这样,当他按那个地址连接时,其实就连到和他在同一内网的机子了。那为什么能够接收呢?因为发送者给您的是可在 Internet上使用的IP地址(大部分情况下,IRC服务器都有真实的IP地址)。
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!






