IPtables - 打开端口不起作用

IPtables - 打开端口不起作用

我正在编写一个基于文本文件打开端口的脚本,但在打开这些端口时遇到了问题。例如,我尝试通过输入以下命令打开端口 18819

/sbin/iptables -A INPUT -m state --state NEW -p tcp --dport 18819 -j ACCEPT

或者

/sbin/iptables -A INPUT -p tcp -s 0/0 --sport 1024:65535 -d [myIP] --dport 18819 -m state --state NEW,ESTABLISHED -j ACCEPT

如果我输入:iptables --list --numeric 结果:

... 
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:18819 
...

如果我输入:vi /etc/sysconfig/iptables

109 -A INPUT -p tcp -m state --state NEW -m tcp --dport 18819 -j ACCEPT-
110 -A INPUT -p tcp -m state --state NEW -m tcp --dport 7667 -j ACCEPT-
111 -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT-
112 -A INPUT -p tcp -m state --state NEW -m tcp --dport 8443 -j ACCEPT-
113 -A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT-
114 -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT-
115 -A INPUT -p tcp -m state --state NEW -m tcp --dport 8080 -j ACCEPT-
116 -A INPUT -p tcp -m state --state NEW -m tcp --dport 10781 -j ACCEPT-
117 -A INPUT -p tcp -m state --state NEW -m tcp --dport 18819 -j ACCEPT-
118 -A INPUT -p tcp -m state --state NEW -m tcp --dport 7667 -j ACCEPT-
119 -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT-
120 -A INPUT -p tcp -m state --state NEW -m tcp --dport 8443 -j ACCEPT-
121 -A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT-
122 -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT-
123 -A INPUT -p tcp -m state --state NEW -m tcp --dport 8080 -j ACCEPT-
124 -A INPUT -p tcp -m state --state NEW -m tcp --dport 10781 -j ACCEPT-
125 -A INPUT -p tcp -m state --state NEW -m tcp --dport 18819 -j ACCEPT-

您可以看到我输入了无数次。无论如何,在我执行“service iptables restart”或保存后,端口仍然似乎通过 telnet(来自同一网络上的其他计算机)关闭,并通过端口扫描软件关闭。有什么想法吗?

答案1

您的命令存在几个问题。

首先,删除所有“过滤表”规则并从头开始:iptables --flush

然后只关注你想要的东西,不要在不知道它们做什么的情况下从谷歌复制/粘贴命令:

您想要打开端口 18819 以接收连接,协议是 tcp,源可以是任何内容,接口可能是 eth0:

iptables -A INPUT -i eth0 -p tcp --dport 18819 -j ACCEPT

另外,不要将自己锁定在系统之外:

iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT

最后关闭所有其他端口(作为最后一个命令运行,此后添加的任何内容都将无用)。

iptables -A INPUT -j DROP

如果你想进一步了解,请阅读一些文档:开始这里然后这里然后这里当然,请阅读 iptables 的手册页:man iptables

注意:在第一个命令中,您只为新连接打开端口,而保留已建立的连接。对于第二个命令,它表明您已经超出了能力范围;)从简单开始。

编辑:

您实际上需要指定连接的状态(NEW、ESTABLISHED 和 RELATED)。

/sbin/iptables -A INPUT -i eth0 -p tcp --dport $PORT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

/sbin/iptables -A INPUT -i eth0 -p tcp --sport $PORT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

答案2

好的,尝试 iptables -F,然后尝试使用“system-config-firewall-tui”打开所需的端口并检查它是否有效。根据我的经验,有时 iptables 行为怪异,使用 iptables 命令不起作用。我尝试使用“system-config-firewall-tui”修复它。我猜这可能是 RHCE 6.4 中的一个错误。

相关内容