AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 892198
Accepted
Altimus Prime
Altimus Prime
Asked: 2018-01-15 20:09:59 +0800 CST2018-01-15 20:09:59 +0800 CST 2018-01-15 20:09:59 +0800 CST

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

  • 772

简短的问题:

如何仅在单个主机 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

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

centos7
  • 4 4 个回答
  • 13414 Views

4 个回答

  • Voted
  1. Best Answer
    Michael Hampton
    2018-03-08T15:01:16+08:002018-03-08T15:01:16+08:00

    可以通过接口或源地址指定 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"'
    

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

    一旦你的丰富规则起作用了,记得让它永久化

    firewall-cmd --runtime-to-permanent
    

    或添加--permanent到先前的调用。

    • 8
  2. Torin
    2018-03-08T14:47:43+08:002018-03-08T14:47:43+08:00

    假设在您的五个 IP 地址中,有一个是192.0.2.3,您希望在其上转发端口 80。您可以使用iptables转发此 IP 地址上的端口,如下所示:

    iptables -t nat -A PREROUTING -d 192.0.2.3 -p tcp --dport 80 -j REDIRECT --to-ports 8080
    

    这应该不会影响您的所有其他地址。如果程序在所有地址上绑定到端口 80,192.0.2.3仍将重定向到端口 8080,因为它在路由之前被重定向。

    • 1
  3. Anderson Medeiros Gomes
    2018-03-08T18:02:48+08:002018-03-08T18:02:48+08:00

    注意:我承认我提出了一个奇怪且可能不受支持的解决方案,它可能会在未来的firewalld版本中被破坏。尽管如此,它肯定可以在 CentOS 7 服务器上运行。

    我建议你直接将这样的端口转发规则添加到iptables/ip6tables堆栈中。您可以通过使用firewalld's 直接规则来实现。例如:

    # firewall-cmd --permanent --direct --add-rule ipv4 nat PRE_public_allow 0 \
        --destination 11.22.33.44 --protocol tcp --destination-port 80 \
        --jump REDIRECT --to-ports 8080
    
    # firewall-cmd --permanent --direct --add-rule ipv6 nat PRE_public_allow 0 \
        --destination 11:22:33:44:55:66:77:88 --protocol tcp --destination-port 80 \
        --jump REDIRECT --to-ports 8080
    

    我认为 CentOS会在表中为每个活动区域firewalld创建一个PRE_<zone>_allow链,nat当与区域定义匹配的数据包到达时会对其进行评估。所以iptables/ip6tables规则可以在那里添加。

    • 1
  4. user427751
    2018-03-08T18:16:07+08:002018-03-08T18:16:07+08:00

    我会为不同的域配置不同的端口但IP地址相同的反向代理。在 httpd 配置页面中,我将为每个端口添加 Listen 指令(例如:Listen 80、Listen 8081、Listen 8082 等),在 httpd 配置页面中包含 vhosts 配置端口并根据端口更新 vhosts 配置页面。

    • 1

相关问题

  • 如何在 Centos 上保持 openvpn 连接打开

  • LIST 上的 ProFTPd 超时

  • 与 AWS 中的其他系统相比,CentOS 报告的总内存较低

  • SELinux 阻止 Apache 写入文件

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve