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,而其他用户都不可以。... 下一页