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

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

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

Требования

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

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

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

sudo apt-get update

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

sudo apt-get install memcached

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

sudo apt-get install libmemcached-tools

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

Защита 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      2383/memcached
. . .

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

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

Чтобы добавить авторизованных пользователей в 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: 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

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

. . .
Mar 02 22:03:58 memcached systemd-memcached-wrapper[2760]: Initialized SASL.
. . .

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

memcstat --servers="127.0.0.1"

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

echo $?

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

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

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

sudo apt-get install sasl2-bin

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

sudo mkdir -p /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: 3831
uptime: 9
time: 1520028517
version: 1.4.25
. . .

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

Настройка доступа по частной сети

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

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

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

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

sudo ufw allow from client_servers_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_servers_private_IP:11211         0.0.0.0:*               LISTEN      2383/memcached


. . .

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

Заключение

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

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

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

Tags: , ,