2011年2月16日水曜日

CentOSにMemcachedをインスト-ル

CentOSにmemcachedをインストールする。ちなみにCentOSはVMware上の仮想環境。いつもどおりコンパイルしては入れずにyumを利用する。
# yum install memcached
パッケージがないと言われたのでリポジトリを追加して、もう一度。

# rpm -Uhv http://apt.sw.be/redhat/el5/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm
# yum install memcached
入ったので、起動して確認してみる。
$ sudo /etc/init.d/memcached start
Distributed memory caching (memcached) を起動中:           [  OK  ]
$ telnet localhost 11211
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
stats
STAT pid 16368
STAT uptime 15
STAT time 1297830691
STAT version 1.4.5
STAT pointer_size 64
STAT rusage_user 0.000000
STAT rusage_system 0.002999
STAT curr_connections 10
STAT total_connections 11
STAT connection_structures 11
STAT cmd_get 0
STAT cmd_set 0
STAT cmd_flush 0
STAT get_hits 0
STAT get_misses 0
STAT delete_misses 0
STAT delete_hits 0
STAT incr_misses 0
STAT incr_hits 0
STAT decr_misses 0
STAT decr_hits 0
STAT cas_misses 0
STAT cas_hits 0
STAT cas_badval 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 7
STAT bytes_written 0
STAT limit_maxbytes 67108864
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT threads 4
STAT conn_yields 0
STAT bytes 0
STAT curr_items 0
STAT total_items 0
STAT evictions 0
STAT reclaimed 0
END
telnetでつないでstatsと打つと状態が見られる。

memcachedのセキュリティと脆弱性を読むと、特定のIPアドレスだけしかListenしない方が安全とのことで、localhostからのみアクセスできるように設定する。Portも変更してみる。
初めの状態は下記の通り。
# netstat -nlp | grep memcached
tcp        0      0 0.0.0.0:11211               0.0.0.0:*                   LISTEN      16368/memcached     
tcp        0      0 :::11211                    :::*                        LISTEN      16368/memcached     
udp        0      0 0.0.0.0:11211               0.0.0.0:*                               16368/memcached     
udp        0      0 :::11211                    :::*                                    16368/memcached     
設定を変更する。ここでは、Portは11311でlocalhostだけListenするように設定してみる。
# vi /etc/sysconfig/memcached 
PORT="11311"
OPTIONS="-l 127.0.0.1"

# /etc/init.d/memcached restart
Distributed memory caching (memcached) を停止中:           [  OK  ]
Distributed memory caching (memcached) を起動中:           [  OK  ]
memcachedを再起動後は設定通りにLISTENしているのが確認できる。
# netstat -nlp | grep memcached
tcp        0      0 127.0.0.1:11311             0.0.0.0:*                   LISTEN      17035/memcached     
udp        0      0 127.0.0.1:11311             0.0.0.0:*                               17035/memcached  
ホストOS側から試しにアクセスしてみるともちろん接続できない。
$ telnet 192.168.86.128 11311
Trying 192.168.86.128...
telnet: Unable to connect to remote host: Connection refused

このアクセス制御で少しでも安全にはmemcachedを使用できるようになる。あとは、パスワードなどの機密情報はmemcached上には格納させない。システムを設計する上で、これは最低限必要。