编辑
2024-04-10
MQ
00

目录

ActiveMQ 升级配置步骤总结
一、拉取修复更新版本的源码 ( 版本 > 5.18.3 )
二、编译源码包
1. 源码导入和编译
2. 编译打包
3. 在Linux上编译打包
4. 本地上传 / 复制编译后的可执行包到部署目录
三、部署
1、启动命令
2、JVM配置修改
3、注册为系统服务自启动
A. 创建 systemd 服务文件
B. 重新加载 systemd
C. 启动服务并设置开机自启
D. 检查服务状态
E. 修改服务配置
F. 停止并禁用服务
四、管理界面使用
五、消息推送测试
六、消息消费测试
题外话:如何添加 SSL 证书
题外话:Nginx Proxy Manager 缓存项关闭
附录:Apache ActiveMQ 远程代码执行漏洞
升级原因:Apache ActiveMQ 远程代码执行漏洞
一、漏洞概述
二、漏洞详情
排查方式:
三、官方修复建议
四、受影响资产检测
五、使用云安全产品防御漏洞
1、公网IP业务防护:使用腾讯云防火墙(CFW)虚拟补丁
2、主机/容器防护:使用腾讯 T-Sec主机安全(云镜)腾讯容器安全服务(TCSS)泰石引擎RASP+方案对主机/容器进行防御
3、使用云安全助手协助处理漏洞

ActiveMQ 升级配置步骤总结

注意

官方修复建议

  1. 官方已发布漏洞补丁及修复版本,建议受漏洞影响的用户请评估业务是否受影响后,酌情升级至安全版本,参考链接:Tags · apache/activemq · GitHub
  2. 建议不要把 Apache ActiveMQ 系统直接对公网开放(默认端口:616168161)。

一、拉取修复更新版本的源码 ( 版本 > 5.18.3 )

