所以,我有我的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
?