В свете растущих DDoS-атак с использованием Memcached в качестве усилителя трафика мне захотелось опубликовать старую заметку про установку и правильную настройку Memcached на Debian 8/9.
Исходные данные: ОС Debian 9.3 (Stretch);
Задача: Установить Memcached и произвести правильную базовую настройку;
1. Установка Memcached:
apt-get update apt-get install memcached -y
2. Проверка работы:
Проверим факт запуска memcached после установки:
# systemctl status memcached ● memcached.service - memcached daemon Loaded: loaded (/lib/systemd/system/memcached.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2018-02-28 22:28:18 +05; 1min 50s ago Docs: man:memcached(1) Main PID: 3150 (memcached) CGroup: /system.slice/memcached.service └─3150 /usr/bin/memcached -m 64 -p 11211 -u memcache -l 127.0.0.1
Проверим открытые порты:
# netstat -ltupn | grep memcached tcp 0 0 127.0.0.1:11211 0.0.0.0:* LISTEN 3150/memcached udp 0 0 127.0.0.1:11211 0.0.0.0:* 3150/memcached
Как мы видим в дистрибутиве Debian Linux наш вновь установленный Memcached привязывается к localhost (127.0.0.1), что очень хорошо.
Меньше всего повезло тем у кого CentOS 7.4, т.к. там Memcached привязывается ко всем имеющимся сетевым интерфейсам и в этом и есть большая проблема.
Теперь запросим вывод статистики у Memcached при этом мы будем подключаться по протоколу UDP (опция -u):
# echo stats | nc -q1 -u 127.0.0.1 11211 STAT pid 3555 STAT uptime 39 STAT time 1519840091 STAT version 1.4.33 STAT libevent 2.0.21-stable STAT pointer_size 64 ... STAT lrutail_reflocked 0 END
Как видим, соединение прошло, статистика получена.
3. Настройка Memcached:
Т.к. наш Memcached все же принимает соединения на порту 11211 по протоколу UDP, то результатом выполнения указанной выше команды мы увидим вывод статистики работы Memcached.
Давайте запретим Memcached принимать соединения по протоколу UDP, ведь 99% приложений используют протокол TCP для связи с Memcached.
Для отключения использования UDP добавим в файл /etc/memcached.conf строку:
-U 0
А так же обратим внимание на наличие строки:
-l 127.0.0.1
После этого перезапустим Memcached командой:
systemctl restart memcached
И проверим список открытых портов:
# netstat -ltupn | grep memcached tcp 0 0 127.0.0.1:11211 0.0.0.0:* LISTEN 3555/memcached
Теперь наш Memcached может принимать соединения только с localhost (127.0.0.1) и только по протоколу TCP, проверим:
echo stats | nc -q1 -u 127.0.0.1 11211
В ответ мы ничего не увидим, ведь опция -u у команды nc предписывает использовать протокол UDP, а его мы отключили.
Попробуем подключиться к Memcached по TCP:
# echo stats | nc -q1 127.0.0.1 11211 STAT pid 3676 STAT uptime 165 STAT time 1519840541 STAT version 1.4.33 STAT libevent 2.0.21-stable STAT pointer_size 64 STAT rusage_user 0.024000 STAT rusage_system 0.008000 ... STAT lrutail_reflocked 0 END
Все работает. Теперь мы можем спать спокойно.
На этом все, до скорых встреч. Если у Вас возникли вопросы или Вы хотите чтобы я помог Вам, то Вы всегда можете связаться со мной разными доступными способами.
Профессионально занимаюсь системным администрированием Linux -серверов и баз данных (MySQL, PostgreSQL) на протяжении последних 24 лет.