隐藏原始端口时使用IPTABLESredirect

所以,我有我的Glassfish服务器正在侦听端口8080。
但是,我希望在80端口有8080的请求,
所以人们认为我的服务器真的运行在80。

我怎样才能做到这一点与iptables 我已经尝试了以下规则:

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

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

有任何想法吗?


更新:我已经改变了我的规则的文件看起来像:

 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可以。 数据包被丢弃。

使用DNAT

 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行之前移动它。

我有完全相同的问题,并在这个社区的帮助下find答案。 链接在这里:

使用iptables将端口redirect到localhost /阻止目标端口

我解决了这个问题,通过标记在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链中的第一条规则。

本地主机DNAT没有为我工作。 我认为这是因为localhost在内核中被特别对待。

你有没有尝试过改变:

 iptables -P FORWARD DROP 

 iptables -P FORWARD ACCEPT