Системы кэширования объектов памяти, такие как 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.