Memo/Linux/Memcached

http://dexlab.net/pukiwiki/index.php?Memo%2FLinux%2FMemcached
 

Memcached


リフレクションDDoS攻撃の対応

  • デフォルト設定では「listen: 0.0.0.0」、TCP/UDPオープン、認証無しのため、iptablesやAWSセキュリティグループ等で適切に設定しないとインターネットから接続でき、不正利用される。
  • memcached 1.5.6からUDPはデフォルトで無効になった。
  • 環境: CentOS 6/7
    • CentOS 7のncコマンドは6と違うので注意。ncatのエイリアスに変わったため「-z」は使えない
  • 検証方法
    • 「nc -uvz host 11211」は間違った結果を返すので、UDPの検証として使えない。例えmemcachedが動作していなくても「succeeded」を返す。
    • UDPで「stats」コマンドを実行して結果を返すかを検証する
      1. HOST=192.168.10.100
      2. # UDPがブロックされていない場合
      3. echo -en "\x00\x00\x00\x00\x00\x01\x00\x00stats\r\n" | nc -u -w 3 $HOST 11211;echo $?
      4. STAT pid 4123
      5. STAT uptime 1200
      6. ...
      7. END
      8. 0
      9.  
      10. # iptables等でUDPがブロックされている場合
      11. echo -en "\x00\x00\x00\x00\x00\x01\x00\x00stats\r\n" | nc -u -w 3 $HOST 11211;echo $?
      12. 0
  • 対策: memcachedのオプションを変更する。
    • listenを0.0.0.0ではなく、localhostやprivate ip等にする。
    • UDPでのlistenを止める
      1. sudo vim /etc/sysconfig/memcached
      2. --
      3. OPTIONS="-l 127.0.0.1,<private ip> -U 0"
      4. --
      5. sudo service memcached restart
      6.  
      7. # test
      8.  echo -en "\x00\x00\x00\x00\x00\x01\x00\x00stats\r\n" | nc -u -w 3 $HOST 11211;echo $?
      9. nc: Write error: Connection refused

監視

  • memcachedが起動してから増え続ける値もあるので、監視の際は差分で行う項目もある
key説明
bytes使用メモリ
limit_maxbytes最大メモリ。/etc/sysconfig/memcached の CACHESIZE。デフォルト64MB
evictions有効期限に達してないアイテムがmemcacheより追い出されたら増加。CACHESIZEの値を増やすことを検討。監視は差分
curr_items現在のアイテム数
curr_connections現在の接続数
get_hitsリクエスト時にアイテムが見つかった数。監視は差分
get_missesリクエスト時にアイテムが見つからなかった数。監視は差分
  • memcached-1.5.6-1.el6.remi.x86_64 には memcached-tool が内蔵されているので、余計なパッケージは不要
  • 特定の値だけを取得したい場合:
    1. key=limit_maxbytes
    2. memcached-tool 127.0.0.1:11211 stats | perl -ane 'if($F[0] =~ /^'$key'$/){print "$F[1]\n";}'
    3. 67108864 # デフォルトでは64MB

statsを取得

  • memcached-tool(memcached-1.4.5-1.el5.rf.x86_64)
    1. memcached-tool localhost:11211 stats
    2.  
    3. #localhost:11211   Field       Value
    4.          accepting_conns           1
    5. ...
  • ncを使う
    1. echo -e "stats\nquit" | nc 127.0.0.1 11211
    2.  
    3. STAT pid 1845
    4. ...
  • telnetを使う
    1. telnet localhost 11211
    2.  
    3. stats
    4.  
    5. STAT pid 1964
    6. ...
    7. END
    8.  
    9. ^]
    10. telnet> quit

libmemcached: 便利なCLIツール

memflush, memslap, memerror, memrm, memstat, memcat, memcpがある

  • インストール
    1. yum install libmemcached.x86_64

flush_all

  • flush_allはitemを有効期限切れにするだけで、statsの「curr_items」は減らない。
  • get後(アイテムは消えている)に、statsを取ると減る
  • memcachedコンテンツの全削除
    1. echo -e "flush_all\nquit" | nc 127.0.0.1 11211

インストール時のエラー対応

  • RHEL/CentOS 5: perl-Net-SSLeay 1.33 >= とのエラーが出てmemcachedがインストールできない場合
    1. wget http://packages.sw.be/perl-Net-SSLeay/perl-Net-SSLeay-1.36-1.el5.rfx.x86_64.rpm
    2. rpm 」を付けないと、「-Uvh perl-Net-SSLeay-*.el5.rfx.x86_64.rpm
    3. rm -f perl-Net-SSLeay-*.el5.rfx.x86_64.rpm

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-03-19 (月) 12:10:04 (37d)