2013-04-23 156 views
5

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

所以我们将端口更改为38295.难以找到,但并非不可能,所以它还不够。

我的问题是:memcached的服务器来验证连接

1)可以设置身份验证(用户名/密码)?你可以将特定主机/ IP列入白名单(可能是个坏主意)?

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

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

回答

1

Memcached现在支持SASL。这将允许您为您的memchaced服务执行强认证。这里有一篇关于如何用memcached设置SASL的好文章。

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

+0

'php5-memcache'客户端是否对其进行身份验证?我研究过SASL,但我仍然对客户如何验证它感到困惑,因为我没有看到任何功能可以这样做 – user2103849 2013-04-23 19:03:31

2

我不认为我们需要去的复杂的解决方案在这里由Mike提。

假设你的Web服务器(WEB1,web2上,WEB3)需要通过位于同一内部网和内部IP地址,在每个网络服务器与172.221启动11211端口摆脱内存缓存服务器(MEM1 & MEM2)数据。

在这种情况下,您可以在mem1 & mem2服务器的ip表中设置限制,只接受来自172.221的请求。 为11211端口。

希望这会有所帮助。

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的读入它们的输入顺序,因此,如果您发出发出任何接受的规则,所有的连接将被拒绝(甚至白名单的)前拒绝所有声明。

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