我有一台运行 Fedora 15 的服务器。我的最终目标是能够通过随机端口号(通过 iptables 规则指定)转发任何协议。假设,暂时我想将端口 12345 转发到网络内的 Web 服务器。我们假设这个 Web 服务器是 192.168.0.10:80 。
在 iptables 中添加一条规则来打开端口后,如下所示:
-A 输入 -m 状态 --状态新 -m tcp -p tcp --dport 12345 -j 接受
我重新启动 iptables,然后运行:
nmap -p 12000-13000 本地主机
nmap 不显示端口是打开还是关闭。然后我使用 semanage 定义端口,如下所示:
semanage 端口 -a -t http_port_t -p tcp 12345
nmap 仍然看不到该端口。
如果我完全禁用 selinux,nmap 会显示端口为“关闭”。
我似乎找不到打开端口的方法。我在网上搜索了好几天,但还是没能解决这个问题。我可以提供您想要的任何其他配置数据。有什么建议吗?
编辑:添加输出iptables -L -n -v
:
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
641 3038K ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
12 720 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
5 261 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:80
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:12345
1 52 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT 663 packets, 3044K bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:12345
答案1
如果您想转发流量,请使用链条FORWARD
,而不是INPUT
链条。
连锁店INPUT
将适用仅有的实际上是发往防火墙的数据包(例如,其目标地址是防火墙的某个地址)。
其次,请记住,转发流量意味着不会对数据包本身进行任何操作。因此,目标服务器必须打开端口 12345。
(如果您想操纵源/目标地址和/或端口,请使用 SNAT/DNAT)
答案2
我不太清楚,但我怀疑问题在于你-A INPUT ...
正在添加许可证后一些预先存在的DROP
规则。我们需要在您添加规则后查看输出iptables -L -n -v
以确保无误;如果您想将其粘贴到上面的问题中,这将很有帮助。
iptables 规则处理是先处理匹配成功的规则;也就是说,它按顺序执行规则,第一个匹配您的数据包并处理它的规则将对该数据包拥有最终决定权。
因此,在简洁的元代码中,像这样的规则集是没有意义的
permit any any port 80
deny any any
permit any any port 12345
第 2 行将匹配一个要发送到端口 12345 的数据包(因为它匹配任何不是要发送到端口 80 的数据包),并拒绝它。这个可怜的数据包永远无法到达第 3 行允许的距离。
如果您已经知道所有这些,并且这不是问题所在,那么我很抱歉。查看输出仍然会有所帮助iptables
,以便进一步探索。
编辑:好的,看起来规则排序不是问题。是什么让您认为它不起作用?当您执行 时,该服务器上会发生什么telnet localhost 12345
?