问题描述
在重启 iptables 服务时,控制台输出以下错误信息:
Flushing firewall rules: [ OK ]
Setting chains to policy ACCEPT: security raw nat mangle fi[FAILED]
Unloading iptables modules: [ OK ]
Applying iptables firewall rules: [ OK ]
Loading additional iptables modules: ip_conntrack_netbios_n[FAILED]
这表明在设置链的默认策略和加载额外模块时遇到了问题。
解决方案一:修复 Setting chains to policy ACCEPT 失败
此错误通常与特定内核版本或 iptables 初始化脚本的兼容性问题有关。以下方法在某些旧版本系统中可能有效,但最根本的解决方案可能是升级系统或内核。
- 备份并尝试修补 iptables 初始化脚本:
cd /etc/init.d/
cp iptables ~/iptables.backup
wget -O iptables.patch http://bpaste.net/raw/47952/
注意:如果下载链接失效或提示证书错误,请尝试:
wget --no-check-certificate -O iptables.patch http://bpaste.net/raw/47952/
- 应用补丁:
patch -p1 < iptables.patch
如果提示需要指定文件,请输入 /etc/init.d/iptables。
- 清理补丁文件:
rm iptables.patch
重要说明:此补丁链接(bpaste.net/raw/47952)可能已失效,因为原文内容较旧。如果修补无效,建议考虑升级系统或使用更新的防火墙解决方案(如 firewalld 或 nftables)。
解决方案二:修复 Loading additional iptables modules 失败
此错误是因为系统尝试加载一个已废弃或不存在的内核模块 ip_conntrack_netbios_ns。
- 编辑 iptables 配置文件:
vi /etc/sysconfig/iptables-config
- 找到并注释掉加载该模块的行。通常配置类似:
# Load additional iptables modules (space separated).
# Example: IPTABLES_MODULES="ip_conntrack_ftp ip_conntrack_irc"
IPTABLES_MODULES="ip_conntrack_netbios_ns"
将其修改为:
# Load additional iptables modules (space separated).
# Example: IPTABLES_MODULES="ip_conntrack_ftp ip_conntrack_irc"
# IPTABLES_MODULES="ip_conntrack_netbios_ns"
- 保存并退出编辑器(在 vi 中按
Esc键,输入:wq,然后按回车)。
最终步骤
完成上述修改后,重启 iptables 服务以应用更改:
service iptables restart
或者,在 Systemd 系统中使用:
systemctl restart iptables
总结与建议
本文提供的解决方案针对较旧的 Linux 发行版(如 CentOS 6/RHEL 6)。对于现代系统:
- CentOS 7/RHEL 7 及以上版本默认使用 firewalld。
- 考虑迁移到 nftables(iptables 的继任者)。
- 如果问题持续存在,升级内核或更换到更新的发行版可能是最有效的解决方案。