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-адрес жертвы.

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