为beanstalkd添加Python(或任何UNIX)客户端的认证

-1 投票
3 回答
2148 浏览
提问于 2025-04-15 15:45

我喜欢beanstalkd的地方是:它小巧轻便,消息有优先级,客户端支持很好,使用起来也很简单。

我不喜欢beanstalkd的地方是:没有身份验证,这意味着只要你能连接到端口,就可以往里面插入消息。

所以我在考虑要么用防火墙限制只有可信的系统可以访问(这维护起来很麻烦,而且还要在应用之外增加额外的工作),要么用TLS/SSL把它包裹起来,像用stunnel这样的工具(这会在建立连接等方面增加不少开销)。我也想过可能对任务进行签名(比如用MD5或SHA对任务字符串+时间值+秘密进行处理),但如果攻击者用虚假的任务淹没服务器,我还是会遇到麻烦。有没有人能想到其他方法来保护beanstalkd,防止攻击者插入虚假消息? 尤其是那些在计算和管理上不会增加太多负担的方法。

3 个回答

0

我做了两件事情来减少你提到的问题:

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

其次,我通常会把工作结构进行序列化,然后把一个“密钥”加密后的base64字符串作为工作内容。只有能够正确解密这个工作内容的工人才能解析这些工作。

我知道这绝对不是身份验证的替代方案。但我希望这样能在一定程度上减少有人劫持排队工作的情况。

1

这个问题其实更适合放在beanstalkd讨论组里。

我最近给memcached加了SASL支持,也是出于类似的原因。实际上,增加的负担几乎可以忽略不计,因为你只在连接时进行身份验证(而且你可以一直保持连接打开)。

如果你需要身份验证,我建议你去那个讨论组提问,那里的人更可能帮你解决问题。

4

我不同意一直保持连接打开的做法,因为我在用PHP这种网页脚本语言通过BeanstalkD处理各种事件。打开一个安全连接的开销是我需要仔细考虑的问题。

像Memcached一样,BeanstalkD是为了在可信的环境中使用而设计的,也就是在防火墙后面。如果你不能控制整个私有网络,那么限制某些机器的访问(通过IP地址)是常见的控制方法。加一个安全哈希来丢弃无效的任务并不难,检查起来也没什么负担,但这并不能阻止大量任务被发送过来。

你需要问的问题是:“你的机器有多大可能会被随机添加到某个特定范围之外的IP地址?还有,是否有其他在本地网络上的第三方想要向你的队列注入随机任务?”第一部分是关于把机器隔离开来需要多少工作,后面一部分是问你是否真的需要这样做?

撰写回答