Установка и настройка Memcached на Debian 9

В свете растущих 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

Все работает. Теперь мы можем спать спокойно.

На этом все, до скорых встреч. Если у Вас возникли вопросы или Вы хотите чтобы я помог Вам, то Вы всегда можете связаться со мной разными доступными способами.