Как установить и защитить Memcached на CentOS 7

Вступление

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

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

Предпосылки

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

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

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

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

sudo yum update

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

sudo yum install memcached

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

sudo yum install libmemcached

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

Защита настроек конфигурации Memcached

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

Вы можете открыть/etc/sysconfig/memcached с помощьюvi:

sudo vi /etc/sysconfig/memcached

Найдите переменнуюOPTIONS, которая изначально будет выглядеть так:

/etc/sysconfig/memcached

. . .
OPTIONS=""

Привязка к нашему локальному сетевому интерфейсу ограничит трафик для клиентов на одном компьютере. Мы сделаем это, добавив-l 127.0.0.1 к нашей переменнойOPTIONS. Это может быть слишком ограничительным для определенных сред, но может стать хорошей отправной точкой в ​​качестве меры безопасности.

Поскольку протокол UDP гораздо более эффективен для атак отказа в обслуживании, чем TCP, мы также можем отключить прослушиватель UDP. Для этого мы добавим параметр-U 0 в нашу переменнуюOPTIONS. Файл в полном объеме должен выглядеть следующим образом:

/etc/sysconfig/memcached

PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 127.0.0.1 -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.

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

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

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

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

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

memstat --servers="127.0.0.1"

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

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

Теперь мы можем перейти к включению SASL. Во-первых, мы можем добавить параметр-S к нашей переменнойOPTIONS в/etc/sysconfig/memcached, что включит SASL. Откройте файл снова:

sudo vi /etc/sysconfig/memcached

Мы добавим параметры-S и-vv в нашу переменнуюOPTIONS. Параметр-vv предоставит подробный вывод в/var/log/memcached, который поможет нам при отладке. Добавьте эти параметры в переменнуюOPTIONS следующим образом:

/etc/sysconfig/memcached

. . .
OPTIONS="-l 127.0.0.1 -U 0 -S -vv"

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

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

sudo systemctl restart memcached

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

sudo journalctl -u memcached

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

Output. . .
Mar 05 18:16:11 memcached-server memcached[3846]: Initialized SASL.
. . .

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

memstat --servers="127.0.0.1"

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

echo $?

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

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

Теперь мы можем загрузить два пакета, которые позволят нам работать с Cyrus SASL Library и ее механизмами аутентификации, включая плагины, поддерживающие схемы аутентификацииPLAIN. Эти пакеты,cyrus-sasl-devel иcyrus-sasl-plain, позволят нам создать и аутентифицировать нашего пользователя. Установите пакеты, набрав:

sudo yum install cyrus-sasl-devel cyrus-sasl-plain

Далее мы создадим каталог и файл, которые Memcached проверит на параметры конфигурации SASL:

sudo mkdir -p /etc/sasl2
sudo vi /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

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

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

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

sudo systemctl restart memcached

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

memstat --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 и аутентификацией пользователей.

Разрешение доступа через частную сеть

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

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

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

Перед настройкой параметров конфигурации рекомендуется установить правила брандмауэра, чтобы ограничить число компьютеров, которые могут подключаться к вашему серверу Memcached. Если вы выполнили предварительные требования и установили FirewallD на свой сервер и выполняете планnot по подключению к Memcached с другого хоста, то вам не нужно настраивать правила брандмауэра. Ваш автономный экземпляр Memcached должен прослушивать127.0.0.1 благодаря переменнойOPTIONS, которую мы определили ранее, и поэтому не должно быть никаких опасений по поводу входящего трафика. Однако, если вы планируете разрешить доступ к вашему серверу Memcached с других хостов, вам нужно будет внести изменения в настройки вашего брандмауэра с помощью командыfirewall-cmd.

Начните с добавления выделенной зоны Memcached в вашу политикуfirewalld:

sudo firewall-cmd --permanent --new-zone=memcached

Затем укажите, какой порт вы хотите оставить открытым. Memcached по умолчанию использует порт11211:

sudo firewall-cmd --permanent --zone=memcached --add-port=11211/tcp

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

sudo firewall-cmd --permanent --zone=memcached --add-source=client_server_private_IP

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

sudo firewall-cmd --reload

Пакеты с IP-адреса вашего клиента теперь должны обрабатываться в соответствии с правилами в выделенной зоне Memcached. Все остальные соединения будут обрабатываться зоной по умолчаниюpublic.

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

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

Первым шагом в привязке к интерфейсу частной сети нашего сервера будет изменение переменнойOPTIONS, которую мы установили ранее.

Мы можем снова открыть/etc/sysconfig/memcached, набрав:

sudo vi /etc/sysconfig/memcached

Внутри найдите переменнуюOPTIONS. Теперь мы можем изменить-l 127.0.0.1, чтобы отразить частный IP-адрес нашего сервера Memcached:

/etc/sysconfig/memcached

. . .
OPTIONS="-l memcached_servers_private_IP -U 0 -S -vv"

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

Перезапустите сервис 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