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

Системы кэширования объектов памяти, такие как Memcached, могут оптимизировать производительность базы данных, временно сохраняя часто запрашиваемые или недавно извлеченные записи в памяти. Таким образом, они уменьшают количество прямых запросов к базам данных.

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

Требования

Для работы вам понадобится сервер Ubuntu 18.04, настроенный по этому мануалу.

1: Установка Memcached из официального репозитория

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

sudo apt update

Затем установите официальный пакет:

sudo apt install memcached

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

sudo apt install libmemcached-tools

Теперь Memcached установлен как сервис, а на сервере есть инструменты, которые позволят вам проверить его подключение. Можно перейти к конфигурации.

2: Защита Memcached

Чтобы убедиться, что экземпляр Memcached прослушивает локальный интерфейс 127.0.0.1, нужно проверить настройку по умолчанию в конфигурационном файле /etc/memcached.conf. Текущая версия Memcached, которая поставляется с Ubuntu и Debian, включает параметр –l для определения локального интерфейса, что предотвращает dos-атаки. Нужно убедиться, что он установлен правильно.

Откройте файл /etc/memcached.conf:

sudo nano /etc/memcached.conf

Чтобы проверить настройку интерфейса, найдите следующую строку в файле:

. . .
-l 127.0.0.1
. . .

Если вы видите значение по умолчанию -l 127.0.0.1, тогда изменять эту строку нет необходимости. Если вы измените этот параметр, чтобы открыть другой интерфейс, тогда также неплохо было бы отключить UDP, поскольку он, скорее всего, будет использоваться в атаках типа «отказ в обслуживании». Чтобы отключить 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      2279/memcached
. . .

Это подтверждает, что memcached привязан к адресу 127.0.0.1 и использует только TCP.

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

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

Поддержка SASL

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

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

memcstat --servers="127.0.0.1"
Server: 127.0.0.1 (11211)
pid: 2279
uptime: 65
time: 1546620611
version: 1.5.6
. . .

Теперь можно включить 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

Вы должны увидеть следующую строку, которая включает поддержку SASL:

. . .
Jan 04 16:51:12 memcached systemd-memcached-wrapper[2310]: Initialized SASL.
. . .

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

memcstat --servers="127.0.0.1"

Эта команда не вернет результат. Введите следующее, чтобы проверить ее статус:

echo $?

$? всегда будет возвращать код вывода последней завершенной команды. Как правило, любой ответ, кроме 0, указывает на сбой процесса. В этом случае вы должны увидеть статус выхода 1, что значит, что команда memcstat была выполнена неправильно.

Создание пользователя

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

sudo apt install sasl2-bin

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

sudo mkdir /etc/sasl2
sudo nano /etc/sasl2/memcached.conf

Добавьте следующее в файл:

mech_list: plain
log_level: 5
sasldb_path: /etc/sasl2/memcached-sasldb2

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

Теперь нужно создать базу данных SASL с учетными данными пользователя. Используйте команду saslpasswd2, чтобы сделать новую запись для пользователя в базе данных с помощью опции -c. Здесь пользователь условно называется 8host, но вы можете заменить это имя. Используя опцию -f, можно указать путь к базе данных (путь, который вы указали в каталоге /etc/sasl2/memcached.conf):

sudo saslpasswd2 -a memcached -c -f /etc/sasl2/memcached-sasldb2 8host

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

Теперь передайте пользователю memcache права на БД SASL.

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

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

sudo systemctl restart memcached

Команда memcstat снова подтвердит, сработал ли процесс аутентификации. На этот раз запустите команду с учетными данными:

memcstat --servers="127.0.0.1" --username=8host --password=your_password
Server: 127.0.0.1 (11211)
pid: 2772
uptime: 31
time: 1546621072
version: 1.5.6 Ubuntu
. . .

Сервис Memcached поддерживает SASL и аутентификацию пользователей.

4: Настройка доступа по частной сети (опционально)

Теперь вы знаете, как настроить Memcached для прослушивания локального интерфейса, что может предотвратить атаки типа отказ в обслуживании и защитить интерфейс Memcached от воздействия внешних сторон. Однако в некоторых случаях есть необходимость разрешить доступ к Memcached другим серверам. Для этого можно привязать Memcached к интерфейсу частной сети.

Здесь мы расскажем, как настроить брандмауэр на примере UFW.

Ограничение доступа по IP-адресу в брандмауэре

Прежде чем приступить к конфигурации, рекомендуется настроить правила брандмауэра, чтобы ограничить доступ к серверу Memcached. Для этого вам понадобятся внутренние IP-адреса клиентов, которые должны иметь доступ к Memcached.

Если вы используете брандмауэр UFW, вы можете ограничить доступ к экземпляру Memcached, введя следующее:

sudo ufw allow from client_server_private_IP/32 to any port 11211

Читайте также: Основы UFW: общие правила и команды фаервола

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

Настройка Memcached для поддержки интерфейса частной сети

Теперь, когда брандмауэр готов, вы можете привязать Memcached к частному интерфейсу сервера вместо 127.0.0.1.

Откройте /etc/memcached.conf:

sudo nano /etc/memcached.conf

Найдите строку -l 127.0.0.1, которую вы уже проверяли или редактировали ранее, и измените адрес. Теперь здесь должен быть внутренний адрес сервера memcached:

. . .
-l memcached_servers_private_IP
. . .

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

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

sudo systemctl restart memcached

Убедитесь, что все работает правильно, с помощью команды netstat:

sudo netstat -plunt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address                                Foreign Address         State       PID/Program name
. . .
tcp        0      0 memcached_server_private_IP:11211            0.0.0.0:*               LISTEN      2912/memcached
. . .

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

Заключение

Теперь вы умеете устанавливать Memcached и обеспечивать безопасность этого сервиса.

Чтобы узнать больше о Memcached, ознакомьтесь с документацией проекта.

Читайте также: Установка memcached в Ubuntu 14.04

Tags: , ,