linux iptables错线

时间:2014-03-16 16:25:04

标签: linux firewall iptables

我有下一个 / etc / sysconfig / iptables 规则(安装后的默认设置):

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [92:28264]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

添加这样的角色后:

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

此时端口80应该打开吗? 在我保存iptables之后:

service iptables save

我得到了

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [92:28264]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

哪个不起作用,我预计新规则要高一行,你怎么看? 我正在使用centOS。另外,这里最好的做法是什么,如果我只是更改文件并重新启动iptables,那会更好吗?  非常感谢你。

2 个答案:

答案 0 :(得分:0)

-A INPUT表示附加到链INPUT,因此规则结束。您希望-I INPUT 4在REJECT规则之前将规则插入链中。

答案 1 :(得分:0)

更改文件/etc/sysconfig/iptables后,必须重新启动iptables:

/etc/init.t/iptables restart

OR

service iptables restart

但是当你在bash中编写iptables命令时,你必须这样做:

/etc/init.d/iptables save

OR

service iptables save

尝试将/etc/sysconfig/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 --protocol icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp --protocol tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp --protocol tcp --dport 80 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

在bash中输入iptables命令也是正确的:

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

如果您使用的是基于debian或任何发行版,建议您在bash(终端)中输入iptables命令,因为/etc/sysconfig/iptables仅在 redhat 的发行版中存在...

更新

如果你想在bash终端中运行iptables命令,最好先删除你的规则......你可以运行这个bash脚本:

#!/bin/bash 

iptables -F
iptables -X

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT

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

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

/etc/init.d/iptables save