我使用CentOS 6.5
和Jetty 9.1.0.v20131115
。我使用Jetty的JMX功能。
我希望只能在正在运行的计算机(localhost
或127.0.0.0/8
)内访问JMX,但不能从外部访问(例如,public.example.com
无法访问JMX)。
因此,我将Jetty的JMX RMI主机配置为使用jetty.jmxrmihost=localhost
而不是通配符jetty.jmxrmihost=0.0.0.0
。
然而,我的Jetty服务器实例可以从“外部”访问,允许任何人通过JMX连接到我的Jetty服务器。
我需要配置什么才能使Jetty只侦听来自localhost
的那些 JMX连接?
以下是与此主题相关的Jetty配置文件:
档案${jetty.base}/start.d/jmx.ini
:
--module=jmx
#jetty.jmxrmihost=localhost # I tried this one, but it didn't work either
jetty.jmxrmihost=127.0.0.1
jetty.jmxrmiport=1099
档案${jetty.base}/start.d/jmx-remote.ini
:
--module=jmx-remote
答案 0 :(得分:1)
就问问题的方式而言,似乎它不是Jetty / JMX问题而是更多的防火墙问题 - 您想要的是阻止不需要的外部流量到此服务器上的JMX端口。
如果您有权限并且愿意这样做,则需要从打开JMX端口的/ etc / sysconfig / iptables中删除任何规则(在此示例中为1099)。这样的规则如下所示:
[0:0] -A INPUT -s SOME_IP_SUBNET -p tcp -m tcp --dport 1099 -j ACCEPT
或者,另一方面,您可能只想为特定子网(例如公司的子网)启用 JMX监控,此时,您需要添加以下内容:
[0:0] -A INPUT -s MY_IP_SUBNET_HERE -p tcp -m tcp --dport JMX_PORT -j ACCEPT
,分别用您自己的IP子网和JMX端口替换MY_IP_SUBNET_HERE和JMX_PORT。
我自己没有为iptables写过很多规则,所以请将上面的内容作为一个例子考虑,而不一定是你需要的确切语法。 * nixCraft提供了basic guide to handling iptables/sysctl,其中还介绍了如何在不编辑文件的情况下修改规则(我通常只修改文件)。
两个注意事项,如果你去修改iptables文件的路线:
/etc/init.d/iptables restart
或service iptables restart
)/sbin/sysctl -p
。重新启动iptables会清除sysctl.conf中的所有自定义规则,调用sysctl -p
将恢复这些规则。