我想问一下关于转发端口规则的问题防火墙。
我使用的操作系统是,
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