Redis – хранилище для структур данных вида "ключ-значение". Данные в Redis сохраняются в оперативной памяти, благодаря чему он отличается быстродействием и высокой производительностью; однако также есть возможность сохранения данных на диск.
В инструкции ниже мы рассмотрим установку и базовую настройку Redis на сервере с Ubuntu 18.04.
Установка Redis
Для установки подключитесь к серверу по SSH и выполните команды:
sudo apt update sudo apt install redis-server
После завершения установки для того, чтобы управлять Redis через systemd, необходимо внести правки в конфигурационный файл.
Откройте его для редактирования:
sudo nano /etc/redis/redis.conf
Найдите строку supervised no
и замените ее на supervised systemd
.
Закройте редактор, сохранив изменения (в nano это комбинация Ctrl X -> Y -> Enter).
После перезапустите службу, чтобы изменения вступили в силу:
sudo systemctl restart redis.service
Проверка работы
Выполним базовую проверку функционирования Redis.
Подключитесь к оболочке Redis:
redis-cli
Задайте любой ключ для теста:
set ключ значение # Например: 127.0.0.1:6379> set testkey timeweb
Запросите значение заданного ключа:
127.0.0.1:6379> get testkey
В выводе должно быть указанное вами значение.
Для выхода из консоли Redis можно использовать exit или quit:
127.0.0.1:6379> exit
Настройки безопасности
Хотя после установки Redis уже готов к работе, рекомендуется дополнительно выполнить несколько настроек, которые повысят его безопасность.
Привязка к localhost
Сначала нужно убедиться, что Redis доступен только с localhost. Для этого снова откройте конфигурационный файл:
sudo nano /etc/redis/redis.conf
Найдите в нем строку:
bind 127.0.0.1 ::1
Убедитесь, что эта запись присутствует и раскомментирована.
Если потребовалось внести изменения (добавить саму строку или убрать знак комментария), не забудьте после сохранить изменения (Ctrl X -> Y -> Enter) и перезапустить Redis:
sudo systemctl restart redis.service
Аутентификация по паролю
Дополнительно обезопасить Redis можно, установив пароль. При этом очень важно использовать для Redis сложный и длинный пароль. Рекомендуется использовать для его генерации утилиту openssl.
Можно воспользоваться командой:
openssl rand 60 | openssl base64 -A
Будет сформирован пароль вида:
G0YX33FfbjxzeGD5YghLhBr3f1vaGsY173RJ21w2x3BbMUp57AnNQFedZXUcRIQGB3iH54QmGTve8QA
Его необходимо прописать в конфигурационном файле.
Откройте файл:
sudo nano /etc/redis/redis.conf
Найдите в нем строку:
# requirepass foobared
Можно воспользоваться поиском в nano (сочетание клавиш Ctrl W) и найти нужный раздел по словам "requirepass foobared" или "Require clients to issue AUTH <PASSWORD>".
Раскомментируйте строку и укажите вместо foobared
ваш пароль, полученный выше. Например:
requirepass G0YX33FfbjxzeGD5YghLhBr3f1vaGsY173RJ21w2x3BbMUp57AnNQFedZXUcRIQGB3iH54QmGTve8QA
Сохраните изменения в файле, после чего перезапустите Redis:
sudo systemctl restart redis.service
Проверьте, что пароль успешно установлен. Для этого подключитесь к консоли Redis:
redis-cli info
И попробуйте установить любой ключ:
127.0.0.1:6379> set key 1
Redis должен сообщить об ошибке и необходимости пройти аутентификацию:
(error) NOAUTH Authentication required.
Выполните:
auth ваш_пароль
Если все корректно, будет выведено сообщение OK. Далее вы можете работать с Redis.
Переименование команд
Еще одна настройка безопасности, которую имеет смысл использовать - это переименование "опасных" команд, выполнение которых может привести к потере данных и другим нежелательным последствиям.
Как правило, рекомендуется переименовать следующие команды:
FLUSHDB FLUSHALL KEYS PEXPIRE DEL CONFIG SHUTDOWN BGREWRITEAOF BGSAVE SAVE SPOP SREM RENAME DEBUG
Новое название команды должно быть таким, чтобы его сложно было угадать, но чтобы вы смогли легко его запомнить. Те из команд, которые вы не планируете использовать, вместо переименования можно отключить.
Переименование выполняется также в конфигурационном файле. Откройте его для редактирования:
sudo nano /etc/redis/redis.conf
Найдите соответствующий раздел, выполнив поиск (сочетание клавиш Ctrl W) по фразе "Command renaming".
Для переименования команды укажите ее новое название, например:
rename-command CONFIG CONFx312
Для отключения команды оставьте значение пустым:
rename-command FLUSHDB "" rename-command FLUSHALL ""
Сохраните изменения в файле и перезапустите Redis.
Для проверки подключитесь к консоли redis-cli и попробуйте выполнить одну из отключенных или переименованных команд - должна быть выведена ошибка. При этом использование команды под ее новым заданным именем должно отрабатывать корректно.