Zabbix通过JMX监控Tomcat——防火墙策略问题分析
一、现 状
对于Zabbix通过JMX来监控Tomcat,网络上有很多文章,但大都是相同或类似的,且都是没有设置防火墙的,所以就安装而言百度就行。现在为了服务的安全,是必须开启防火墙的。于是出现了一系列的问题。
二、当前环境
1、Zabbix_server的Zabbix版本是3.0.4,系统是CentOS 7.0,使用YUM安装。
2、Zabbix-server的zabbix_server.conf配置文件
LogFile=/var/log/zabbix/zabbix_server.log
LogFileSize=0
PidFile=/var/run/zabbix/zabbix_server.pid
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
JavaGateway=127.0.0.1 # gateway地址
JavaGatewayPort=10052 # 监听端口
StartJavaPollers=5
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
Timeout=30
AlertScriptsPath=/etc/zabbix/alertscripts
ExternalScripts=/usr/lib/zabbix/externalscripts
LogSlowQueries=3000
3、zabbix_java_gateway.conf配置文件
LISTEN_IP="0.0.0.0"
LISTEN_PORT=10052
PID_FILE="/var/run/zabbix/zabbix_java.pid"
START_POLLERS=5
TIMEOUT=3
4、zabbix被监控端catalina.sh添加的内容
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.port=12345
-Dcom.sun.management.jmxremote.authenticate=false
-Djava.rmi.server.hostname=192.168.1.13" # tomcat服务器IP
5、防火墙策略添加
Zabbix_server端 firewall-cmd --zone=public --add-port=10052/tcp --permanent
被监控端 iptables -I INPUT 4 -m state --state NEW -m tcp -p tcp --dport 12345 -j ACCEPT
注:Zabbix_server和Zabbix_java_gateway可在不同服务器安装。
三、分析问题
1、当所有配置完成,Zabbix显示不通,如下图
Zabbix_server日志显示
2、我以为配置有问题,于是就修改配置,修改了几次还是不行,让我意识到可能不是配置的问题,既然不是配置问题,那最大的可能就是防火墙,关闭防火墙进行测试。让我惊喜的是居然真的通了。被监控端的防火墙端口开了,为什么不通呢,难道还有一个端口没有开吗?于是重新开启防火墙,查看端口,如下
3、真的有端口被调用了,而且是动态的,当重启tomcat后端口又被改变,所以说,开启端口这种方法是行不通的,还有就是开放多端口,将一系列端口开放,但端口多了,容易出现问题,和开不开防火墙差不多。那么到底如何呢,只能是将另一端口固定调用。怎么做呢,方法如下:
4、修改tomcat/bin/catalina.sh添加的内容
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.port=12345 #将端口这条去掉,
-Dcom.sun.management.jmxremote.authenticate=false
-Djava.rmi.server.hostname=192.168.1.13" # tomcat服务器IP
注:必须去的,如果不去掉,将会导致不成功!
5、在tomcat/conf/server.xml添加以下内容
<Server port="9005" shutdown="SHUTDOWN">
<Listener classname="org.apache.catalina.startup.VersionLoggerListener" />
<!-- Security listener. Documentation at /docs/config/listeners.html
<Listener classname="org.apache.catalina.security.SecurityListener" />
-->
<!--APR library loader. Documentation at /docs/apr.html -->
<Listener classname="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<!-- Prevent memory leaks due to use of particular java/javax APIs-->
<Listener classname="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener classname="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener classname="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<Listener classname="org.apache.catalina.mbeans.JmxRemoteLifecycleListener"
rmiRegistryPortPlatform="12345" rmiServerPortPlatform="12346" />
# 添加最后一条
6、添加被监控端防火墙策略
iptables -I INPUT 4 -m state --state NEW -m tcp -p tcp --dport 12346 -j ACCEPT
7、下载catalina-jmx-remote.jar将此文件放到tomcat/lib目录下
http://mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.0.37/bin/extras/catalina-jmx-remote.jar
8、成功,重启服务
一些Zabbix相关教程集合:
ZABBIX 的详细介绍:请点这里
ZABBIX 的下载地址:请点这里