阻止内部端口转发

分享于 

10分钟阅读

互联网

  繁體 雙語

问题:

我在用红帽,我正在尝试建立一个网络服务。 我已经实现了从 80到 8080的端口转发以访问tomcat8服务。


firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080




服务器从外部( 由于端口转发的原因,它工作得很好) 接收HTTP请求,取决于将请求发送请求的请求,并将nodejs应答为 nodejs 。 问题在于当nodejs试图应答tomcat8的请求时,连接被拒绝:


problem with request: connect ECONNREFUSED <my_ip_adress>:80



我已经尝试接受端口 80上的每个TCP连接,但它不做任何事情。


iptables -I INPUT -p UDP --port 80 -j ACCEPT



我还试图修改防火墙,以接受 publicinternal 区域上端口 80上的每个TCP连接。


firewall-cmd --zone=public --add-port=80/tcp


firewall-cmd --zone=internal --add-port=80/tcp



防火墙内部区域从 80到 8080增加特定的端口转发。


firewall-cmd --zone=internal --add-forward-port=port=80:proto=tcp:toport=8080



同时,当我尝试连接到端口 80上的本地主机时,连接被拒绝。


telnet localhost 80



我已经得出结论,端口转发不是在内部完成的。 有人知道如何授权这种内部通讯?

更新1

当我在网络中的其他机器上执行 telnet hostname 80 时,它可能会有帮助。 当我在相关机器上执行 telnet hostname 8080 时,它也会正确连接( 根据端口转发和路由表的预期) 。 但是,当我执行 telnet hostname 80 时,连接被拒绝。

我认为这个问题不同于"重复",因为这里的问题是没有任何原因的内部端口转发。

** 更新 2 ** 输出 iptables -t nat -nvL ( 我截断了空链):


Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)


 pkts bytes target prot opt in out source destination 


 7 424 PREROUTING_direct all -- * * 0.0.0.0/0 0.0.0.0/0 


 7 424 PREROUTING_ZONES_SOURCE all -- * * 0.0.0.0/0 0.0.0.0/0 


 7 424 PREROUTING_ZONES all -- * * 0.0.0.0/0 0.0.0.0/0 


 0 0 REDIRECT tcp -- lo * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 redir ports 8080



Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)


 pkts bytes target prot opt in out source destination 


 3 185 OUTPUT_direct all -- * * 0.0.0.0/0 0.0.0.0/0 



Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)


 pkts bytes target prot opt in out source destination 


 3 185 POSTROUTING_direct all -- * * 0.0.0.0/0 0.0.0.0/0 


 3 185 POSTROUTING_ZONES_SOURCE all -- * * 0.0.0.0/0 0.0.0.0/0 


 3 185 POSTROUTING_ZONES all -- * * 0.0.0.0/0 0.0.0.0/0 



Chain POSTROUTING_ZONES (1 references)


 pkts bytes target prot opt in out source destination 


 2 133 POST_public all -- * ens192 0.0.0.0/0 0.0.0.0/0 [goto] 


 1 52 POST_public all -- * + 0.0.0.0/0 0.0.0.0/0 [goto] 



Chain POST_public (2 references)


 pkts bytes target prot opt in out source destination 


 3 185 POST_public_log all -- * * 0.0.0.0/0 0.0.0.0/0 


 3 185 POST_public_deny all -- * * 0.0.0.0/0 0.0.0.0/0 


 3 185 POST_public_allow all -- * * 0.0.0.0/0 0.0.0.0/0 



Chain PREROUTING_ZONES (1 references)


 pkts bytes target prot opt in out source destination 


 7 424 PRE_public all -- ens192 * 0.0.0.0/0 0.0.0.0/0 [goto] 


 0 0 PRE_public all -- + * 0.0.0.0/0 0.0.0.0/0 [goto] 



Chain PRE_public (2 references)


 pkts bytes target prot opt in out source destination 


 7 424 PRE_public_log all -- * * 0.0.0.0/0 0.0.0.0/0 


 7 424 PRE_public_deny all -- * * 0.0.0.0/0 0.0.0.0/0 


 7 424 PRE_public_allow all -- * * 0.0.0.0/0 0.0.0.0/0 



Chain PRE_public_allow (1 references)


 pkts bytes target prot opt in out source destination 


 7 424 DNAT tcp -- * * 0.0.0.0/0 0.0.0.0/0 mark match 0x64 to::8080




iptables -nvL ( 我把空链子截断了。)的输出:


