Firewalld 端口转发在 CentOS 7 中不起作用

Firewalld 端口转发在 CentOS 7 中不起作用

在我的服务器中我想重定向所有请求:从 81 端口到 8080 端口

由于 Jenkins 服务不允许在 80 端口监听,因此我遵循 Jenkins 文档 詹金斯 - 反向代理使用firewalld。

但没有工作,下面是我的步骤和一些系统详细信息:

  1. CentOS 版本 = 7.9.2009
[root@xxx ~]# cat /etc/centos-release
CentOS Linux release 7.9.2009 (Core)
  1. 我已经在firewalld中启用了端口并添加了端口转发规则:(已经添加永久并重新加载firewalld)
[root@xxx ~]# firewall-cmd --list-all --zone=public
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens160 lo
  sources:
  services: dhcpv6-client http ssh
  ports: 80/tcp 443/tcp 81/tcp
  protocols:
  masquerade: yes
  forward-ports: port=81:proto=tcp:toport=8080:toaddr=
  source-ports:
  icmp-blocks:
  rich rules:
  1. 检查网络状态:
[root@xxx ~]# netstat -tulpn | grep LISTEN
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1090/sshd
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1724/master
tcp6       0      0 :::8080                 :::*                    LISTEN      1107/java
tcp6       0      0 :::22                   :::*                    LISTEN      1090/sshd
tcp6       0      0 ::1:25                  :::*                    LISTEN      1724/master

仅可监听 8080/22/25。

  1. 我尝试使用 nc 工具来检查端口转发:
[root@xxx ~]# nc -v 127.0.0.1 8080
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 127.0.0.1:8080.
^C
[root@xxx ~]# nc -v 127.0.0.1 81
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connection refused.

8080 可以,但是 81 转发不起作用。

  1. 有些参考资料说需要设置 net.ipv4.ip_forward=1。我之前也设置过了:
[root@xxx ~]# sysctl -a |grep "ip_forward"
net.ipv4.ip_forward = 1
net.ipv4.ip_forward_use_pmtu = 0
sysctl: reading key "net.ipv6.conf.all.stable_secret"
sysctl: reading key "net.ipv6.conf.default.stable_secret"
sysctl: reading key "net.ipv6.conf.ens160.stable_secret"
sysctl: reading key "net.ipv6.conf.lo.stable_secret"
  1. 仔细检查我的 iptables,我没有设置 iptables:
[root@xxx ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
[root@xxx ~]# systemctl status iptables
Unit iptables.service could not be found.

关于如何使用firewalld进行“端口转发”,您有什么想法吗?谢谢。

答案1

最后,我找到了一个解决方案。还有一件事,netstat 无法检查端口转发。

需要为 lo 添加直接规则:

[root@xxx ~]$ firewall-cmd --direct --get-all-rules
ipv4 nat OUTPUT 0 -p tcp -o lo --dport 80 -j REDIRECT --to-ports 8080

相关内容