Перейти к содержимому

Redis: установка и защита

Поставить Redis для кэша и очередей, закрыть его от внешней сети, включить пароль или ACL и ограничить память.

Уровень
Средний
Время чтения
3 мин чтения
Обновлено
Проверено на
Ubuntu 22.04, Ubuntu 24.04, Debian 12
Содержание
  1. Установка
  2. Только локальный доступ
  3. Пароль и пользователи
  4. Ограничение памяти
  5. Проверьте результат
  6. Частые ошибки

Redis хранит данные в памяти и отвечает за доли миллисекунды — поэтому его используют для кэша, сессий и очередей задач. Открытый в интернет Redis без пароля — одна из частых причин взлома серверов, поэтому настройка доступа здесь важнее установки.

Установка

bash
$ apt update$ apt install -y redis-server$ systemctl enable --now redis-server$ redis-cli ping

Ответ PONG значит, что сервер работает. Конфигурация — /etc/redis/redis.conf.

Только локальный доступ

Проверьте, что в redis.conf остались значения по умолчанию:

/etc/redis/redis.conf
bind 127.0.0.1 -::1protected-mode yesport 6379

protected-mode дополнительно отклоняет внешние подключения, если пароль не задан. Выключать его не нужно.

Пароль и пользователи

Самый простой вариант — общий пароль для пользователя default:

/etc/redis/redis.conf
requirepass длинный-случайный-пароль

Сгенерировать пароль: openssl rand -base64 32. Если приложений несколько, удобнее ACL — у каждого свой пользователь и доступ только к своим ключам:

/etc/redis/redis.conf
user default offuser admin on >пароль-администратора ~* &* +@alluser app on >пароль-приложения ~app:* +@all -@dangerous

Пользователь app видит только ключи с префиксом app: и не может выполнять опасные команды вроде FLUSHALL, CONFIG и KEYS.

Ограничение памяти

Без лимита Redis займёт всю память, и система начнёт убивать процессы. Для кэша задайте потолок и политику вытеснения:

/etc/redis/redis.conf
maxmemory 256mbmaxmemory-policy allkeys-lru
ПолитикаКогда подходит
allkeys-lruЧистый кэш: вытесняются давно не используемые ключи
volatile-lruСмешанные данные: вытесняются только ключи с TTL
noevictionОчереди и важные данные: при заполнении запись возвращает ошибку
bash
$ systemctl restart redis-server

Проверьте результат

bash
$ ss -tlnp | grep 6379$ redis-cli ping$ redis-cli --user app --pass 'пароль-приложения' ping$ redis-cli --user admin --pass 'пароль-администратора' INFO memory | grep maxmemory

Первая команда должна показать только 127.0.0.1 и ::1. redis-cli ping без пароля после настройки должен вернуть ошибку NOAUTH.

Частые ошибки

  • В журнале предупреждение про vm.overcommit_memory — Redis советует включить его для фонового сохранения: sysctl vm.overcommit_memory=1 и то же значение в /etc/sysctl.d/.
  • Приложение получает «OOM command not allowed» — достигнут maxmemory при политике noeviction.
  • Redis в Docker опубликован как «6379:6379» — порт открыт в интернет в обход UFW. Публикуйте на 127.0.0.1 или не публикуйте вовсе.

Дочитайте до конца — статья засчитается в обучении автоматически.

  • Redis
  • кэш
  • очереди
  • ACL
  • in-memory

Статья помогла?