Memo/Linux/Memcached

https://dexlab.net:443/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」コマンドを実行して結果を返すかを検証する
      HOST=192.168.10.100
      # UDPがブロックされていない場合
      echo -en "\x00\x00\x00\x00\x00\x01\x00\x00stats\r\n" | nc -u -w 3 $HOST 11211;echo $?
      STAT pid 4123
      STAT uptime 1200
      ...
      END
      0
      
      # iptables等でUDPがブロックされている場合
      echo -en "\x00\x00\x00\x00\x00\x01\x00\x00stats\r\n" | nc -u -w 3 $HOST 11211;echo $?
      0
  • 対策: memcachedのオプションを変更する。
    • listenを0.0.0.0ではなく、localhostやprivate ip等にする。
    • UDPでのlistenを止める
      sudo vim /etc/sysconfig/memcached
      --
      OPTIONS="-l 127.0.0.1,<private ip> -U 0"
      --
      
      sudo service memcached restart
      
      # test
      echo -en "\x00\x00\x00\x00\x00\x01\x00\x00stats\r\n" | nc -u -w 3 $HOST 11211;echo $?
      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 が内蔵されているので、余計なパッケージは不要
  • 特定の値だけを取得したい場合:
    key=limit_maxbytes
    memcached-tool 127.0.0.1:11211 stats | perl -ane 'if($F[0] =~ /^'$key'$/){print "$F[1]\n";}'
    67108864 # デフォルトでは64MB

statsを取得

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

libmemcached: 便利なCLIツール

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

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

flush_all

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

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

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

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-09-15 (土) 07:31:38 (9d)