为什么这个iptables文件行在CentOS 6中失败

嗨,任何人都可以帮助我理解为什么行15失败据说在我的iptables文件。 我正在使用CentOS 6。

当我尝试重新启动iptables服务时,获取以下内容:

[root@dbserver ~]# service iptables restart iptables: Flushing firewall rules: [ OK ] iptables: Setting chains to policy ACCEPT: filter [ OK ] iptables: Unloading modules: [ OK ] iptables: Applying firewall rules: iptables-restore: line 15 failed [FAILED] 

我的iptables文件如下所示:

 # Firewall configuration written by system-config-firewall # Manual customization of this file is not recommended. *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT #-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 80 -j ACCEPT -A RH-Firewall-1-INPUT -m tcp -p tcp --dport 53 -j ACCEPT -A RH-Firewall-1-INPUT -m udp -p tcp --dport 53 -j ACCEPT -A RH-Firewall-1-INPUT -m tcp -p tcp --dport 443 -j ACCEPT -A RH-Firewall-1-INPUT -m tcp -p tcp --dport 25 -j ACCEPT -A RH-Firewall-1-INPUT -s 192.168.1.1/254 -m state --state NEW -p tcp --dport 22 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -p tcp --dport 21 -j ACCEPT 

我只是真的试图允许目前从本地networking访问机器。

任何帮助将不胜感激。 谢谢。

编辑:

根据第一个答案,已将COMMIT移到文件结尾,但仍然收到错误…

 # Firewall configuration written by system-config-firewall # Manual customization of this file is not recommended. *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited -A RH-Firewall-1-INPUT -m tcp -p tcp --dport 80 -j ACCEPT -A RH-Firewall-1-INPUT -m tcp -p tcp --dport 53 -j ACCEPT -A RH-Firewall-1-INPUT -m udp -p tcp --dport 53 -j ACCEPT -A RH-Firewall-1-INPUT -m tcp -p tcp --dport 443 -j ACCEPT -A RH-Firewall-1-INPUT -m tcp -p tcp --dport 25 -j ACCEPT -A RH-Firewall-1-INPUT -s 192.168.1.0/255 -m state --state NEW -p tcp --dport 22 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -p tcp --dport 21 -j ACCEPT COMMIT 

错误:

 [root@dbserver ~]# service iptables restart iptables: Flushing firewall rules: [ OK ] iptables: Setting chains to policy ACCEPT: filter [ OK ] iptables: Unloading modules: [ OK ] iptables: Applying firewall rules: iptables-restore: line 13 failed [FAILED] 

简单 – 您需要将您的COMMIT下移到文件末尾。

COMMIT告诉iptables你已经完成了你的声明,并且想把你的configuration发送到内核。 它结束你的声明。 你告诉iptables COMMIT,然后你给没有新的声明新的规则,因此你的错误。

编辑以包含顺风评论的内容:

下面是你的configuration更新和工作(不一定是最佳)的版本: http : //gist.github.com/3818123 。 我将总结一些问题:

  1. 您的input链RH-Firewall-1-INPUT不存在。 你是从别的地方复制粘贴的吗?
  2. 您的一些规则在您的默认拒绝规则之后下降。 即使语法花了,规则也不会起作用。
  3. 192.168.1.1/254甚至没有接近有效的CIDR寻址。 你的意思是192.168.1.0/24?
  4. 你有一个RH-Firewall-1-INPUT -m udp -p tcp,这没有任何意义 – 我假设你的意思是-A INPUT -m udp -p udp。

除了jgoldschrafe提到的COMMIT问题之外,您正在尝试将行添加到不存在的规则( RH-Firewall-1-INPUT )。

您将需要添加一条线

 :RH-Firewall-1-INPUT - [0:0] 

正下方

 :OUTPUT ACCEPT [0:0] 

这将宣布链,从而允许你添加规则。 但链条仍然没有效果,因为这个名字没有任何魔力,三个主链( INPUTOUTPUTFORWARD )都没有发送任何数据FORWARD它。 当然,你可以在INPUT链上添加一条规则来将stream量发送到你的新链,但是请不要采取这种错误的方式 – 我注意到它说在该文件的顶部

不推荐手动定制这个文件。

这是有原因的。 尽一切办法忽略这一点,并对其进行编辑,但在学习正确的时候,可能会使系统的安全性或可用性出现一些相当大的漏洞。

编辑:我怀疑第19行的问题是指定为192.168.1.0/255 ,这是无效的地址范围。 如果你想要指定192.168.1.0192.168.1.255之间的所有地址,你需要192.168.1.0/24

我恳求你的赦免,但是你真的不是那些了解防火墙和networking的人,而且 – 假设这是一个你专业维护的服务器 – 可能不是学习这个东西的最好的地方。

一般来说,它通过iptables添加规则,然后将它们转储到一个文件与iptables保存,以防万一你想用它来通过iptables恢复加载,例如当你的系统重新启动,因为很简单,因为iptables的保存知道它自己的先决条件比你好。

尝试把两条线

 -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited 

在COMMIT之前的文件末尾。

是啊,伙计,/ 24 …斜线表示法。 谷歌斜杠符号转换。 看着你的第一个例子桌子让我喘不过气来。

多年来我已经多次被告知同样的事情,但是你已经过了头。 如何在不知道斜线符号的情况下手动编辑iptables规则? 它被用在很多…到处都是。

就像大家所说的那样,重要与否,这是一个服务器 – 这不是一个可以玩的地方。 如果安全性不重要,它在防火墙后面,而不是暴露在互联网上,请closuresiptables('#service iptables stop; #chkconfig iptables off')…并在家玩。

这样,当东西不起作用时,你不必为此而奇怪。