起因
系统扫描报Jetty漏洞,很奇怪,系统中明明没有使用Jetty! 后来发现是Zookeeper中会使用Jetty,因为有使用Kafka,所以也使用了Zookeeper。
Zookeeper使用Jetty主要干2个事情:
1)提供给Prometheus用来输出监控指标用,占用端口7000
2)提供给AdminServer用来查询系统配置项,占用端口8080
也就是说,只要禁用这两个功能就可以了。
1)禁用7000端口
看下官方文档的描述:
在3.8.1版本中,7000端口默认就没打开,所以啥也不用动
#metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider
#metricsProvider.httpHost=0.0.0.0
#metricsProvider.httpPort=7000
#metricsProvider.exportJvmInfo=true
也就是说,只要注释掉metricsProvider相关配置即可。
2)禁用8080
还是看下官方文档:
默认AdminServer是打开的,我们可以打开访问http://192.168.200.128:8080/commands这个url看下这个界面:
点击比如“configuration”:
这个功能是可以禁用的,只需要在配置文件中设置admin.enableServer=false
或者在zkServer.sh中设置java系统变量-Dzookeeper.admin.enableServer=fasle
就可以了。
3)禁用JMX端口
禁用了7000和8080以后,发现Zookeeper除了占用2181之外,还占用了一个随机的端口,这个又是干啥的,如下:
[root@localhost apache-zookeeper-3.8.1-bin]# netstat -nap | grep 15216
tcp6 0 0 :::2181 :::* LISTEN 15216/java
tcp6 0 0 :::41897 :::* LISTEN 15216/java
原来是JMX占用的,而且默认也是打开的,可以修改zkServer.sh禁用掉JMX:
# 在最开始添加上这一行即可
export JMXDISABLE=true