从Python(或任何UNIX)客户端向beanstalkd添加身份验证

时间:2009-11-07 07:42:11

标签: python beanstalkd

所以我喜欢beanstalkd:小巧轻便,具有消息优先级,拥有一组很棒的客户端,易于使用。

我不喜欢beanstalkd:如果你可以连接到端口,你可以在其中插入消息,缺乏身份验证。

所以我的想法是要么将它防火墙发送到可信系统(这是一个很难维护和外部应用程序添加另一层要做的事情),或者使用类似stunnel之类的内容将其包装在TLS / SSL中(这将在建立连接和诸如此类的东西方面产生很大的开销)。我确实想过可能签署工作(MD5或SHA的作业字符串+时间值+秘密附加到作业),但如果攻击者用虚假工作淹没服务器,我仍然会遇到麻烦。 有人能想到任何其他方法来保护beanstalkd免受来自攻击者的伪造消息的插入吗?特别是那些不会在计算上或管理上产生大量开销的方法。

3 个答案:

答案 0 :(得分:4)

由于我使用来自网络脚本语言(php)的BeanstalkD来处理各种事件,所以我不得不对只是让连接无限期地保持打开的做法持不同意见。打开安全连接的开销是我必须仔细考虑的事情。

与Memcached类似,beanstalkd旨在用于受信任的环境 - 防火墙后面。如果您不控制整个专用网络,那么限制对一组机器的访问(通过IP地址)将是控制它的典型方式。放入安全哈希然后丢弃无效的工作并不困难,并且几乎没有工作或开销来检查,但不会阻止大量的工作被发送。

要问的问题是“您的计算机可能多久被添加到(在给定范围之外的随机IP地址),以及同样在本地网络上的第三方想要随机注入的可能性工作到你的队列?'。第一部分是关于防止机器关闭的工作量,后者是关于你还需要的吗?

答案 1 :(得分:1)

这个问题确实属于beanstalkd talk list

由于类似的原因,我最近在memcached中添加了SASL支持。在实践中,开销几乎无关紧要,因为您只在连接时进行身份验证(并且无限期地保持连接打开)。

如果身份验证是您需要的,我建议您将其提供给人们可能帮助您解决问题的地方。

答案 2 :(得分:0)

我做了两件事来减少你所引用的问题:

首先,我总是在127.0.0.1上运行beanstalkd

其次,我通常将作业结构序列化,并加载“密钥”加密的base64摘要作为作业字符串。只有能够正确解密作业字符串的工作人员才能解析作业。

我知道这肯定不是替代身份验证。但我希望他们在某种程度上尽量减少一些劫持职业的工作。