使用 IPTABLES 进行重定向,同时隐藏原始端口

使用 IPTABLES 进行重定向,同时隐藏原始端口

因此,我的 Glassfish 服务器正在监听端口 8080。
但是,我希望我的请求在端口 80 上隐藏 8080
这样人们就认为我的服务器确实以 80 的速度运行。

我该如何使用 来做这件事iptables我尝试过以下规则:

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080

但这不是我想要的,因为我必须打开 808080 才能工作。

有任何想法吗?


更新:我已将规则文件更改为如下形式:

iptables -F

iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

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

iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

iptables -A INPUT -j DROP

#REDIRECTION RULES
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT  \
         --to-destination 127.0.0.1:8080

但还是不行。我已/proc/sys/net/ipv4/ip_forward设置为1
还是http://myserver:8080不行http://myserver:80。数据包被丢弃了。

答案1

使用基因转移酶

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination your.ip.address:8080

类似的东西应该可行。:)

按照您自己的编辑进行编辑:我认为您的规则集中的这一行太早了:

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

由于这个原因,您的服务器不接受任何新连接,对吗?尝试将其移到您的iptables -A INPUT -j DROP行之前。

答案2

我有完全相同的问题,并在此社区的帮助下找到了答案。以下是链接:

使用 iptables 将端口重定向到本地主机/阻止目标端口

我通过标记 8080 传入的数据包并随后过滤它们来解决这个问题:

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080
iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 8080 -j MARK --set-mark 1
iptables -A INPUT -m mark --mark 1 -j DROP

丢弃标记数据包的最后一条规则可能是 INPUT 链中的第一条规则。

对于 localhost,DNAT 对我来说不起作用。我认为这是因为 localhost 在内核中被特殊处理。

答案3

您是否尝试过改变:

iptables -P FORWARD DROP

iptables -P FORWARD ACCEPT

答案4

虽然这个问题已经很老了,但我只是想提出自己的答案,因为我遇到过类似的问题,这是谷歌搜索到的第一个结果之一,这里的技巧是只打开端口 80,但添加一条规则来接受任何已经在输入接口上进行 DNAT 的数据包,请注意不要使用 127.0.0.1,因为它在内核中默认被阻止(参见 net.ipv4.conf.all.route_localnet)

iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT  
iptables -A INPUT -p tcp -m conntrack --cstate DNAT -j ACCEPT
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination myserver:8080

相关内容