Установка и защита Memcached на Ubuntu 16.04

Обсудить
Установка и защита Memcached на Ubuntu 16.04

Введение

Разные утилиты, которые используются для кэширования (например, Memcached), могут повышать производительность базы данных путем временного сохранения информации в памяти. Обычно это касается тех записей, которые вы либо недавно запрашивали, либо запрашиваете часто. В этом случае при использовании кэширования уменьшается количество прямых запросов к базе данных.

При использовании систем вроде Memcached крайне важно правильно защитить серверы, где они установлены, иначе атаки на сервер могут иметь очень печальные последствия.

Поэтому в этом руководстве будет рассказано не только о том, как установить, но и как защитить сервер с Memcached.

VDS/VPS Timeweb

Требования

Перед тем, как приступить к выполнению инструкций, на вашем сервере должна быть установлена ОС Ubuntu 16.04 с пользователем, который может выполнять команды sudo, и файерволом.

Шаг 1: установка Memcached из официальных репозиториев

Если на вашем сервере еще нет Memcached, то вы можете установить эту утилиту из официальных репозиториев Ubuntu. Сначала необходимо обновить индекс пакетов:

$ sudo apt-get update

Далее установите пакет:

$ sudo apt-get install memcached

Для удобства работы с Memcached можно также установить libmemcached-tools, библиотеку с несколькими полезными инструментами:

$ sudo apt-get install libmemcached-tools

Теперь на вашем сервере Memcached установлен в качестве одного из сервисов, и пора перейти к настройке защиты.

Шаг 2: защита настроек Memcached

Для начала надо проверить, что Memcached слушает localhost 127.0.0.1. Для этого нужно посмотреть настройки в конфигурационном файле, который находится в /etc/memcached.conf.

Откройте /etc/memcached.conf, используя nano:

$ sudo nano /etc/memcached.conf

Потом найдите следующую строчку:

. . .

-l 127.0.0.1

Если там так и стоит -l 127.0.0.1 , то ничего изменять не нужно. Однако на всякий случай можно отключить UDP, чтобы злоумышленники не могли это использовать во время атак. Настройка TCP останется нетронутой. В конце файла напишите:

. . .

-U 0

Затем сохраните и закройте файл.

Перезапустите Memcached для того, чтобы изменения вступили в силу.

$ sudo systemctl restart memcached

Убедитесь, что Memcached привязан к локальному интерфейсу и слушает только TCP:

$ sudo netstat -plunt

Вывод будет примерно таким:

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address           Foreign Address  State    PID/Program name

. . .

tcp     0   0 127.0.0.1:11211         0.0.0.0:*      LISTEN   2383/memcached

. . .

Шаг 3: добавление авторизованных пользователей

Для того, чтобы добавить авторизованных пользователей в Memcached, можно использовать SASL (Simple Authentication and Security Layer - простой уровень аутентификации и безопасности). Это фреймворк, который разделяет механизмы аутентификации от прикладных протоколов.

Сначала нужно включить поддержку SASL в конфигурационном файле Memcached, а затем перейти к добавлению пользователя.

Настройка поддержки SASL

Проверьте текущее состояние Memcached, используя команду memcstat. Это нужно для того, чтобы в дальнейшем можно было отследить сделанные изменения.

Чтобы убедиться в том, что сервис Memcached запущен и работает, введите команду:

$ memcstat --servers="127.0.0.1"

Вы должны увидеть примерно вот такой вывод:

Server: 127.0.0.1 (11211)

pid: 3831

uptime: 9

time: 1520028517

version: 1.4.25

. . .

Теперь нужно включить SASL. Добавьте параметр -S в конфигурационном файле /etc/memcached.conf. Для этого снова откройте файл:

$ sudo nano /etc/memcached.conf

В конце файла добавьте:

. . .

-S

Далее найдите и раскомментируйте опцию -vv, благодаря которой вы будете получать подробный отчет в /var/log/memcached. Раскомментированная строка будет выглядеть вот так:

. . .

-vv

Сохраните и закройте файл.

Перезапустите сервис Memcached:

$ sudo systemctl restart memcached

Теперь можно посмотреть логи для того, чтобы убедиться, что поддержка SASL включена:

$ sudo journalctl -u memcached

Вы должны увидеть следующую строку:

. . .

Mar 31 20:15:39 memcached systemd-memcached-wrapper[2760]: Initialized SASL.

. . .

Можно еще раз проверить статус Memcached, но т.к. теперь активен SASL, без аутентификации эта команда не будет выполнена:

$ memcstat --servers="127.0.0.1"

Вы не увидите никакого вывода. Для проверки статуса команды можно ввести команду ниже:

$ echo $?

Она покажет код завершения: любые цифры, кроме 0, говорят о том, что команду выполнить не удалось. В данном случае вы должны увидеть 1, а значит, команда не была выполнена.

Добавление авторизованного пользователя

Теперь можно загрузить пакет sasl2-bin, который содержит программы администрирования базы пользователей SASL. Это позволит создать авторизованного пользователя:

$ sudo apt-get install sasl2-bin

Далее вам нужно создать директорию и файл, который Memcached будет использовать для проверки настроек SASL:

$ sudo mkdir -p /etc/sasl2

$ sudo nano /etc/sasl2/memcached.conf

Добавьте следующие строки в конфигурационный файл SASL:

mech_list: plain

log_level: 5

sasldb_path: /etc/sasl2/memcached-sasldb2

Mech_list установлен на plain, это значит, что Memcached будет использовать собственный файл с паролями и сверять текстовый пароль. Также нужно будет указать путь к файлу базы данных пользователя (это будет сделано далее). Сохраните и закройте файл после изменений.

Теперь необходимо создать базу данных SASL с данными пользователя. Для этого используйте команду saslpasswd2 с ключом -c. Использование ключа -f позволит указать путь к базе данных (который также нужен для файла memcached.conf):

$ sudo saslpasswd2 -a memcached -c -f /etc/sasl2/memcached-sasldb2 user

Далее нужно изменить права: пользователь user должен получить права на базу данных SASL.

$ sudo chown memcache:memcache /etc/sasl2/memcached-sasldb2

После этого перезапустите Memcached:

$ sudo systemctl restart memcached

Команда memcstat покажет, работает или нет теперь аутентификация (введите ее со своими данными):

$ memcstat --servers="127.0.0.1" --username=user --password=ваш_пароль

Вывод должен выглядеть примерно вот так:

Server: 127.0.0.1 (11211)

pid: 3831

uptime: 9

time: 1520028517

version: 1.4.25

. . .

А значит, Memcached успешно работает с поддержкой SASL и пользовательской авторизацией.

Комментарии