Memo/Linux/Memcached

http://dexlab.net/pukiwiki/index.php?Memo/Linux/Memcached
 

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.  
      6. sudo service memcached restart
      7.  
      8. # test
      9. echo -en "\x00\x00\x00\x00\x00\x01\x00\x00stats\r\n" | nc -u -w 3 $HOST 11211;echo $?
      10. 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. sudo rpm -Uvh perl-Net-SSLeay-*.el5.rfx.x86_64.rpm

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-08-17 (金) 14:26:05 (4d)