注意
官方修复建议
Apache ActiveMQ
系统直接对公网开放(默认端口:61616
、8161
)。备注:此时最新版本的 activemq 5.18.4
已经发布(修复版本都需要Jdk11
环境,否则会报错如下所示)
jsError: 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
..
获取方式
备注:若选择拉取官方编译包做部署,则可跳过后续的编译打包环节,直接进行部署环节
拉取对应代码,导入IDEA然后配置 maven
,拉取下载获取项目对应的依赖等。
然后排除maven
的test
模块,然后打包install
。
注: 如果maven配置了本地仓库,则去仓库下的\org\apache\activemq\apache-activemq\5.18.4
目录,查看打包好的编译包,未配置或者 package
的,则去源码的 target
目录下查看有没有编译包
Linux
上编译打包maven
编译源码:
shcd $ACTIVEMQ_HOME
mvn clean install -Dmaven.test.skip=true
编译失败原因
第一次尝试编译,发现编译失败 —— 排查原因是因为最新版本的相关依赖包,私库中没有, 代理的阿里云 maven
仓库中也没有。需要手动自行上传到私库或者导入自定义的缓存依赖仓库中
$ACTIVEMQ_HOME/assembly/target
下会生成可 xxx.bin.tar.gz
的可执行文件压缩包,如果自定义了 maven
缓存仓库路径,则会被挪走到仓库目录下,这是因为 Maven install
插件的 install
目标默认会将构建的工件(如 JAR
文件、POM
文件和附属产品)安装到您的本地 Maven
仓库中mvn install到指定目录下
添加一个对应参数指定目录即可,例如指定就要输出到target这个临时目录下
shmvn clean install -Dmaven.test.skip=true -Dmaven.repo.local=/home/ctm/software/activemq-activemq-5.18.4/target
本地上传到 Linux
部署服务器上,若是服务器打包,则找到编译后的执行包,复制到部署目录下即可。
如果是 windows
系统则可以直接解压打开配置 JDK11
环境后本地运行。
将编译后得到的 xxx.bin.tar.gz
解压,然后执行(注意:启动之前有许多配置可能要调整)
shtar -zxvf apache-activemq-5.13.2-bin.tar.gz
cd apache-activemq-5.13.2/bin
./activemq start
如,后面的可选参数还有 status
、restart
、stop
、list
等,不清楚的地方,直接 --help
查看。
更新后的启动命令
shcd /home/ctm/evn/apache-activemq-5.18.4/bin && ./activemq start
注: 生产环境中,可能会对 activemq
的 jvm
内存设置上限,可以直修改 bin/activemq
启动脚本的启动配置。在新版中启动脚本的 jvm
内存启动参数被替换成了一个变量,我们需要去 env
中进行配置修改:
将系统服务文件添加到 systemd
(root权限) 使用文本编辑器(如 vim 或 nano)创建一个新文件,例如:
shvim /etc/systemd/system/activemq.service
在文件中粘贴或输入服务配置内容:
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
保存并退出文本编辑器::wq
重新加载 systemd 以使新的服务文件生效:
bashsudo systemctl daemon-reload
启动新服务并设置开机自启:
bashsudo systemctl start activemq
sudo systemctl enable activemq
检查服务状态:
bashsudo systemctl status activemq
现在,activemq 服务已作为系统服务添加并启动了。
如果需要修改服务配置,可以编辑 /etc/systemd/system/activemq.service
文件,修改后需要重新加载和重启服务:
bashsudo systemctl daemon-reload sudo systemctl restart activemq
如果不再需要该服务,可以停止并禁用它:
bashsudo systemctl stop activemq
sudo systemctl disable activemq
总的来说,添加系统服务主要是创建一个 .service
文件并通过 systemctl 命令管理该服务的启动、停止、重启等操作
除此以外,如果有管理界面控制台打开的需要,可在启动成功后访问: http://localhost:8161/admin/
但是需要注意的是,如果外网访问,则启动时要注意防火墙端口的开放和 IP
配置的修改,需要注意的是根据自己需求处理开放IP
,生产环境不建议完全开放
以下是针对 ActiveMQ
的配置步骤,包括验证监听端口、修改绑定 IP 地址和修改管理控制台密码。
验证监听端口: 首先,确认 ActiveMQ
正在监听的端口,如果输出显示 127.0.0.1:8161
,表示 ActiveMQ
仅接受来自本机的连接。
bashnetstat -tuln | grep 8161
ActiveMQ
接受任何 IP
地址的连接,修改 jetty.xml
配置文件。修改开放控制台访问,尽量指定IP
,任意开放并不安全,此外还需要修改密码控制台登录密码。打开 jetty.xml
文件:
bashvim /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"/>
ActiveMQ
管理控制台的登录密码。打开 jetty-realm.properties
文件:
bashvim /home/ctm/evn/apache-activemq-5.18.4/conf/jetty-realm.properties
修改 admin 用户的密码:
propertiesadmin: newpassword, admin
将 newpassword
替换为您的新密码。
保存文件并重启 ActiveMQ
以应用更改:
bash/home/ctm/evn/apache-activemq-5.18.4/bin/activemq restart
输入密码访问控制台,进行各个功能的使用:
输入管理员用户密码
欢迎页面
管控界面
消息推送测试类
查看Queues的摘要
点击查看Queues的详情
点击查看消息的详情
消息消费测试类
队列情况
OK 至此新版本的 ActiveMQ
已经部署完成,后续则可进行后更复杂的功能集成
SSL
证书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是最流行的开源、多协议、基于 Java 的消息代理。它支持行业标准协议,用户可以从多种语言和平台的客户端使用AMQP协议集成多平台应用程序。2023年10月,Apache ActiveMQ官方发布新版本,修复了一个远程代码执行漏洞,攻击者可构造恶意请求通过Apache ActiveMQ的61616端口发送恶意数据导致远程代码执行,从而完全控制Apache ActiveMQ服务器。
Apache ActiveMQ
版本确定是否可能受该漏洞影响。Apache ActiveMQ
对外暴露。61616
、8161
)。登录腾讯云安全中心控制台,对 Apache ActiveMQ
远程代码执行漏洞进行排查。细节如下:
备注: 试用版扫描结果需要在【风险中心】——【漏洞风险】查看。
ActiveMQ
服务存在,左上角搜索组件 【ActiveMQ】。
如不能及时按照官方公告修复漏洞,推荐使用腾讯云安全产品防御漏洞,腾讯云安全中心将向符合条件且未试用过产品的企业用户限时开放 7 天免费试用。
提示
根据业务类型可选择云防火墙虚拟补丁、主机安全泰石已经支持防护 Apache ActiveMQ
远程代码执行漏洞。
业务类型 | 防护产品 | 产品功能 |
---|---|---|
公网IP业务 | 云防火墙 | 虚拟补丁 |
web应用 | 主机安全 | RASP虚拟补丁 |
适用于绑定公网IP对外提供 http 服务的业务类型,通过虚拟补丁功能,一键开启针对漏洞利用的检测与自动拦截,无需重启服务。步骤细节如下:
泰石引擎RASP+方案支持精准防御,可自动注入RASP 插件,通过插件管理、虚拟补丁部署,实现一键化漏洞主动防御。 登录腾讯主机安全控制台,进行漏洞检测、开启漏洞防御。
容器安全服务控制台:打开【漏洞管理】-> 漏洞防御,点击按钮一键开启
本文作者:Golovin
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!