备注:此时最新版本的 activemq 5.18.4 已经发布(修复版本都需要Jdk11环境,否则会报错如下所示

js
Error: A JNI error has occurred, please check your installation and try again Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/activemq/console/Main has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0 ..

获取方式

备注:若选择拉取官方编译包做部署,则可跳过后续的编译打包环节,直接进行部署环节

点击文件图标,下载 activemq-5.18.4.zip 版本:File Icon

点击文件图标,下载 activemq-5.18.4.tar.gz 版本:file_tar_icon

二、编译源码包

1. 源码导入和编译

拉取对应代码,导入IDEA然后配置 maven,拉取下载获取项目对应的依赖等。

2. 编译打包

然后排除maventest模块,然后打包install

注: 如果maven配置了本地仓库,则去仓库下的\org\apache\activemq\apache-activemq\5.18.4目录,查看打包好的编译包,未配置或者 package 的,则去源码的 target 目录下查看有没有编译包

3. 在Linux上编译打包

  • 编译之前,先配置好 maven

  • 设置linux用户使用maven的环境变量,用于mvn指令执行:

  • 编译源码:

    sh
    cd $ACTIVEMQ_HOME mvn clean install -Dmaven.test.skip=true

编译失败原因

第一次尝试编译,发现编译失败 —— 排查原因是因为最新版本的相关依赖包私库中没有代理的阿里云 maven 仓库中也没有。需要手动自行上传到私库或者导入自定义的缓存依赖仓库中

  • 上传本地打包的依赖包到私库中,类似的问题进行类似处理即可

  • 依赖jar包补充完毕后,再次尝试编译打包

  • 编译成功后,在 $ACTIVEMQ_HOME/assembly/target 下会生成可 xxx.bin.tar.gz 的可执行文件压缩包,如果自定义了 maven 缓存仓库路径,则会被挪走到仓库目录下,这是因为 Maven install 插件的 install 目标默认会将构建的工件(如 JAR 文件、POM 文件和附属产品)安装到您的本地 Maven 仓库中

mvn install到指定目录下

添加一个对应参数指定目录即可,例如指定就要输出到target这个临时目录下

sh
mvn clean install -Dmaven.test.skip=true -Dmaven.repo.local=/home/ctm/software/activemq-activemq-5.18.4/target

4. 本地上传 / 复制编译后的可执行包到部署目录

本地上传到 Linux 部署服务器上,若是服务器打包,则找到编译后的执行包,复制到部署目录下即可。

如果是 windows 系统则可以直接解压打开配置 JDK11 环境后本地运行。

三、部署

1、启动命令

将编译后得到的 xxx.bin.tar.gz 解压,然后执行(注意:启动之前有许多配置可能要调整

sh
tar -zxvf apache-activemq-5.13.2-bin.tar.gz cd apache-activemq-5.13.2/bin ./activemq start

如,后面的可选参数还有 statusrestartstoplist等,不清楚的地方,直接 --help 查看。

更新后的启动命令

sh
cd /home/ctm/evn/apache-activemq-5.18.4/bin && ./activemq start

2、JVM配置修改

注: 生产环境中,可能会对 activemqjvm 内存设置上限,可以直修改 bin/activemq 启动脚本的启动配置。在新版中启动脚本的 jvm 内存启动参数被替换成了一个变量,我们需要去 env 中进行配置修改:

3、注册为系统服务自启动

将系统服务文件添加到 systemd

A. 创建 systemd 服务文件

  1. (root权限) 使用文本编辑器(如 vim 或 nano)创建一个新文件,例如:

    sh
    vim /etc/systemd/system/activemq.service
  2. 在文件中粘贴或输入服务配置内容:

    ini
    [Unit] Description=Apache ActiveMQ After=network.target [Service] Type=forking ExecStart=/bin/sh -c 'cd /home/ctm/evn/apache-activemq-5.18.4/bin && ./activemq start' ExecStop=/bin/sh -c 'cd /home/ctm/evn/apache-activemq-5.18.4/bin && ./activemq stop' User=ctm Group=dinstall Restart=always [Install] WantedBy=multi-user.target
  3. 保存并退出文本编辑器::wq

B. 重新加载 systemd

重新加载 systemd 以使新的服务文件生效:

bash
sudo systemctl daemon-reload

C. 启动服务并设置开机自启

启动新服务并设置开机自启:

bash
sudo systemctl start activemq sudo systemctl enable activemq

D. 检查服务状态

检查服务状态:

bash
sudo systemctl status activemq

现在,activemq 服务已作为系统服务添加并启动了。

E. 修改服务配置

如果需要修改服务配置,可以编辑 /etc/systemd/system/activemq.service 文件,修改后需要重新加载和重启服务:

bash
sudo systemctl daemon-reload sudo systemctl restart activemq

F. 停止并禁用服务

如果不再需要该服务,可以停止并禁用它:

bash
sudo systemctl stop activemq sudo systemctl disable activemq

总的来说,添加系统服务主要是创建一个 .service 文件并通过 systemctl 命令管理该服务的启动、停止、重启等操作

四、管理界面使用

除此以外,如果有管理界面控制台打开的需要,可在启动成功后访问: http://localhost:8161/admin/

但是需要注意的是,如果外网访问,则启动时要注意防火墙端口的开放IP配置的修改,需要注意的是根据自己需求处理开放IP,生产环境不建议完全开放

  • 防火墙开启:

以下是针对 ActiveMQ 的配置步骤,包括验证监听端口、修改绑定 IP 地址和修改管理控制台密码。

  1. 验证监听端口: 首先,确认 ActiveMQ 正在监听的端口,如果输出显示 127.0.0.1:8161,表示 ActiveMQ 仅接受来自本机的连接。

    bash
    netstat -tuln | grep 8161

  1. 修改绑定 IP 地址: 为了让 ActiveMQ 接受任何 IP 地址的连接,修改 jetty.xml 配置文件。修改开放控制台访问,尽量指定IP,任意开放并不安全,此外还需要修改密码控制台登录密码。
  • 打开 jetty.xml 文件:

    bash
    vim /home/ctm/evn/apache-activemq-5.18.4/conf/jetty.xml
  • 127.0.0.1 更改为 0.0.0.0

    xml
    <Property name="jetty.host" default="0.0.0.0"/>

  1. 修改管理控制台密码: 更改 ActiveMQ 管理控制台的登录密码。
  • 打开 jetty-realm.properties 文件:

    bash
    vim /home/ctm/evn/apache-activemq-5.18.4/conf/jetty-realm.properties
  • 修改 admin 用户的密码:

    properties
    admin: newpassword, admin

    newpassword 替换为您的新密码。

  1. 保存文件并重启 ActiveMQ 以应用更改:

    bash
    /home/ctm/evn/apache-activemq-5.18.4/bin/activemq restart
  2. 输入密码访问控制台,进行各个功能的使用:


输入管理员用户密码


欢迎页面


管控界面

五、消息推送测试


消息推送测试类


查看Queues的摘要


点击查看Queues的详情


点击查看消息的详情

六、消息消费测试


消息消费测试类


队列情况

OK 至此新版本的 ActiveMQ 已经部署完成,后续则可进行后更复杂的功能集成


题外话:如何添加 SSL 证书

  • windows中为maven的nexus私库https链接,如何添加ssl证书:打开powershell然后执行如下指令
sh
& "$env:JAVA_HOME\bin\keytool" -import -alias nexus -file "C:\Users\liang\Downloads\golovin.cn_root\golovin.cn_root\golovin.cn_root.crt" -keystore "$env:C:\Program Files\Java\jdk1.8.0_231\jre\lib\security\cacerts" -storepass changeit


题外话:Nginx Proxy Manager 缓存项关闭

  • 场景:登录使用ActiveMQ的管理控制台操作之后,次日使用时,控制台各个页面或功能的点击,均提示需要重新输入管理员用户名和密码。

  • 原因排查:其他条件不改变的情况下,通过 IP + 端口 的形式访问,不出现该问题;因此定位到是Nginx Proxy Manager的代理问题,检查其配置项,怀疑是Caches Asserts 配置项的问题,关闭后重试发现恢复正常,从而推断出应该是MQ自身令牌缓存过期时间与 NPM (Nginx Proxy Manager)的令牌缓存过期时间不一致导致的。


附录:Apache ActiveMQ 远程代码执行漏洞

升级原因:Apache ActiveMQ 远程代码执行漏洞

一、漏洞概述

Apache ActiveMQ是最流行的开源、多协议、基于 Java 的消息代理。它支持行业标准协议,用户可以从多种语言和平台的客户端使用AMQP协议集成多平台应用程序。2023年10月,Apache ActiveMQ官方发布新版本,修复了一个远程代码执行漏洞,攻击者可构造恶意请求通过Apache ActiveMQ的61616端口发送恶意数据导致远程代码执行,从而完全控制Apache ActiveMQ服务器。

二、漏洞详情

  • 漏洞名称:Apache ActiveMQ远程代码执行漏洞
  • 漏洞编号:暂无
  • 危害等级:CVE-2023-46604
  • 漏洞类型:远程代码执行
  • 影响版本:
    • Apache ActiveMQ < 5.18.3
    • Apache ActiveMQ < 5.17.6
    • Apache ActiveMQ < 5.16.7
    • Apache ActiveMQ < 5.15.16

排查方式:

  1. 通过云镜漏扫排查 Apache ActiveMQ 版本确定是否可能受该漏洞影响。
  2. 通过云安全中心一键体检、风险服务暴露排查是否有 Apache ActiveMQ 对外暴露。

三、官方修复建议

  1. 官方已发布漏洞补丁及修复版本,建议受漏洞影响的用户请评估业务是否受影响后,酌情升级至安全版本,参考链接:Tags · apache/activemq · GitHub
  2. 建议不要把Apache ActiveMQ系统直接对公网开放(默认端口:616168161)。

四、受影响资产检测

登录腾讯云安全中心控制台,对 Apache ActiveMQ 远程代码执行漏洞进行排查。细节如下:

  1. 进入云安全中心控制台,进入【立体防护】页面,点击一键试用。

  2. 进入云安全中心控制台,进入【立体防护】页面进入【一站式漏洞】点击查看受影响资产会漏洞发起扫描(扫描公网资产是否存在漏洞)。

备注: 试用版扫描结果需要在【风险中心】——【漏洞风险】查看。

  1. 在风险中心,点击资产体检,创建资产体检任务(对暴露面进行风险资产梳理)。

  1. 选择【标准体检】必须勾选端口风险、风险服务暴露,勾选同意用户协议后,开始体检。

  1. 体检任务完成后,在风险中心,选择【风险服务暴露】可以查看是否有 ActiveMQ 服务存在,左上角搜索组件 【ActiveMQ】

  1. 如果存在风险资产对外,建议首先收敛资产直接对外,然后在修复漏洞。

五、使用云安全产品防御漏洞

如不能及时按照官方公告修复漏洞,推荐使用腾讯云安全产品防御漏洞,腾讯云安全中心将向符合条件且未试用过产品的企业用户限时开放 7 天免费试用

提示

根据业务类型可选择云防火墙虚拟补丁、主机安全泰石已经支持防护 Apache ActiveMQ 远程代码执行漏洞。

业务类型防护产品产品功能
公网IP业务云防火墙虚拟补丁
web应用主机安全RASP虚拟补丁

1、公网IP业务防护:使用腾讯云防火墙(CFW)虚拟补丁

适用于绑定公网IP对外提供 http 服务的业务类型,通过虚拟补丁功能,一键开启针对漏洞利用的检测与自动拦截,无需重启服务。步骤细节如下:

  1. 登录腾讯T-Sec云防火墙控制台,进入【防火墙开关】页面开启互联网边界开关;
  2. 进入【入侵防御】页面,打开左上角【虚拟补丁】开关,开启拦截模式即可拦截漏洞利用攻击流量。

2、主机/容器防护:使用腾讯 T-Sec主机安全(云镜)腾讯容器安全服务(TCSS)泰石引擎RASP+方案对主机/容器进行防御

泰石引擎RASP+方案支持精准防御,可自动注入RASP 插件,通过插件管理、虚拟补丁部署,实现一键化漏洞主动防御。 登录腾讯主机安全控制台,进行漏洞检测、开启漏洞防御。

  1. 主机安全(云镜)控制台:打开【漏洞管理】-> 应急漏洞 -> 立即扫描
  2. 主机安全(云镜)控制台:打开【漏洞管理】-> 漏洞防御,点击按钮一键开启;

容器安全服务控制台:打开【漏洞管理】-> 漏洞防御,点击按钮一键开启

3、使用云安全助手协助处理漏洞

  1. 进入云安全中心控制台,可以通过内嵌腾讯混元大模型的云安全小助手,进行快速处理,例如:
  • 咨询小助手,我想看看最近的应急漏洞
  • 咨询小助手,Apache ActiveMQ 远程代码执行漏洞的修复建议

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Golovin

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!