如何仅在单个主机 IP 地址上进行端口转发

Alt*_*ime 2 port-forwarding centos7 firewall-cmd

简短的问题:

如何仅在单个主机 IP 地址上启用端口转发?

背景故事:

我的 Centos 7 服务器有 5 个 IP 地址。以前,我让 apache 监听所有这些,以及分配给那些用虚拟主机解析的 ip 地址的各种域。

我更改了Listenhttpd.conf 中的指令,以便现在 apache 只侦听 4 个 IP 地址

使用 node.js 我创建了另一个服务器实例,但它不会让我在没有提升权限的情况下监听标准端口 80。我不想以提升的权限运行它。

我想将端口 80 转发到 8080 之类的端口,但仅在一个 ip 地址上,而不会影响指向其他 4 个 ip 地址的流量。重要的是,其他 IP 地址上的流量不受该规则的影响。

我认为解决方案将类似于:

firewall-cmd --zone=public --add-masquerade --permanent
firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080 --permanent
Run Code Online (Sandbox Code Playgroud)

我发现的其他问题和答案与源 ip 地址而不是主机 ip 地址有关。

Mic*_*ton 7

firewalld 区域可以通过接口或地址指定,但您希望通过目标地址进行过滤。您需要一个丰富的规则来处理这种特殊情况。

如此丰富的规则可能看起来像:

firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" destination address="198.51.100.237" forward-port port="80" protocol="tcp" to-port="8080"'
Run Code Online (Sandbox Code Playgroud)

有关丰富规则的文档,请参阅firewalld.richlanguage(5)手册页

一旦您的丰富规则生效,请记住将其永久化

firewall-cmd --runtime-to-permanent
Run Code Online (Sandbox Code Playgroud)

或添加--permanent到之前的调用中。