使用iptables-restore应用iptables规则时出错

您好我使用VPS上的Ubuntu 9.04。 如果我应用iptables规则,则会出现错误。 这是我所做的。

1.保留现有规则

iptables-save> /etc/iptables.up.rules

创buildiptables.test.rules并添加一些规则

nano /etc/iptables.test.rulesnano /etc/iptables.test.rules

这是我添加的规则

*filter # Allows all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0 -A INPUT -i lo -j ACCEPT -A INPUT -i ! lo -d 127.0.0.0/8 -j REJECT # Accepts all established inbound connections -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Allows all outbound traffic # You can modify this to only allow certain traffic -A OUTPUT -j ACCEPT # Allows HTTP and HTTPS connections from anywhere (the normal ports for websites) -A INPUT -p tcp --dport 80 -j ACCEPT -A INPUT -p tcp --dport 443 -j ACCEPT # Allows SSH connections # # THE -dport NUMBER IS THE SAME ONE YOU SET UP IN THE SSHD_CONFIG FILE # -A INPUT -p tcp -m state --state NEW --dport 22- j ACCEPT # Allow ping -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT # log iptables denied calls -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7 # Reject all other inbound - default deny unless explicitly allowed policy -A INPUT -j REJECT -A FORWARD -j REJECT COMMIT 

编辑后,当我尝试通过应用规则

 iptables-restore < /etc/iptables.test.rules 

我得到以下错误

iptables-restore:第42行失败

第42行是COMMIT,我评论说,我得到了

iptables-restore:COMMIT预计在43行

我不知道是什么问题,它正在期待COMMIT,但如果COMMIT是在那里给出错误。 难道这是因为我使用VPS吗?我的供应商使用OpenVZ进行虚拟化。

由于iptables-restore工作方式,几乎所有的错误都会被报告为COMMIT点。 在奇怪的情况下,我有这些错误,我在每一个重要的行之后(或者,如果我感到可疑,在我认为可能是问题的路线之后),看看哪一个吧台,

但是,对您的规则进行简短的检查表明这是您可能遇到的问题:

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

22-j之间没有空格可能是困难的原因。 酷儿们说,“注意细节失败”。

编辑 :有了额外的信息,我要走出去说,这是OpenVZ的问题(您的VPS提供商没有给你任何iptables配额添加自己的规则)。 无论如何,我会find一个新的VPS提供商; VZ就像虚拟化的费雪玩具一样。 它在企业数据中心和价格0.89美元/十年的“价格敏感”terminal市场中占有一席之地,但对于专业VPS托pipe来说,这绝对是一条狗。

非常旧的post在这一点上,但它的顶级谷歌结果,所以我想我会更新我的解决scheme…

在COMMIT之后必须有一个空行,否则iptables-restore会在COMMIT行处出现“no command specified”错误。

由于您在COMMIT之前拥有空间特性,可能是因为失败?

我知道这是一个旧post,但它可以解决某些问题。

我有同样的错误,这是因为我有一个错字。

抛出的错误是在最后一行“COMMIT”中,但实际上是这样的:

 -A RH-Firewall-1-INPUT -p tcp -m udp --dport 161 -j ACCEPT 

错误在于它在同一行“tcp”,然后是“udp” 。 所以改变这一行:

 -A RH-Firewall-1-INPUT -p udp -m udp --dport 161 -j ACCEPT 

解决了我的问题