昨天网上有一个朋友联系我,反馈按照我之前发布http://linux987.zjp11.host.35.com/?p=508内核升级完后,启动iptables会报错。其实是他自己有相关的state模块没有选择了。整理下处理过程:
[root@localhost ~]# service iptables restart
清除防火墙规则: [确定]
把 chains 设置为 ACCEPT 策略:filter [确定]
正在卸载 Iiptables 模块: [确定]
应用 iptables 防火墙规则:iptables-restore: line 27 failed
[失败]
报错的是“COMMIT”这行。其实不是这行的问题。是iptables的过滤规则有包括-m选项,如:
-A INPUT -p tcp -m tcp –dport 80 -j ACCEPT
-m 这个选项要加载到module state。
重新编译 kernel,选上这个 module 就可以解决。操作步骤如下:
[root@localhost linux-2.6.30]# cd /usr/src/linux-2.6.30
[root@localhost linux-2.6.30]# make menuconfig
进入图形界面后,把networking support—>networking options—>network packet filtering framework(netfilter)
下的Core Netfilter Configuration下的state相关模块选中.选择相应的配置时,有三种选择,它们分别代表的含义如下:
“Y”- 将该功能编译进内核
“N”- 不将该功能编译进内核
“M”- 将该功能编译成可以在需要时动态插入到内核中的模块。
说明:将与核心其它部分关系较远且不经常使用的部分功能代码编译成为可加载模块,有利于减小内核的长度,减小内核消耗的内存,简化该功能相应的环境改变时对内核的影响。许多功能都可以这样处理,
[root@localhost linux-2.6.30]# make bzImage
[root@localhost linux-2.6.30]# make modules
[root@localhost linux-2.6.30]# make modules_install
[root@localhost linux-2.6.30]# make install
[root@localhost linux-2.6.30]#cp arch/x86/boot/bzImage /boot/vmlinuz-2.6.30
[root@localhost linux-2.6.30]#cp /usr/src/linux-2.6.30/System.map /boot/System.map-2.6.30
[root@localhost linux-2.6.30]#reboot
[root@localhost ~]# service iptables restart
清除防火墙规则: [确定]
把 chains 设置为 ACCEPT 策略:filter [确定]
正在卸载 Iiptables 模块: [确定]
应用 iptables 防火墙规则: [确定]
载入额外 iptables 模块:ip_conntrack_netbios_ns [确定]
最后再测试把iptables重启下,问题解决.
小结:重新编译内核是比较危险的动作,有可能出现系统启不来的情况,所以建议重新编译前,要熟悉下相关模块的功能,当然也不是一定要state模块了,iptables若不用这个选项也是可以正常启动的。查了iptables手册,state这个模块能够跟踪分组的连接状态(即状态检测)。能够检测每个连接状态的防火墙叫作状态包过滤防火墙。forums.Phontol.com它除了能够完成简单包过滤防火墙的包过滤工作外,还在自己的内存中维护一个跟踪连接状态的表,比简单包过滤防火墙具有更大的安全性。
联系客服