rocketmq安全漏洞
漏洞内容
服务器支持 TLS Client-initiated 重协商攻击(CVE-2011-1473)【原理扫描】
该漏洞存在于SSL renegotiation的过程中。对于使用SSL重协商功能的服务都会受其影响。
特别的,renegotiation被用于浏览器到服务器之间的验证。
虽然目前可以在不启用renegotiation进程的情况下使用HTTPS,但很多服务器的默认设置均启用了renegotiation功能。
该漏洞只需要一台普通电脑和DSL连接即可轻易攻破SSL服务器。
而对于大型服务器集群来说,则需要20台电脑和120Kbps的网络连接即可实现。
SSL是银行、网上电子邮件服务和其他用于服务器和用户之间保护私人数据并安全通信必不可少的功能。
所以本次拒绝服务漏洞影响范围非常广危害非常大。
判断处理办法
因为rocketmq使用tls协议来处理通信,但是仍然使用tlsV1协议版本,改漏洞应该是因为tls协议版本过低导致的,所以需要通过一些方案修改tls协议版本。
提供方案
rocketmq不释放或者映射端口,然后部署一个nginx的容器。
将nginx容器与rocketmq-namesrv容器通过docker网桥进行连接,使用nginx代理rocketmq-namesrv的9876端口;
然后在nginx代理层对“TLS Client-initiated 重协商攻击”漏洞进行修复,然后释放nginx端口,映射为9876.
遇见问题
因为rocketmq的9876端口采用TCP进行连接,所以需要在nginx上要采用stream的配置方式。但是,nginx默认不会安装tcp的ssl组件(ngx_stream_ssl_module ),
所以需要重新编译nginx
最终配置
stream {
server {
listen 9876 ssl;
access_log logs/ldap_access.log tcp;
ssl_protocols TLSv1.2;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
# 设置服务端使用的密码套件
ssl_certificate ssl/www_nginxbar_org.pem;
ssl_certificate_key ssl/www_nginxbar_org.key;
ssl_session_timeout 5m; # SSL TCP会话缓存超时时间为10分钟
ssl_prefer_server_ciphers on;
proxy_pass rocketmq-namesrv:9876;
proxy_ssl on; # 启用SSL/TLS协议,与被代理服务器建立连接
proxy_ssl_session_reuse on; # 与被代理服务器SSL TCP连接的SSL会话重用功能
}
}