Redis хранит данные в памяти и отвечает за доли миллисекунды — поэтому его используют для кэша, сессий и очередей задач. Открытый в интернет Redis без пароля — одна из частых причин взлома серверов, поэтому настройка доступа здесь важнее установки.
Установка
$ apt update$ apt install -y redis-server$ systemctl enable --now redis-server$ redis-cli pingОтвет PONG значит, что сервер работает. Конфигурация — /etc/redis/redis.conf.
Только локальный доступ
Проверьте, что в redis.conf остались значения по умолчанию:
bind 127.0.0.1 -::1protected-mode yesport 6379protected-mode дополнительно отклоняет внешние подключения, если пароль не задан. Выключать его не нужно.
Пароль и пользователи
Самый простой вариант — общий пароль для пользователя default:
requirepass длинный-случайный-парольСгенерировать пароль: openssl rand -base64 32. Если приложений несколько, удобнее ACL — у каждого свой пользователь и доступ только к своим ключам:
user default offuser admin on >пароль-администратора ~* &* +@alluser app on >пароль-приложения ~app:* +@all -@dangerousПользователь app видит только ключи с префиксом app: и не может выполнять опасные команды вроде FLUSHALL, CONFIG и KEYS.
Ограничение памяти
Без лимита Redis займёт всю память, и система начнёт убивать процессы. Для кэша задайте потолок и политику вытеснения:
maxmemory 256mbmaxmemory-policy allkeys-lru| Политика | Когда подходит |
|---|---|
| allkeys-lru | Чистый кэш: вытесняются давно не используемые ключи |
| volatile-lru | Смешанные данные: вытесняются только ключи с TTL |
| noeviction | Очереди и важные данные: при заполнении запись возвращает ошибку |
$ systemctl restart redis-serverПроверьте результат
$ 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 или не публикуйте вовсе.