Как установить и защитить Memcached на Ubuntu 16.04

Вступление

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

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

Предпосылки

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

Имея эти предварительные условия, вы будете готовы установить и защитить свой сервер Memcached.

[[step-1 -—- install-memcached-from-the-official-repositories]] == Шаг 1. Установка Memcached из официальных репозиториев

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

sudo apt-get update

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

sudo apt-get install memcached

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

sudo apt-get install libmemcached-tools

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

[[step-2 -—-securing-memcached-configuration-settings]] == Шаг 2 - Защита настроек конфигурации Memcached

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

Вы можете открыть/etc/memcached.conf с помощьюnano:

sudo nano /etc/memcached.conf

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

/etc/memcached.conf

. . .
-l 127.0.0.1

Если вы видите настройку по умолчанию-l 127.0.0.1, то нет необходимости изменять эту строку. Если вы измените этот параметр, чтобы он был более открытым, то также рекомендуется отключить UDP, так как он более вероятно будет использоваться при атаках типа «отказ в обслуживании». Чтобы отключить UDP (оставив TCP без изменений), добавьте следующую опцию в конец этого файла:

/etc/memcached.conf

. . .
-U 0

Сохраните и закройте файл, когда вы закончите.

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

sudo systemctl restart memcached

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

sudo netstat -plunt

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

OutputActive 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.

[[шаг-3 -—- добавление авторизованных пользователей]] == Шаг 3 - Добавление авторизованных пользователей

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

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

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

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

memcstat --servers="127.0.0.1"

Вы должны увидеть результат, подобный следующему:

OutputServer: 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

Внизу файла добавьте следующее:

/etc/memcached.conf

. . .
-S

Затем найдите и раскомментируйте параметр-vv, который предоставит подробный вывод для/var/log/memcached. Некомментированная строка должна выглядеть так:

/etc/memcached.conf

. . .
-vv

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

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

sudo systemctl restart memcached

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

sudo journalctl -u memcached

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

Output. . .
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

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

/etc/sasl2/memcached.conf

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

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

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

sudo saslpasswd2 -a memcached -c -f /etc/sasl2/memcached-sasldb2 sammy

Наконец, мы передадим пользователюmemcache право владения базой данных SASL:

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

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

sudo systemctl restart memcached

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

memcstat --servers="127.0.0.1" --username=sammy --password=your_password

Вы должны увидеть результат, подобный следующему:

OutputServer: 127.0.0.1 (11211)
     pid: 3831
     uptime: 9
     time: 1520028517
     version: 1.4.25
     . . .

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

[[step-4 -—- Allow-access-over-the-private-network-optional]] == Шаг 4 - Разрешение доступа через частную сеть (необязательно)

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

[.note] #Note: В этом разделе мы расскажем, как настроить параметры брандмауэра с помощьюUFW, но также можно использовать брандмауэры DigitalOcean Cloud для создания этих параметров. Для получения дополнительной информации о настройке облачных межсетевых экранов DigitalOcean см. НашIntroduction to DigitalOcean Cloud Firewalls. Чтобы узнать больше о том, как ограничить входящий трафик для определенных машин, ознакомьтесь с разделом этого руководства, посвященнымapplying firewall rules using tags and server names и нашим обсуждениемfirewall tags.
#

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

Перед настройкой параметров конфигурации рекомендуется установить правила брандмауэра, чтобы ограничить число компьютеров, которые могут подключаться к вашему серверу Memcached. Вам нужно будет знатьclient server’s private IP address, чтобы настроить правила брандмауэра.

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

sudo ufw allow from client_servers_private_IP/32 to any port 11211

Вы можете узнать больше о брандмауэрах UFW, прочитав нашufw essentials guide.

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

Привязка Memcached к интерфейсу частной сети

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

Мы можем снова открыть файл/etc/memcached.conf, набрав:

sudo nano /etc/memcached.conf

Внутри найдите строку-l 127.0.0.1, которую вы проверили или изменили ранее, и измените адрес, чтобы он соответствовал интерфейсу частной сети вашего сервера:

/etc/memcached.conf

. . .
-l memcached_servers_private_IP
. . .

Сохраните и закройте файл, когда вы закончите.

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

sudo systemctl restart memcached

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

sudo netstat -plunt
OutputActive 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, настроив его для привязки к интерфейсу локальной или частной сети и включив аутентификацию SASL.

Чтобы узнать больше о Memcached, ознакомьтесь сproject documentation. Для получения дополнительной информации о том, как работать с Memcached, см. Наше руководство поHow To Install and Use Memcache on Ubuntu 14.04.

Related