Memcached是一套常用的key-value缓存系统,由于它本身没有权限控制模块,所以对公网开放的Memcache服务很容易被攻击者扫描发现,攻击者通过命令交互可直接读取Memcached中的敏感信息。

真·控制

  1. 调用端限制
# 通过 IPtalbes 对 memcached 服务端口进行访问限制控制。只允许指定的IP地址。
iptables -A INPUT -p tcp -s 192.168.0.2 —dport 11211 -j ACCEPT
  1. 使用端限制
# 如果Memcached没有在公网开放的必要,可在Memcached启动时指定绑定的IP地址为 127.0.0.1 。
memcached -d -m 1024 -u memcached -l 127.0.0.1 -p 11211 -c 1024 -P /tmp/memcached.pid

伪·控制

  1. 最小化权限
使用普通权限账号运行,指定Memcached用户。例如,在Linux环境中运行以下命令来运行Memcached:
memcached -d -m 1024 -u memcached -l 127.0.0.1 -p 11211 -c 1024 -P /tmp/memcached.pid
  1. 修改默认端口
# 修改默认11211监听端口为11222端口。在Linux环境中运行以下命令:
memcached -d -m 1024 -u memcached -l 127.0.0.1 -p 11222 -c 1024 -P /tmp/memcached.pid

Memcached命令参数说明

  • -d 是指启动一个守护进程。
  • -m 是指分配给Memcached使用的内存数量,单位是MB,以上为1024MB。
  • -u 是指运行Memcached的用户,推荐使用单独普通权限用户memcached,而不要使用root权限账户。
  • -l 是指监听的服务器IP地址,例如指定服务器的IP地址为127.0.0.1。
  • -p 是用来设置Memcached的监听端口,默认端口为11211。建议设置1024以上的端口。
  • -c 是指最大运行的并发连接数,默认是1024。可按照您服务器的负载量来设定。
  • -P 是指设置保存Memcached的pid文件,例如保存在 /tmp/memcached.pid 位置。

使用配置文件开机启动多个 Memcached 实例

  1. 创建配置文件

    CentOS 下的默认地址:/etc/sysconfig/memcached

    PORT="11211"
    USER="memcached"
    MAXCONN="1024"
    CACHESIZE="64"
    OPTIONS=""

    再 Copy 出一个 memcached1 文件,端口改为 11311

  2. 创建对应的 Service 文件,参考: linux-service

    [Unit]
    Description=Memcached
    Before=httpd.service
    After=network.target

    [Service]
    Type=simple
    EnvironmentFile=-/etc/sysconfig/memcached
    ExecStart=/usr/bin/memcached -u $USER -p PORT -m $CACHSIZE -c $MAXCONN $OPTIONS

    [Install]
    WantedBy=multi-user.target

    再 Copy 出一个 memcached1.service 文件,配置文件行改为 EnvironmentFile=-/etc/sysconfig/memcached1

  3. 修改下默认的启动命令参数,加上 bind 参数

    ExecStart=/usr/bin/memcached -l 127.0.0.1 -u $USER -p PORT -m $CACHSIZE -c $MAXCONN $OPTIONS
    ExecStart=/usr/bin/memcached1 -l 127.0.0.1 -u $USER -p PORT -m $CACHSIZE -c $MAXCONN $OPTIONS

  4. 启动和管理实例

    systemctl stats/start/stop memcached.service

参考

  1. https://help.aliyun.com/knowledge_detail/37553.html
  2. https://serverfault.com/questions/347621/memcache-basic-configuration