Установка и защита Memcached в CentOS 7

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

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

Требования

Для работы вам понадобится:

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

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

sudo yum update

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

sudo yum install memcached

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

sudo yum install libmemcached

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

Защита Memcached

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

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

sudo vi /etc/sysconfig/memcached

Найдите переменную OPTIONS:

. . .
OPTIONS=""

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

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

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
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 запущен и работает, введите следующее:

memstat --servers="127.0.0.1"
Server: 127.0.0.1 (11211)
pid: 3831
uptime: 9
time: 1520028517
version: 1.4.25
. . .

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

sudo vi /etc/sysconfig/memcached

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

Строка должна выглядеть так:

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

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

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

sudo systemctl restart memcached

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

sudo journalctl -u memcached

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

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

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

memstat --servers="127.0.0.1"

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

echo $?

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

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

Теперь нужно загрузить два пакета, которые обеспечивают работу с 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

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

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 memcached:memcached /etc/sasl2/memcached-sasldb2

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

sudo systemctl restart memcached

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

memstat --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. Если вы выполнили мануал по установке и настройке FirewallD и не планируете подключаться к 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.

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

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

sudo firewall-cmd --reload

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

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

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

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

Откройте /etc/sysconfig/memcached:

sudo vi /etc/sysconfig/memcached

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

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

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

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