Chain INPUT (policy ACCEPT 0 packets, 0 bytes)


 pkts bytes target prot opt in out source destination 


 630 150K ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED


 3 156 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 


 16 1069 INPUT_direct all -- * * 0.0.0.0/0 0.0.0.0/0 


 16 1069 INPUT_ZONES_SOURCE all -- * * 0.0.0.0/0 0.0.0.0/0 


 16 1069 INPUT_ZONES all -- * * 0.0.0.0/0 0.0.0.0/0 


 8 416 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate INVALID


 1 229 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited



Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)


 pkts bytes target prot opt in out source destination 


 0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED


 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 


 0 0 FORWARD_direct all -- * * 0.0.0.0/0 0.0.0.0/0 


 0 0 FORWARD_IN_ZONES_SOURCE all -- * * 0.0.0.0/0 0.0.0.0/0 


 0 0 FORWARD_IN_ZONES all -- * * 0.0.0.0/0 0.0.0.0/0 


 0 0 FORWARD_OUT_ZONES_SOURCE all -- * * 0.0.0.0/0 0.0.0.0/0 


 0 0 FORWARD_OUT_ZONES all -- * * 0.0.0.0/0 0.0.0.0/0 


 0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate INVALID


 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited



Chain OUTPUT (policy ACCEPT 570 packets, 132K bytes)


 pkts bytes target prot opt in out source destination 


 635 141K OUTPUT_direct all -- * * 0.0.0.0/0 0.0.0.0/0 



Chain FORWARD_IN_ZONES (1 references)


 pkts bytes target prot opt in out source destination 


 0 0 FWDI_public all -- ens192 * 0.0.0.0/0 0.0.0.0/0 [goto] 


 0 0 FWDI_public all -- + * 0.0.0.0/0 0.0.0.0/0 [goto] 



Chain FORWARD_OUT_ZONES (1 references)


 pkts bytes target prot opt in out source destination 


 0 0 FWDO_public all -- * ens192 0.0.0.0/0 0.0.0.0/0 [goto] 


 0 0 FWDO_public all -- * + 0.0.0.0/0 0.0.0.0/0 [goto] 



Chain FWDI_public (2 references)


 pkts bytes target prot opt in out source destination 


 0 0 FWDI_public_log all -- * * 0.0.0.0/0 0.0.0.0/0 


 0 0 FWDI_public_deny all -- * * 0.0.0.0/0 0.0.0.0/0 


 0 0 FWDI_public_allow all -- * * 0.0.0.0/0 0.0.0.0/0 


 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 



Chain FWDO_public (2 references)


 pkts bytes target prot opt in out source destination 


 0 0 FWDO_public_log all -- * * 0.0.0.0/0 0.0.0.0/0 


 0 0 FWDO_public_deny all -- * * 0.0.0.0/0 0.0.0.0/0 


 0 0 FWDO_public_allow all -- * * 0.0.0.0/0 0.0.0.0/0 



Chain INPUT_ZONES (1 references)


 pkts bytes target prot opt in out source destination 


 16 1069 IN_public all -- ens192 * 0.0.0.0/0 0.0.0.0/0 [goto] 


 0 0 IN_public all -- + * 0.0.0.0/0 0.0.0.0/0 [goto] 



Chain IN_public (2 references)


 pkts bytes target prot opt in out source destination 


 16 1069 IN_public_log all -- * * 0.0.0.0/0 0.0.0.0/0 


 16 1069 IN_public_deny all -- * * 0.0.0.0/0 0.0.0.0/0 


 16 1069 IN_public_allow all -- * * 0.0.0.0/0 0.0.0.0/0 


 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 



Chain IN_public_allow (1 references)


 pkts bytes target prot opt in out source destination 


 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 ctstate NEW


 7 424 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate NEW mark match 0x64





回答 1:

通过 3个钩子可以控制通过Linux框的流量:

  • 输入
  • 正向
  • 输出

如果某种类型的翻译完成了端口转发,则使用它的他钩子:

  • POSTROUTING
  • PREROUTING

端口转发在PREROUTING钩子( 在nat表格中) 中发生,因为 NAME 建议在路由之前发生。 因这里,从外部到本地进程的流量通过,传递,接收端口( 目标端口从 80更改为 8080 ) 和输入链。

本地Tomcat然后通过环回接口连接到本地 nodejs,因为环回接口上没有端口转发规则,因为环回接口nodejs接收来自 8080端口的流量,而不是 80.

,本地进程使用环回接口,除非在这里接口上添加端口转发连接到 localhost:80,因为没有进程正在连接,因为没有进程监听


回答 2:

我将把它作为评论,但我的个人资料太新了。

这完全可能是一个sysctl内核问题而不是 iptables 。

尝试运行:


/sbin/sysctl net.ipv4.ip_forward



检查是否已经将它的设置为 1.

如果设置为零,则需要启用它:


sysctl -w net.ipv4.ip_forward=1



并且确保你在 /etc/sysctl.conf 中设置了它,这样它在重启时就会保存下来。



INT  for  Intern  Block  Forward  Internal  
相关文章