假设服务器1位于5:5:5:5:11211,服务器2位于25.25.25.25:11211。您将它们添加到服务器池中,一切都很棒。直到某人连接到该端口并开始搞乱您的数据。
所以我们将端口更改为38295.难以找到,但并非不可能,所以仍然不够。
我的问题是:
1)您是否可以为memcached服务器设置身份验证(用户名/密码)以验证连接?你可以将特定的主机/ IP列入白名单(可能是个坏主意)吗?
2)您是否可以保护通过互联网传输的数据?数据采用原始格式,您的ISP和任何嗅探线路的人都可以看到所有正在发送的数据。但加密数据可能会影响性能?
有哪些解决方案可用于设置memcached服务器集群,以及如何保护和验证它们?
答案 0 :(得分: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)的任何东西都能够完全看到数据。
答案 1 :(得分:2)
我认为我们不需要像迈克提到的那样寻求复杂的解决方案。
假设您的Web服务器(web1,web2,web3)需要通过位于同一内部网络的11211端口从memcache服务器(mem1和mem2)获取数据,并且每个Web服务器的内部ip地址都以172.221开头。
在这种情况下,您可以在mem1&的ip-table中加入限制。 mem2服务器只接受172.221。。的11211端口请求。
希望这会有所帮助。
答案 2 :(得分:1)
Memcached现在支持SASL。这将允许您对已存储的服务执行强身份验证。这是一篇关于如何使用memcached设置SASL的好文章。