我正在 CentOS 7 服务器上工作,并试图让 JBoss 按照我想要的方式工作。我正在运行 Java 8 和 JBoss(wildly) 8。我已经安装它们并在默认端口上运行,但我想让 JBoss 在端口 80 上工作。我知道如果我以 root 身份运行它,我可以让它在端口 80 上工作,但我知道这不是一个好主意,而且无论如何我都不想以 root 身份运行它。
我尝试将端口 80 转发到 8080,但无法正常工作。我想我漏掉了一个步骤,但我不知道漏掉了什么。
我正在使用防火墙命令。我已打开两个端口(80 和 8080),并已启用公共区域的伪装。我还使用此命令转发端口
firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080.
知道我错过了什么吗?
答案1
我刚刚找到了一种可以实现这一目标的方法:
firewall-cmd --zone=public --add-masquerade --permanent
firewall-cmd --zone=public --add-forward-port=port=443:proto=tcp:toport=3001 --permanent
答案2
firewall-cmd
的 add-forward-port 将向PREROUTING
NAT 链添加规则,这仅适用于外部生成的数据包。如果您尝试在服务器上的端口 80 上连接到 localhost(或服务器的本地 IP),它将失败,因为这些数据包永远不会通过PREROUTING
。
如果您从外部源连接到端口 80,则firewall-cmd
您列出的应该可以正常工作。我建议验证您的接口是否确实位于“公共”区域。
您还可以运行以下命令来获取规则的数据包计数,以确保该规则确实被命中:
iptables -t nat -vnL | grep 8080 -B1
如果每次尝试时数据包计数都会增加,则表明防火墙工作正常,而防火墙之外存在一些问题(可能是 JBOSS 上的 ACL?)。如果每次尝试时数据包计数都没有增加,则表明防火墙规则根本没有被命中,这表明您处于错误的区域,或者有其他规则抢占了端口转发规则。