我正在开展一个项目,该项目将使不受信任的客户端(可能多达 1000 个)都与中央服务器联系。消息流量将很低,并且每个客户端彼此之间都是不可见的(换句话说,它们应该无法相互通信或监视彼此的频道)。
RabbitMQ 似乎非常适合。它将充当我的应用程序和客户端之间的中介。客户端将直接连接到 RMQ,每个客户端都有自己单独的队列,RMQ 将在客户端和我的服务器之间代理消息。
所以我的问题是:假设我已正确设置了所有内容(大部分内容)(身份验证、每个客户端都是单独的用户、队列上的权限等),那么 RabbitMQ 对于这种面向公众的应用程序是否安全?有人有类似设置的例子吗?
举个例子,nginx 和 sshd 的设计是面向公众的,而 MongoDB 之类的东西实际上并非如此。即使我在 Mongo 上设置了单独的用户名和密码,并对单个集合设置了权限,我也不太愿意让不受信任的客户端直接连接到它。
答案1
即使您正确设置了所有权限,恶意客户端仍然可能破坏 RabbitMQ 集群(服务器)。当客户端打开大量连接时,可能会发生这种情况。
建议使用某种负载平衡器(例如 Haproxy)来保护集群免受此类攻击。