在配置redhat iptables 防火墙时,遇到如下几个问题:
1. 在启动防火墙时,系统报错:
[root@redhat2-linux-2101 sysconfig]# service iptables restart
清除防火墙规则: [确定]
把 chains 设置为 ACCEPT 策略:filter [确定]
正在卸载 Iiptables 模块: [确定]
应用 iptables 防火墙规则:Bad argument `COMMIT'
Error occurred at line: 25
Try `iptables-restore -h' or 'iptables-restore --help' for more information.
[失败]
[root@redhat2-linux-2101 sysconfig]#
配置文件如下:
[root@redhat2-linux-2101 sysconfig]# cat iptables
1 # Firewall configuration written by system-config-securitylevel
2 # Manual customization of this file is not recommended.
3 *filter
4 :INPUT ACCEPT [0:0]
5 :FORWARD ACCEPT [0:0]
6 :OUTPUT ACCEPT [0:0]
7 :RH-Firewall-1-INPUT - [0:0]
8 -A INPUT -j RH-Firewall-1-INPUT
9 -A FORWARD -j RH-Firewall-1-INPUT
10 -A RH-Firewall-1-INPUT -i lo -j ACCEPT
11 -A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
12 -A RH-Firewall-1-INPUT -p 50 -j ACCEPT
13 -A RH-Firewall-1-INPUT -p 51 -j ACCEPT
14 -A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
15 -A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
16 -A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
17 -A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
18 -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
19 -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
20 -A RH-Firewall-1-INPUT -m state --state NEW -m udp -p tcp --dport 177 -j ACCEPT
21 -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
22 -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
23
24 -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
25 COMMIT
26 #the end
第25行的语句是 COMMIT,这是系统所必须的一句。如果注释掉,系统或报错提示需要commit。
经过检查,原因是在COMMIT语句之后有空格,经过在其他机器上测试,在添加空格后系统就会出现上述错误。如果是commit与上面一句之间没有明确使用回车断开,也会有此问题和错误提示,但使用cat命令查看看不到中间的空格,很容易误认为是commit是下一行,其实不是。
在网上搜索时,看到有人提到是内核参数问题,需要重新编译。不知道是否和这个有关系。
2. 修改上述内容后重新启动,仍报错:
[root@redhat2-linux-2101 sysconfig]# service iptables restart
清除防火墙规则: [确定]
把 chains 设置为 ACCEPT 策略:filter [确定]
正在卸载 Iiptables 模块: [确定]
应用 iptables 防火墙规则:Bad argument `COMMIT'
Error occurred at line: 25
Try `iptables-restore -h' or 'iptables-restore --help' for more information.
[失败]
[root@redhat2-linux-2101 sysconfig]#
奇怪了,还会有啥问题呢?
查看日志看到如下信息:
Jul 22 11:15:20 OW2-linux-2101 kernel: ip_tables: udp match: only valid for protocol 17
后来想到,-m 状态过滤是否是针对TCP而言的,UDP协议没有连接状态,是否是因为-m 参数项中不能使用UDP协议呢。
将20行注释之后,iptables 重启启动正常。
将20行中 udp 177端口的许可更改到上面
-A RH-Firewall-1-INPUT -p udp -m udp --dport 177 -j ACCEPT
然后重新启动iptables 服务。
评论