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通过JMX监控Tomcat——防火墙策略问题分析

Zabbix_server日志显示

Zabbix通过JMX监控Tomcat——防火墙策略问题分析

2、我以为配置有问题,于是就修改配置,修改了几次还是不行,让我意识到可能不是配置的问题,既然不是配置问题,那最大的可能就是防火墙,关闭防火墙进行测试。让我惊喜的是居然真的通了。被监控端的防火墙端口开了,为什么不通呢,难道还有一个端口没有开吗?于是重新开启防火墙,查看端口,如下

Zabbix通过JMX监控Tomcat——防火墙策略问题分析

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 的下载地址:请点这里

相关推荐