СправошнаяПоиск

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

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

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

Предпосылки

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

  • Один сервер Ubuntu 18.04.

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

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

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

 

sudo apt update 

 

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

 

sudo apt install memcached 

 

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

 

sudo apt install libmemcached-tools 

 

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

Шаг 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 

 

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

 

Output
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 2279/memcached . . . Output

 

Это подтверждает, что memcachedпривязан к 127.0.0.1адресу, используя только TCP.

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

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

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

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

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

 

memcstat --servers="127.0.0.1" 

 

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

 

Output
Server: 127.0.0.1 (11211) pid: 2279 uptime: 65 time: 1546620611 version: 1.5.6 . . . Output

 

Теперь мы можем перейти к включению 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
. . . Jan 04 16:51:12 memcached systemd-memcached-wrapper[2310]: Initialized SASL. . . . Output

 

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

 

memcstat --servers="127.0.0.1" 

 

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

 

echo $? 

 

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

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

Теперь мы можем загрузить sasl2-binпакет, содержащий административные программы для пользовательской базы данных SASL. Это позволит нам создать нашего аутентифицированного пользователя:

 

sudo apt install sasl2-bin 

 

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

 

sudo mkdir /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 

 

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

 

Output
Server: 127.0.0.1 (11211) pid: 2772 uptime: 31 time: 1546621072 version: 1.5.6 Ubuntu . . . Output

 

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

Шаг 4 — Разрешение доступа через частную сеть (необязательно)

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

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

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

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

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

 

sudo ufw allow from client_server_private_IP/32 to any port 11211 

 

После внесения этих изменений вы можете настроить службу 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_server_private_IP
. . .

 

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

Затем перезапустите службу Memcached:

 

sudo systemctl restart memcached 

 

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

 

sudo netstat -plunt 

 

Output
Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name . . . tcp 0 0 memcached_server_private_IP:11211 0.0.0.0:* LISTEN 2912/memcached . . . Output

 

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

Вывод

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