Введение
Разные утилиты, которые используются для кэширования (например, Memcached), могут повышать производительность базы данных путем временного сохранения информации в памяти. Обычно это касается тех записей, которые вы либо недавно запрашивали, либо запрашиваете часто. В этом случае при использовании кэширования уменьшается количество прямых запросов к базе данных.
При использовании систем вроде Memcached крайне важно правильно защитить серверы, где они установлены, иначе атаки на сервер могут иметь очень печальные последствия.
Поэтому в этом руководстве будет рассказано не только о том, как установить, но и как защитить сервер с Memcached.
Требования
Перед тем, как приступить к выполнению инструкций, на вашем сервере должна быть установлена ОС Ubuntu 16.04 с пользователем, который может выполнять команды sudo, и файерволом.
Шаг 1: установка Memcached из официальных репозиториев
Если на вашем сервере еще нет Memcached, то вы можете установить эту утилиту из официальных репозиториев Ubuntu. Сначала необходимо обновить индекс пакетов:
$ sudo apt-get update
Далее установите пакет:
$ sudo apt-get install memcached
Для удобства работы с Memcached можно также установить libmemcached-tools, библиотеку с несколькими полезными инструментами:
$ sudo apt-get install libmemcached-tools
Теперь на вашем сервере Memcached установлен в качестве одного из сервисов, и пора перейти к настройке защиты.
Шаг 2: защита настроек Memcached
Для начала надо проверить, что Memcached слушает localhost 127.0.0.1. Для этого нужно посмотреть настройки в конфигурационном файле, который находится в /etc/memcached.conf.
Откройте /etc/memcached.conf, используя nano:
$ sudo nano /etc/memcached.conf
Потом найдите следующую строчку:
. . . -l 127.0.0.1
Если там так и стоит -l 127.0.0.1 , то ничего изменять не нужно. Однако на всякий случай можно отключить UDP, чтобы злоумышленники не могли это использовать во время атак. Настройка TCP останется нетронутой. В конце файла напишите:
. . . -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 . . .
Шаг 3: добавление авторизованных пользователей
Для того, чтобы добавить авторизованных пользователей в Memcached, можно использовать SASL (Simple Authentication and Security Layer - простой уровень аутентификации и безопасности). Это фреймворк, который разделяет механизмы аутентификации от прикладных протоколов.
Сначала нужно включить поддержку SASL в конфигурационном файле Memcached, а затем перейти к добавлению пользователя.
Настройка поддержки SASL
Проверьте текущее состояние Memcached, используя команду memcstat. Это нужно для того, чтобы в дальнейшем можно было отследить сделанные изменения.
Чтобы убедиться в том, что сервис Memcached запущен и работает, введите команду:
$ memcstat --servers="127.0.0.1"
Вы должны увидеть примерно вот такой вывод:
Server: 127.0.0.1 (11211) pid: 3831 uptime: 9 time: 1520028517 version: 1.4.25 . . .
Теперь нужно включить SASL. Добавьте параметр -S в конфигурационном файле /etc/memcached.conf. Для этого снова откройте файл:
$ sudo nano /etc/memcached.conf
В конце файла добавьте:
. . . -S
Далее найдите и раскомментируйте опцию -vv, благодаря которой вы будете получать подробный отчет в /var/log/memcached. Раскомментированная строка будет выглядеть вот так:
. . . -vv
Сохраните и закройте файл.
Перезапустите сервис Memcached:
$ sudo systemctl restart memcached
Теперь можно посмотреть логи для того, чтобы убедиться, что поддержка SASL включена:
$ sudo journalctl -u memcached
Вы должны увидеть следующую строку:
. . . Mar 31 20:15:39 memcached systemd-memcached-wrapper[2760]: Initialized SASL. . . .
Можно еще раз проверить статус Memcached, но т.к. теперь активен SASL, без аутентификации эта команда не будет выполнена:
$ memcstat --servers="127.0.0.1"
Вы не увидите никакого вывода. Для проверки статуса команды можно ввести команду ниже:
$ echo $?
Она покажет код завершения: любые цифры, кроме 0, говорят о том, что команду выполнить не удалось. В данном случае вы должны увидеть 1, а значит, команда не была выполнена.
Добавление авторизованного пользователя
Теперь можно загрузить пакет sasl2-bin, который содержит программы администрирования базы пользователей SASL. Это позволит создать авторизованного пользователя:
$ sudo apt-get install sasl2-bin
Далее вам нужно создать директорию и файл, который Memcached будет использовать для проверки настроек SASL:
$ sudo mkdir -p /etc/sasl2 $ sudo nano /etc/sasl2/memcached.conf
Добавьте следующие строки в конфигурационный файл SASL:
mech_list: plain log_level: 5 sasldb_path: /etc/sasl2/memcached-sasldb2
Mech_list установлен на plain, это значит, что Memcached будет использовать собственный файл с паролями и сверять текстовый пароль. Также нужно будет указать путь к файлу базы данных пользователя (это будет сделано далее). Сохраните и закройте файл после изменений.
Теперь необходимо создать базу данных SASL с данными пользователя. Для этого используйте команду saslpasswd2 с ключом -c. Использование ключа -f позволит указать путь к базе данных (который также нужен для файла memcached.conf):
$ sudo saslpasswd2 -a memcached -c -f /etc/sasl2/memcached-sasldb2 user
Далее нужно изменить права: пользователь user должен получить права на базу данных SASL.
$ sudo chown memcache:memcache /etc/sasl2/memcached-sasldb2
После этого перезапустите Memcached:
$ sudo systemctl restart memcached
Команда memcstat покажет, работает или нет теперь аутентификация (введите ее со своими данными):
$ memcstat --servers="127.0.0.1" --username=user --password=ваш_пароль
Вывод должен выглядеть примерно вот так:
Server: 127.0.0.1 (11211) pid: 3831 uptime: 9 time: 1520028517 version: 1.4.25 . . .
А значит, Memcached успешно работает с поддержкой SASL и пользовательской авторизацией.
Комментарии