Spring Boot 2 应用程序无法覆盖 RMIRegistry 默认端口 1099 以确保 JMX 连接安全
Spring Boot 2 application cannot overwrite RMIRegistry default port 1099 to make JMX connections safe
不幸的是,我们的 Spring Boot 2 应用程序 公开了 RMI 注册表默认端口 1099 我们的安全团队对此表示抱怨。我们希望 JMX 应该以安全的方式专门通过端口 8999 使用。目前,您可以通过两种方式连接 - 通过端口 1099 进行不安全连接,通过端口 8999 进行安全连接。到目前为止我们还不了解这一点,因为我们实际上已经设置了正确的系统属性来防止这种情况发生:
-Dcom.sun.management.jmxremote=true
-Dcom.sun.management.jmxremote.port=8999
-Dcom.sun.management.jmxremote.rmi.port=8999
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=true
-Dcom.sun.management.jmxremote.password.file=/opt/our_app/jmxremote.password
-Dcom.sun.management.jmxremote.access.file=/opt/our_app/jmxremote.access
为什么端口 1099 仍然打开?我不得不提到 Spring Actuator 也在使用中,但我在那里找不到任何配置来控制端口,所以这似乎不是问题所在。
感谢 Ravi Sharam 在上面的评论中给出了解决方案。
我们的项目中有以下依赖项:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
另外通过系统启动应用程序 属性
-Dorg.apache.activemq.broker.jmx.createConnector=false
打开的默认端口 1099 已被删除。让我们用 netstat:
检查一下
root@protect01:/opt/our_app# netstat -ntlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 29956/rpcbind
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 19282/systemd-resol
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1421/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 25126/master
tcp 0 0 0.0.0.0:8001 0.0.0.0:* LISTEN 988/java
tcp6 0 0 :::8999 :::* LISTEN 988/java
tcp6 0 0 :::111 :::* LISTEN 29956/rpcbind
tcp6 0 0 :::80 :::* LISTEN 3986/apache2
tcp6 0 0 :::22 :::* LISTEN 1421/sshd
tcp6 0 0 127.0.0.1:8089 :::* LISTEN 988/java
tcp6 0 0 ::1:25 :::* LISTEN 25126/master
tcp6 0 0 :::34139 :::* LISTEN 988/java
tcp6 0 0 :::11099 :::* LISTEN 988/java
tcp6 0 0 :::443 :::* LISTEN 3986/apache2
tcp6 0 0 :::45093 :::* LISTEN 988/java
没有开放的端口 1099 了,只有预期的 8999。 Yippiiiii!
不幸的是,我们的 Spring Boot 2 应用程序 公开了 RMI 注册表默认端口 1099 我们的安全团队对此表示抱怨。我们希望 JMX 应该以安全的方式专门通过端口 8999 使用。目前,您可以通过两种方式连接 - 通过端口 1099 进行不安全连接,通过端口 8999 进行安全连接。到目前为止我们还不了解这一点,因为我们实际上已经设置了正确的系统属性来防止这种情况发生:
-Dcom.sun.management.jmxremote=true
-Dcom.sun.management.jmxremote.port=8999
-Dcom.sun.management.jmxremote.rmi.port=8999
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=true
-Dcom.sun.management.jmxremote.password.file=/opt/our_app/jmxremote.password
-Dcom.sun.management.jmxremote.access.file=/opt/our_app/jmxremote.access
为什么端口 1099 仍然打开?我不得不提到 Spring Actuator 也在使用中,但我在那里找不到任何配置来控制端口,所以这似乎不是问题所在。
感谢 Ravi Sharam 在上面的评论中给出了解决方案。
我们的项目中有以下依赖项:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
另外通过系统启动应用程序 属性
-Dorg.apache.activemq.broker.jmx.createConnector=false
打开的默认端口 1099 已被删除。让我们用 netstat:
检查一下root@protect01:/opt/our_app# netstat -ntlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 29956/rpcbind
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 19282/systemd-resol
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1421/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 25126/master
tcp 0 0 0.0.0.0:8001 0.0.0.0:* LISTEN 988/java
tcp6 0 0 :::8999 :::* LISTEN 988/java
tcp6 0 0 :::111 :::* LISTEN 29956/rpcbind
tcp6 0 0 :::80 :::* LISTEN 3986/apache2
tcp6 0 0 :::22 :::* LISTEN 1421/sshd
tcp6 0 0 127.0.0.1:8089 :::* LISTEN 988/java
tcp6 0 0 ::1:25 :::* LISTEN 25126/master
tcp6 0 0 :::34139 :::* LISTEN 988/java
tcp6 0 0 :::11099 :::* LISTEN 988/java
tcp6 0 0 :::443 :::* LISTEN 3986/apache2
tcp6 0 0 :::45093 :::* LISTEN 988/java
没有开放的端口 1099 了,只有预期的 8999。 Yippiiiii!