Вступление
Системы кэширования объектов памяти, такие как Memcached, могут оптимизировать производительность базы данных бэкэнда, временно сохраняя информацию в памяти, сохраняя часто или недавно запрошенные записи. Таким образом, они уменьшают количество прямых запросов к вашим базам данных.
Поскольку такие системы, как Memcached, при неправильной настройке могут способствовать атакам типа «отказ в обслуживании», важно защитить свои серверы Memcached. В этом руководстве мы расскажем, как защитить ваш сервер Memcached путем привязки вашей установки к интерфейсу локальной или частной сети и создания авторизованного пользователя для вашего экземпляра Memcached.
Предпосылки
В этом руководстве предполагается, что у вас есть сервер, настроенный с пользователем root без полномочий root, и базовый брандмауэр. Если это не так, настройте и установите следующее:
-
Один сервер CentOS 7, настроенный в соответствии с нашимиInitial Server Setup with CentOS 7 tutorial.
-
FirewallD, настроенный в соответствии с разделом“Install and Enable Your Firewall to Start at Boot” нашего руководства по использованию FirewallD с CentOS 7.
Имея эти предварительные условия, вы будете готовы установить и защитить свой сервер 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.