Введение
Кэширование - важная часть любого веб-проекта, потому что это напрямую влияет на время отклика сервера. Memcached - это утилита, которая позволяет кэшировать, хранить в оперативной памяти различные данные. Фактически это большая хэш-таблица, доступная по сетевому протоколу. Использование Memcached позволяет значительно увеличить скорость загрузки информации.
В этом руководстве будет рассказано о том, как установить и как защитить сервер с Memcached.
Требования
Перед тем, как приступить к выполнению дальнейших действий, убедитесь, что на вашем сервере установлена ОС Ubuntu 18.04 с файерволом, а также есть пользователь, который может выполнять команды sudo.
Шаг 1: установка Memcached из официальных репозиториев
Memcached можно установить из официальных репозиториев Ubuntu. Для этого сначала обновите локальный индекс пакетов:
$ sudo apt update
А потом установите Memcached:
$ sudo apt install memcached
Можно сразу установить библиотеку libmemcached-tools, в которой есть несколько полезных инструментов для работы с сервером:
$ sudo apt install libmemcached-tools
Установка Memcached выполнена, и теперь надо перейти к безопасности.
Шаг 2: защита настроек Memcached
Сначала надо проверить настройки в конфигурационном файле, который находится в /etc/memcached.conf. Откройте его в nano или другом редакторе:
$ sudo nano /etc/memcached.conf
Найдите вот эту строчку:
. . . -l 127.0.0.1 . . .
Это настройка по умолчанию, которую менять не нужно. Однако из соображений безопасности в конце файла можно добавить строчку, отключающую протокол UDP (но не влияющую на работу протокола TCP):
-U 0
После этого сохраните и закройте файл.
Теперь сервис нужно перезапустить, чтобы изменения вступили в силу:
$ 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 2279/memcached . . .
Шаг 3: добавление авторизованных пользователей
Для добавления авторизованных пользователей в Memcached можно использовать SASL (расшифровывается как Simple Authentication and Security Layer - простой уровень аутентификации и безопасности). Этот фреймворк позволяет разделить механизмы аутентификации от прикладных протоколов. К тому же он предоставляет слой защиты данных. Более подробно о нем можно прочитать в Википедии.
Настройка поддержки SASL
Сначала нужно использовать команду memcstat для того, чтобы проверить текущее состояние Memcached. В дальнейшем это позволит отследить изменения, которые будут внесены в конфигурационные файлы.
Введите команду:
$ memcstat --servers="127.0.0.1"
Вы должны увидеть вот такой вывод:
Server: 127.0.0.1 (11211) pid: 2279 uptime: 65 time: 1546620611 version: 1.5.6 . . .
Теперь нужно открыть конфигурационный файл:
$ sudo nano /etc/memcached.conf
В конце файла добавьте -S для того, чтобы включить SASL:
. . . -S
И раскомментируйте строку -vv:
. . . -vv
Это нужно для того, чтобы в /var/log/memcached формировался подробный отчет с предупреждениями, ошибками и другой важной информацией.
После этого сохраните и закройте файл.
Снова перезапустите Memcached:
$ sudo systemctl restart memcached
Посмотрите логи, чтобы проверить, включен ли SASL:
$ sudo journalctl -u memcached
Вы должны увидеть такую строку:
. . . Jan 31 15:34:28 memcached systemd-memcached-wrapper[2310]: Initialized SASL. . . .
Еще раз введите команду:
$ memcstat --servers="127.0.0.1"
Так как теперь включен SASL, команда не будет выполнена без аутентификации.
Добавление аутентификации пользователя
Далее нужно загрузить пакет sasl2-bin, в нем есть программы администрирования базы данных пользователей SASL.
$ sudo apt install sasl2-bin
Теперь создайте директорию и файл с настройками SASL для Memcached:
$ sudo mkdir /etc/sasl2 $ sudo nano /etc/sasl2/memcached.conf
Добавьте в этот файл следующее:
mech_list: plain log_level: 5 sasldb_path: /etc/sasl2/memcached-sasldb2
Если в mech_list, то есть в списке механизмов прописан plain, это значит, что cервер будет проверять идентификатор аутентификации и пароль на соответствие своей базе и наличие у данного идентификатора аутентификации права на идентификатор авторизации. Это аутентификация посредством открытого текстового пароля; путь к файлу будет указан позже. Сохраните и закройте этот файл.
Следующий шаг - создание базы данных SASL с данными вашего пользователя. Команда saslpasswd2 используется для занесения паролей в БД; ключ -c используется для создания записи для указанного идентификатора, если она не существовала ранее. Ключ -f позволяет указать путь к базе данных.
$ sudo saslpasswd2 -a memcached -c -f /etc/sasl2/memcached-sasldb2 имя_пользователя
Теперь нужно изменить права:
$ sudo chown memcache:memcache /etc/sasl2/memcached-sasldb2
И перезапустить Memcached:
$ sudo systemctl restart memcached
Снова введите команду memcstat, но на этот раз с указанными до этого данными:
$ memcstat --servers="127.0.0.1" --username=имя_пользователя --password=пароль
Вы должны увидеть вывод:
Server: 127.0.0.1 (11211) pid: 2772 uptime: 31 time: 1546621072 version: 1.5.6 Ubuntu . . .
Если вы его увидели, значит, Memcached и SASL работают корректно.
Комментарии