iptables 防火墙 firewall COMMIT Linux

Applying iptables firewall rules: iptables-restore: line 20 failed [FAILED]

修改防火墙配置,然后重启 iptables,结果得到上面这个错误提示。

配置文件 20 行是一个 COMMIT,不是这行的问题。

跟内核有关系,但不要轻易重新编译内核,搞不好系统就没法用了。

找到上面问题原因,有其他方法可以解决的。

看了国外的一个论坛,有个人说是 -m 这个选项造成的。

因为当前系统内核中缺少一个 module,而 -m 这个选项刚好要加载这个 module。

这个 module 是 xt_state。

当然,重新编译 kernel,加上这个 module 可以解决问题,但我不敢,因为不会……

我可以不用 -m 这个选项。

其实我就是要求开放 22 和 80 这 2 个端口,其他的一律拒绝。

之前导致报错的写法:

-A INPUT -m state –state NEW -m tcp -p tcp –dport 22 -j ACCEPT
-A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT

-A INPUT -m state –state NEW -m tcp -p tcp –dport 22 -j ACCEPT
-A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT

把 -m state –state NEW -m tcp 这段去掉:

-A INPUT -p tcp –dport 22 -j ACCEPT
-A INPUT -p tcp –dport 80 -j ACCEPT

删除那个 -m state –state NEW 的意思是匹配状态,当新连接创建时应用过滤条件。

我估计这个是为了提升性能吧,连接创建时如果不匹配规则,就拒绝掉后续的请求,一旦连接建立,就不用对后续的包进行再次过滤检查。

如果是这样,我觉得可以接受,无非是服务器负载高一点而已,对流量小的网站来说没什么影响。等流量大了再研究编译内核吧。

Tags:

Leave a Reply

Your email address will not be published.

*