Redis
Redis — это быстрое хранилище данных типа «ключ‑значение», известное своей гибкостью, производительностью и широким выбором поддерживаемых языков. В этом руководстве описывается установка, настройка и обеспечение безопасности Redis на сервере Ubuntu 22.
Будем устанавливать Redis на Ubuntu Server 22. Нам нужен пользователь без root прав, но с привилегиями sudo
.
Установка Redis
-
Обновите списки репозиториев:
sudo apt-get update
-
Для установки актуальной версии Redis, добавьте репозиторий с новой версией:
sudo apt install lsb-release curl gpg curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list
-
Далее установите Redis новой версии:
sudo apt-get update sudo apt-get install redis-server
-
После установки убедитесь, что сервер запущен:
ps ax | grep redis 335 ? Ssl 0:00 /usr/bin/redis-server 127.0.0.1:6379
-
Проверьте подключение к базе. По умолчанию для доступа к базе пароль не требуется:
redis-cli 127.0.0.1:6379> PING PONG 127.0.0.1:6379>
-
Добавьте сервис в список приложений, запускаемых автоматически:
sudo systemctl enable redis-server
Установка завершена.
Настройка безопасности
Установка пароля
По умолчанию для доступа к Redis не требуется пароль. Для настройки прав доступа отредактируйте конфигурационный файл /etc/redis/redis.conf
. Из-за того, что Redis - высокопроизводительная база данных, позволяющая злоумышленнику проверять до 150 000 паролей в секунд, рекомендуется использовать надежный пароль.
Сгенерируем пароль из 60 символов
openssl rand 60 | openssl base64 -A
KBXBWCd1Kynbkdbo6IxEwx5fMBhutjj3YTT1J29rKoUjCnRcvo4uxYcptydQpqAjintegDhkYyCJHvx2
Укажите этот пароль в файле /etc/redis/redis.conf
в разделе SECURITY
в команде requirepass
:
################################## SECURITY ###################################
# Require clients to issue AUTH <PASSWORD> before processing any other
# commands. This might be useful in environments in which you do not trust
# others with access to the host running redis-server.
#
# This should stay commented out for backward compatibility and because most
# people do not need auth (e.g. they run their own servers).
#
# Warning: since Redis is pretty fast an outside user can try up to
# 150k passwords per second against a good box. This means that you should
# use a very strong password otherwise it will be very easy to break.
#
# requirepass foobared
requirepass KBXBWCd1Kynbkdbo6IxEwx5fMBhutjj3YTT1J29rKoUjCnRcvo4uxYcptydQpqAjintegDhkYyCJHvx2
Переименование команд
Для повышения уровня безопасности можно использовать переименование команд либо запрет выполнения команд для работы с базой данных.
Чтобы переименовать команду, дайте ей другое имя, как показано в приведенных ниже примерах. Переименованные команды должно быть трудно подобрать, но легко запомнить:
. . .
# rename-command CONFIG ""
rename-command SHUTDOWN SHUTDOWN_MENOT
rename-command CONFIG ASC12_CONFIG
. . .
. . .
# It is also possible to completely kill a command by renaming it into
# an empty string:
#
rename-command FLUSHDB ""
rename-command FLUSHALL ""
rename-command DEBUG ""
. . .
sudo systemctl restart redis-server
Сетевой доступ
По умолчанию Redis слушает только 127.0.0.1. Изменим настройки, чтобы можно было подключаться с других хостов.
Отредактируем файл /etc/redis/redis.conf
. Найдем в нем строчку bind 127.0.0.1 ::1
и закомментируем её:
# IF YOU ARE SURE YOU WANT YOUR INSTANCE TO LISTEN TO ALL THE INTERFACES
# JUST COMMENT THE FOLLOWING LINE.
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#bind 127.0.0.1 ::1
Перезапустим Redis для применения настроек:
sudo systemctl restart redis-server
sudo netstat -tulpn | grep redis
tcp 0 0 0.0.0.0:6379 0.0.0.0:\* LISTEN 1562/redis-server \*
tcp6 0 0 :::6379 :::\* LISTEN 1562/redis-server \*
Установка лимита на память RAM
Теперь установим лимит на использование оперативной памяти и изменим механизм вытеснения ключей при заполнении этого объема памяти.
Это делается в секции MEMORY MANAGEMENT файла /etc/redis/redis.conf
:
# maxmemory <bytes>
# maxmemory-policy noeviction
- maxmemory - указывает на максимальный объем памяти, что можно задействовать. Указывается в байтах, но можно указывать и краткие форматы (kb, mb, gb). Например
maxmemory 4gb
- maxmemory-policy - определяет политику вытеснения ключей, при заполнении памяти.Могут быть разные значения:
- noeviction — не вытеснять данные, то есть если память закончилась, при попытке записи в базу данных выдавать ошибку (по умолчанию);
- volatile-lru — удалить наименее используемые в последнее время ключи с настройкой expire;
- allkeys-lru — удалить наименее используемые в последнее время ключи вне зависимости от настройки expire;
- volatile-lfu — удалить наименее часто используемые ключи с настройкой expire;
- allkeys-lfu — удалить наименее часто используемые ключи вне зависимости от настройки expire;
- volatile-random — удалить случайные ключи с настройкой expire;
- allkeys-random — удалить случайные ключи вне зависимости от настройки expire;
- volatile-ttl — удалить ключи, срок действия которых истекает быстрее остальных (то есть время жизни которых приближается к expire).