Установка и защита Memcached в CentOS 7
Centos | Комментировать запись
Системы кэширования объектов памяти, такие как Memcached, могут оптимизировать производительность базы данных, временно сохраняя часто запрашиваемые или недавно извлеченные записи в памяти. Таким образом, они уменьшают количество прямых запросов к базам данных.
Поскольку такие системы, как Memcached, при неправильной настройке подвергают сервер dos-атакам, важно заранее обеспечить безопасность серверов Memcached. В этом руководстве вы узнаете, как защитить сервер Memcached, привязав установку к локальному или частному сетевому интерфейсу и создав авторизованного пользователя для экземпляра Memcached.
Требования
Для работы вам понадобится:
- Сервер CentOS 7, настроенный по этому мануалу.
- FirewallD, настроенный по мануалу Настройка брандмауэра FirewallD в CentOS 7.
Установка 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: CentOS 7, Memcached, SASL