Linux iptables 允许某些端口

Linux iptables 允许某些端口

我们有一台 Linux 服务器 (CentOS 6.3),其中所有端口似乎都可以从内部访问(从服务器尝试时),但只有 SSH 可以从外部访问。我想允许一些其他端口,例如 1521 (Oracle),但我无法让它工作。

我尝试了以下操作:

iptables -A INPUT -m state --state NEW -p tcp --dport 1521 -j ACCEPT
service iptables save
service iptables restart

但是当我从另一台机器执行“telnet 192.168.97.1 1521”时,仍然会出现“连接超时”的情况,而我可以使用相同的命令从服务器连接。

这是我在 /etc/sysconfig/iptables 中的内容:

# Generated by iptables-save v1.4.7 on Fri Mar 15 12:13:41 2013
*nat
:PREROUTING ACCEPT [6:1136]
:POSTROUTING ACCEPT [14:878]
:OUTPUT ACCEPT [15:986]
-A POSTROUTING -o em1 -j MASQUERADE
COMMIT
# Completed on Fri Mar 15 12:13:41 2013
# Generated by iptables-save v1.4.7 on Fri Mar 15 12:13:41 2013
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [45:3812]
-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 1521 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Fri Mar 15 12:13:41 2013

(之所以有 -A POSTROUTING -o em1 -j MASQUERADE 这一行,是因为之前我也尝试安装了一个 PPTP 服务器,如下所述这里

答案1

指令出现的顺序很重要。第一个匹配的获胜。

所以你的问题是:

-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A INPUT -p tcp -m state --state NEW -m tcp --dport 1521 -j ACCEPT

因此您永远不会允许流量到端口 1521。

要修复此问题,只需反转两行即可。

答案2

您可以使用以下 2 个选项:(我假设您使用 Red Hat 或 CentOS Linux)。

选项1:
在 root shell 中执行以下命令:

iptables -L --line-numbers

这将向您显示链以及每个链中应用的规则(带有行号)。例如,在我的其中一台服务器中,输出为:

iptables -L --line-numbers
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    RH-Firewall-1-INPUT  all  --  anywhere             anywhere
Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination
1    RH-Firewall-1-INPUT  all  --  anywhere             anywhere

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

Chain RH-Firewall-1-INPUT (2 references)
num  target     prot opt source               destination
1    ACCEPT     all  --  anywhere             anywhere
2    ACCEPT     icmp --  anywhere             anywhere            icmp any
3    ACCEPT     esp  --  anywhere             anywhere
4    ACCEPT     ah   --  anywhere             anywhere
5    ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
6    ACCEPT     udp  --  anywhere             anywhere            state NEW udp    dpt:snmp
....
14   DROP       all  --  anywhere             anywhere

因此,为了设置您的规则,我将执行以下命令:

iptables -I 7 INPUT -m state --state NEW -p tcp --dport 1521 -j ACCEPT
service iptables save
service iptables restart

使用-I 7而不是 -AI 指示 iptables 在第 7 行添加新规则,并下推所有其他规则。请注意,在我的例子中,我可以使用 7-14 之间的任何行号。


选项 2:

编辑文件/etc/sysconfig/iptables,找到“DROP”之前的最后一个条目并在那里添加规则,保存文件并重新加载 iptables。

相关内容