Установка memcached в Debian/Ubuntu

Memcached — это программный пакет с открытым исходным кодом, который обеспечивает уровень кэширования в памяти, часто развертываемый в качестве компонента стеков веб-приложений для снижения нагрузки на традиционные базы данных для часто используемых объектов.

Установить пакет не составляет труда, но нужно помнить, что для нормальной работы с PHP, необходимо установить и сконфигурировать пакеты для самого языка.

Перед началом всех манипуляций обновим системные пакеты:

 
sudo apt-get update && sudo apt-get upgrade

 

Теперь используйте следующую команду для установки Memcached:

 
sudo apt-get install memcached

 

Предполагается, что PHP уже установлен. Добавим необходимые пакеты:

sudo apt-get install php-dev php-pear php-memcached

 

Также необходимо установить модуль MemCache для PHP:

apt-get install libmemcached-dev build-essential

 

Наконец выполняем установку расширения Memcache php с помощью PECL:

pecl install memcache

 

Осталось подключить поддержку Memcache в PHP:

sudo vim sudo vim /etc/php/fpm/php.ini

 

В конец файла php.ini добавил: extension=memcache.so

Проверьте, установлен ли Memcached как модуль PHP:

php -i | grep memcache -I

 

Проверим работу, создадим в корне файл memcache_test.php с содержимым:

 
addServer("127.0.0.1", 11211); 
    $response = $memcached->get("sample_key");
 
    if($response==true) 
    {
      echo $response;
    } 

    else

    {
    echo "Cache is empty";
    $memcached->set("sample_key", "Sample data from cache") ;
    }
}
catch (exception $e)
{
echo $e->getMessage();
}
?>

При первом заходе site.com/memcache_test.php получим: «Cache is empty«, второе посещение напечатает закешированный: «Sample data from cache«.

 

Конфигурация Memcache

Откройтефайл: sudo vim /etc/memcached.conf
Чтобы проверить настройки интерфейса, найдите следующую строку в файле:

 
. . .
-l 127.0.0.1
. . .

Если вы видите настройку по умолчанию -l 127.0.0.1, то нет необходимости изменять эту строку. Рекомендуется также отключить UDP если вы предоставляете доступ из внешнего мира. Это поможет избежать атак типа «отказ в обслуживании». Чтобы отключить UDP (оставив TCP незатронутым), добавьте следующую опцию в нижней части этого файла:

 
. . .
-U 0

Вы так же можете изменить основные настройки кеша:

 
-m 512 # Объем хранилища в оперативной памяти
-p 11211 # Порт
-d # Запущен как демон

Применим настройки:

 sudo systemctl restart memcached

Memcache работает, осталось подключить наш продукт. Из конфигурации понятно, что мы подключаемся к локальному хосту через порт 11211.

 

Помните о безопасности

В типичном развертывании доступ к memcached будет доступен только внутренним компонентам приложения, однако, похоже, тысячи экземпляров memcached доступны в Интернете в целом. Сервис memcached обладает несколькими качествами, которые делают его идеальной мишенью для отражения DDoS и злоупотребления усилением: по умолчанию он прослушивает UDP и связывается с каждым интерфейсом, а также может генерировать большие ответы в ответ на небольшие запросы. Таким образом, это очень похоже на службы DNS и NTP, которыми так злоупотребляли в прошлом. Злоумышленники отправляют небольшой пакет запросов на хорошо подключенные хосты с запущенным memcached. Пакеты запроса имеют поддельный IP-адрес источника предполагаемой жертвы. Затем сервер memcached генерирует поток ответного трафика на поддельный IP-адрес жертвы.

memcache

Основное различие между атаками с использованием memcached и атаками DNS и NTP, заключается в факторе усиления пропускной способность (BAF). US-CERT сообщает о BAF от 10 000 до 51 000 для memcached по сравнению с 28-54 для DNS и 556 для NTP. Это создает огромный потенциал атаки.

Вывод: открывать Memcached наружу без острой необходимости нельзя. Это сильно упрощает DDoS, позволяя злоумышленнику малыми усилиями нанести больший вред. Если же по какой-то причине вам все же нужно открыть доступ, отключайте UDP как описано в шаге с настройками memcached.conf.

StackUP