Memcached — это программный пакет с открытым исходным кодом, который обеспечивает уровень кэширования в памяти, часто развертываемый в качестве компонента стеков веб-приложений для снижения нагрузки на традиционные базы данных для часто используемых объектов.
Установить пакет не составляет труда, но нужно помнить, что для нормальной работы с PHP, необходимо установить и сконфигурировать пакеты для самого языка.
Перед началом всех манипуляций обновим системные пакеты:
1 |
sudo apt-get update && sudo apt-get upgrade |
Теперь используйте следующую команду для установки Memcached:
1 |
sudo apt-get install memcached |
Предполагается, что PHP уже установлен. Добавим необходимые пакеты:
1 |
sudo apt-get install php-dev php-pear php-memcached |
Также необходимо установить модуль MemCache для PHP:
1 |
apt-get install libmemcached-dev build-essential |
Наконец выполняем установку расширения Memcache php с помощью PECL:
1 |
pecl install memcache |
Осталось подключить поддержку Memcache в PHP:
1 |
sudo vim sudo vim /etc/php/fpm/php.ini |
В конец файла php.ini
добавил: extension=memcache.so
Проверьте, установлен ли Memcached как модуль PHP:
1 |
php -i | grep memcache -I |
Проверим работу, создадим в корне файл memcache_test.php с содержимым:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<?php try { $memcached = new Memcached(); $memcached->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
Чтобы проверить настройки интерфейса, найдите следующую строку в файле:
1 2 3 |
. . . -l 127.0.0.1 . . . |
Если вы видите настройку по умолчанию -l 127.0.0.1, то нет необходимости изменять эту строку. Рекомендуется также отключить UDP если вы предоставляете доступ из внешнего мира. Это поможет избежать атак типа «отказ в обслуживании». Чтобы отключить UDP (оставив TCP незатронутым), добавьте следующую опцию в нижней части этого файла:
1 2 |
. . . -U 0 |
Вы так же можете изменить основные настройки кеша:
1 2 3 |
-m 512 # Объем хранилища в оперативной памяти -p 11211 # Порт -d # Запущен как демон |
Применим настройки:
1 |
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
.