|
用IPFW实现BSD防火墙
:2005-10-18
使用ipfw配置系统的防火墙
(一) FreeBSD操作系统本身带有二种内置的IP信息包检查机制:ipfw和ipfilter。在创建决定允许哪些信息包进入系统、哪些信息包会被拒之系统门外的规则集方面,二种机制各有自己独特的语法。在这里,我们将讨论如何使用ipfw配置系统的防火墙。
在能够使用ipfw防火墙机制之前,我们需要在FreeBSD的内核配置文件中添加一些选项,并重新编译内核。如果不太清楚如何编译FreeBSD的内核,请参阅相关的手册。
可供ipfw使用的选项有好几个,我们首先从讨论LINT开始。在这里,我通过使用“/”符号进行搜索,以便能够快速地发现恰当的小节:
cd /usr/src/sys/i386/conf more LINT /IPFIREWALL # IPFIREWALL和ipfw软件,这二者就可以支持IP防火墙的构建。IPFIREWALL_VERBOSE向 # 系统的注册程序发送注册信息包,IPFIREWALL_VERBOSE_LIMIT限制一台机器注册的次 # 数。注意:如果没有在启动时添加任何允许IP访问的规则,IPFIREWALL的缺省配置是 # 禁止任何IP数据包进出系统的,这时你甚至不能访问网络中的其他机器。建议首次使 # 用这一功能时在/etc/rc.conf中设置firewall_type=open,然后在对内核进行测试后 # 再在/etc/rc.firewall仔细地调整防火墙的设置。IPFIREWALL_DEFAULT_TO_ACCEPT使 # 得缺省的规则允许所有形式的访问。在使用这一变量时应该非常小心,如果黑客能够 # 突破防火墙,就能任意访问你的系统。
要启用ipfw,必须设置IPFIREWALL选项,它将通知操作系统的内核检查每个IP数据包,将它们与规则集进行比较,通过添加 IPFIREWALL_VERBOSE选项包括注册支持是一个好主意,还应该通过添加IPFIREWALL_VERBOSE_LIMIT选项来限制内核注册的数据包的数量。
除非在规则集中进行了特别的说明,缺省情况下ipfw将阻塞所有的IP数据包。由于缺省设置可以仔细地控制哪些数据包会被接受,因此我非常喜欢它。我不喜欢内核会接受自己都不清楚内容的数据包,如果需要的数据没有被系统接受,会得到系统的提示,并修改规则集使系统可以接受它们。这时,如果有没有预料到的数据包通过系统也不会知道。因此,我不会通过包括IPFIREWALL_DEFAULT_TO_ACCEPT选项来绕过缺省的设置。
# IPDIVERT启用由ipfw divert使用的转向IP套接字。这一选项需要与natd联合使用。由 # 于在本例中建立的防火墙仅用于保护一台机器,因此不需要这个选项。 # IPSTEALTH启动支持秘密转发的代码,这一选项在使防火墙不被traceroute和类似工具发现时很有用。
这是一个非常有趣的选项,因此我将在防火墙中包含这一选项,并在对防火墙进行测试时看看它的工作原理。
# 接受过滤器中的静态连接 # options ACCEPT_FILTER_DATA # options ACCEPT_FILTER_HTTP
在这台计算机上运行的不是互联网服务器,因此无需在编译时包括这二个选项。
# 下面的选项和系统级变量控制系统如何处理适当的TCP数据包。 # # TCP_DROP_SYNFIN可以支持包含有SYN+FIN的TCP数据包,它使nmap不能识别TCP/IP栈,# 但可以破坏对RFC1644扩展的支持,建议不要在互联网服务器中使用。 # # TCP_RESTRICT_RST支持阻止TCP RST栈的泄出,对于需要大量SYN的系统或者不希望被简单地扫描到端口的系统非常有用。
我将在防火墙中包括这些选项,在测试防火墙时,仔细看看它们有什么作用。
# ICMP_BANDLIM根据带宽限制产生icmp错误。一般情况下我们需要这个选项,它有助于 # 你的系统免受D.O.S.攻击。 # options ICMP_BANDLIM
FreeBSD内核缺省支持这一选项。
# DUMMYNET启动“dummynet”带宽限制软件。还需要有IPFIREWALL选项的支持 # BRIDGE启动以太网卡之间的桥接功能
在本例中我不会选这二个选项,因为在独立的计算机系统上无需对流量进行控制。
在重新编译FreeBSD内核之前,我将在内核配置文件中添加下面的内容:
#以缺省的、拒绝所有数据包方式启动IPFW options IPFIREWALL options IPFIREWALL_VERBOSE options IPFIREWALL_VERBOSE_LIMIT=10
#隐藏防火墙 options IPSTEALTH
#使不被nmap发现,如果是互联网服务器则去掉该选项。 options TCP_DROP_SYNFIN
#防止端口扫描 options TCP_RESTRICT_RST
在重新编译内核时,我将再次仔细审查在/etc/rc.conf中添加的选项。下面是手册中有关各个选项的说明:
man rc.conf /firewall
firewall_enable (布尔型)如果不想在系统启动时加载防火墙规则集,将其值设置为NO;否则,将其设置为YES。如果它被设置为YES,而内核在编译时没有使用IPFIREWALL选项,ipfw内核模块将自动被加载。 firewall_script (字符串型)如果要运行一段防火墙脚本程序,而不是/etc/rc.firewall,将这一变量设置为脚本程序的路径全名。 firewall_type (字符串型)从/etc/rc.firewall或包含规则集的文件中的防火墙类型中指定防火墙类型。/etc/rc.firewall中可选的防火墙类型为:open-不限制IP访问;closed-禁止除通过lo0进行的之外的所有IP服务;client-对工作站的基本保护;simple-对LAN 的基本保护。如果给的是一个指定的文件名,则必须使用全路径名。
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] 下一页 |