我的目标

我的目标

我想问一下关于转发端口规则的问题防火墙

我使用的操作系统是,

CentOS Linux release 7.3.1611 (Core)

我的目标

将请求转发到监听 127.0.0.1:80 的 httpd

[root@development /]# netstat -atunp | grep httpd
tcp        0      0 127.0.0.1:80            0.0.0.0:*               LISTEN      2601/httpd          

问题

我已经设置了如下的防火墙规则。

[root@development /]# firewall-cmd --list-all --zone=external
external (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources: 
  services: ssh
  ports: 
  protocols: 
  masquerade: yes
  forward-ports: 
  sourceports: 
  icmp-blocks: 
  rich rules: 
    rule family="ipv4" forward-port port="8080" protocol="tcp" to-port="80"

但是,如果我从外部主机发送请求,firewalld拒绝请求到端口 8080。

在这种情况下,

192.168.11.2(客户端)-------> 192.168.11.13(8080)

[root@dellinspiron13z asset]# curl -XGET 192.168.11.13:8080
curl: (7) Failed to connect to 192.168.11.13 port 8080: Connection refused

如果进程正在运行0.0.0.0:80,它运行完美。

有没有办法将请求重定向到本地主机端口?

答案1

以下是具体操作方法:

firewall-cmd --permanent --direct --add-rule ipv4 nat OUTPUT 0 -p tcp -o lo --dport 8080 -j REDIRECT --to-ports 80

答案2

您必须在地址为 92.168.11.13 的接口上更改 sysctl 中的 route_localnet,或者如果您懒得更改,则更改“全部”

幸运的是,我有相同版本的新 CentOS,因此默认情况下此旋钮是禁用的

[root@tesla ~]# cat /etc/centos-release
CentOS Linux release 7.3.1611 (Core) 
[root@tesla ~]# sysctl -a | grep route_localnet
net.ipv4.conf.all.route_localnet = 0
net.ipv4.conf.default.route_localnet = 0
net.ipv4.conf.enp0s5.route_localnet = 0
net.ipv4.conf.lo.route_localnet = 0

相关内容