我有一个 CentOS 服务器,在 TCP 端口 8080 上安装了 Java/J2EE(Tomcat)。我有两个接口,eth0 和 lo。
我需要将 TCP 端口 80 上的所有传入连接转发到 8080。
我尝试执行以下有效的操作:
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j DNAT --to x.x.x.x:8080
iptables -A INPUT -p tcp -m state --state NEW --dport 8080 -i eth0 -j ACCEPT
其中 xxxx 是与 eth0 接口关联的 IP。
这似乎也向外界开放了端口 8080,但我不想这样做。我只想将80端口暴露给外界,将所有流量转发到8080。
任何帮助,将不胜感激。
更新: iptables -L 如下所示
[root@server admin]# iptables -L
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
DROP tcp -- anywhere anywhere state NEW tcp dpt:http
Chain FORWARD (policy DROP)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@server admin]#
iptables -t nat --list 如下所示
[root@server admin]# iptables -t nat --list
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT tcp -- anywhere anywhere tcp dpt:http to:x.x.x.x:8080
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@server admin]# ^C
答案1
我发表了一条评论,建议将 tomcat 设置为监听 80 或使用 apache/nginx 作为反向代理,这才是我认为你真正应该做的。但为了后代,我也会回答你的iptables
问题。
问题是你所做的不是 DNAT,而是端口重定向。而不是-j DNAT
你需要的-j REDIRECT
。
例如:
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
答案2
您正在向后使用 iptables。明确iptables -A INPUT -p tcp -m state --state NEW --dport 8080 -i eth0 -j ACCEPT
向世界开放港口。你需要的是改变 for ACCEPT
,DROP
那么端口将只接受80的新连接,而不接受8080的新连接。
iptables -A INPUT -p tcp -m state --state NEW --dport 8080 -i eth0 -j DROP