5

假设服务器 1 位于 5:5:5:5:11211,服务器 2 位于 25.25.25.25:11211。您将它们添加到服务器池中,一切都很好。直到有人连接到该端口并开始弄乱您的数据。

所以我们把端口改成38295。比较难找,但也不是不可能,所以还是不够用。

我的问题是:

1)你可以为memcached服务器设置身份验证(用户名/密码)来验证连接吗?您能否将特定主机/IP 列入白名单(可能是个坏主意)?

2) 你能并且应该保护通过互联网传输的数据吗?数据是原始格式,您的 ISP 和嗅探线路的任何人都可以看到正在发送的所有数据。但是加密数据可能会影响性能?

有哪些解决方案可用于设置 memcached 服务器集群以及如何保护和验证它们?

4

3 回答 3

8

满足我需求的解决方案是按照 sumoanand 的建议设置 iptables 条目。这就是我的工作。

使用类似这样的方式启动 memcached:

/usr/bin/memcached -p 11211 -l 0.0.0.0 -d -u www-data -m 12288

请记住,该-l参数设置为0.0.0.0,这实际上允许来自任何来源的连接。如果你保持标准,127.0.0.1这是行不通的。

接下来,我们进入 iptables。如果您的 memcached 服务器位于 LAN 上,则以下命令将仅允许来自特定本地服务器的连接。

例如,为了添加192.168.1.100到允许列表,我们发出命令:

iptables -A INPUT -p tcp -s 192.168.1.100 --dport 11211 -j ACCEPT

例如,如果要将远程服务器列入白名单,25.62.25.62则发出另一个命令:

iptables -A INPUT -p tcp -s 25.62.25.62 --dport 11211 -j ACCEPT

您可以根据需要将任意数量的 IP 列入白名单,但请务必发出最终命令来阻止该端口上的所有其他连接。

iptables -A INPUT -p tcp --dport 11211 -j REJECT

IPtables 是按照它们输入的顺序读取的,因此如果您在发出任何 ACCEPT 规则之前发出 REJECT ALL 语句,所有连接都将被拒绝(即使是列入白名单的连接)。

然而,以这种方式发送的数据仍然没有以任何方式加密。任何拦截您的 memcached 服务器和远程服务器(数据包嗅探器、ISP)的东西都将能够看到完全原始的数据。

于 2013-04-23T23:01:24.183 回答
2

我认为我们不需要像 Mike 提到的那样在这里寻求复杂的解决方案。

假设您的 Web 服务器(web1、web2、web3)需要通过位于同一内部网络中的 11211 端口从 memcache 服务器(mem1 和 mem2)获取数据,并且每个 Web 服务器的内部 IP 地址以 172.221 开头。. .

在这种情况下,您可以在 mem1 和 mem2 服务器的 ip-table 中设置一个限制,只接受来自 172.221 的请求。. 对于 11211 端口。

希望这会有所帮助。

于 2013-04-23T19:19:12.597 回答
1

Memcached 现在支持 SASL。这将允许您对 memchaced 服务执行强身份验证。这是一篇关于如何使用 memcached 设置 SASL 的好文章。

http://blog.couchbase.com/sasl-memcached-now-available

于 2013-04-23T19:01:20.507 回答