强制 Apache ActiveMQ 的 JMX 只能从本地主机访问

问题描述

我有一台运行 Apache ActiveMQ 的 RHEL6 服务器,但我找不到禁用对 JMX 的远程访问的方法。 我可以完全禁用 JMX,但这限制了 ActiveMQ 的功能,它使用 JMX 访问代理以获取状态信息,或传达关闭请求(ActiveMQ 回退到 SIGKILL!)。 我想让 ActiveMQ 可以通过 JMX 访问,但只能从本地主机访问。

根据Apache's website认情况下应该禁用远程连接,但我可以从其他机器连接到认的 1099 端口。据我所知,JMX 的设置保留为认值。

我知道一些类似的问题,但建议的解决方案对我不起作用,特别是:

  • 添加 -Dcom.sun.management.jmxremote.host=localhost 和/或 -Dcom.sun.management.jmxremote.local.only=true 没有帮助
  • 添加 -Djava.rmi.server.hostname=localhost 也无济于事

尽管此 solution 及其一些注释似乎表明我正在运行的 Java 版本 (>8u102) 修复了一些已知问题。

一些解决方案谈到有必要切换到“编码”(例如,thisthis),但我不清楚这种方法如何与 ActiveMQ 一起使用。

解决方法

在 bin/env(Apache ActiveMQ 构建)中添加:

-Dcom.sun.management.jmxremote.host=127.0.0.1

然后观察JMX端口绑定到localhost ip

% netstat -na | grep 1099
tcp4       0      0  127.0.0.1.11099        *.*                    LISTEN