iptables 端口转发

iptables 端口转发

我有一个 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 ACCEPTDROP那么端口将只接受80的新连接,而不接受8080的新连接。

iptables -A INPUT -p tcp -m state --state NEW --dport 8080 -i eth0 -j DROP

相关内容