Установка и защита Redis на CentOS 8

- Кратко: инструкция по установке, базовой настройке кеша и защите Redis на CentOS 8. Описаны запуск, проверка, настройка maxmemory, включение пароля, переименование опасных команд и дополнительные меры безопасности.
- Для кого: системные администраторы и разработчики, которые хотят надёжно запустить Redis в локальной или серверной среде CentOS 8.
Что это в одну строку: Redis — быстрый in-memory key-value store, подходящий как кеш, брокер сообщений и лёгкая БД.
Требования
- Сервер с установленной CentOS 8.
- Доступ root или пользователь с sudo.
Установка Redis
Пакет Redis доступен в репозитории CentOS 8. Установите командой:
dnf install redis -yПосле установки запустите сервис и включите автозапуск при загрузке:
systemctl start redis
systemctl enable redisПроверьте статус сервиса:
systemctl status redisПример ожидаемого вывода:
Loaded: loaded (/usr/lib/systemd/system/redis.service; disabled; vendor preset: disabled)
Drop-In: /etc/systemd/system/redis.service.d
??limit.conf
Active: active (running) since Tue 2020-09-15 04:52:54 EDT; 6s ago
Main PID: 3076 (redis-server)
Tasks: 4 (limit: 12527)
Memory: 6.6M
CGroup: /system.slice/redis.service
??3076 /usr/bin/redis-server 127.0.0.1:6379
Sep 15 04:52:54 centos8 systemd[1]: Starting Redis persistent key-value database...
Sep 15 04:52:54 centos8 systemd[1]: Started Redis persistent key-value database.По умолчанию Redis слушает порт 6379. Проверка порта:
ss -ant | grep 6379Ожидаемый вывод:
LISTEN 0 128 127.0.0.1:6379 0.0.0.0:*Тест подключения с помощью клиента redis-cli:
redis-cliВы увидите приглашение:
127.0.0.1:6379>Проверка отклика:
127.0.0.1:6379> pingОжидаемый ответ:
PONGНастройка Redis как кеша
Откройте конфигурационный файл:
nano /etc/redis.confДобавьте в конец файла (или измените существующие значения):
maxmemory 128mb
maxmemory-policy allkeys-lruСохраните файл и перезапустите сервис:
systemctl restart redisПримечание: задайте maxmemory исходя из объёма оперативной памяти и требований приложений. Стратегия allkeys-lru удаляет наименее недавно использованные ключи из всех ключей.
Базовая защита: пароль для redis-cli
По умолчанию любая локальная сессия redis-cli может выполнять команды, поэтому стоит включить аутентификацию.
- Откройте конфигурацию:
nano /etc/redis.conf- Найдите строку (может быть закомментирована):
# requirepass foobared- Замените её на безопасную строку пароля (пример в оригинале):
requirepass A D3Fs4%#df- Перезапустите сервис:
systemctl restart redis- Попробуйте подключиться и выполнить INFO без аутентификации:
redis-cli
127.0.0.1:6379> INFO serverВы получите ошибку:
NOAUTH Authentication required.- Аутентификация:
127.0.0.1:6379> AUTH A D3Fs4%#dfОжидаемый ответ:
OK- После AUTH команда INFO вернёт данные сервера, например часть вывода:
# Server
redis_version:5.0.3
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:28849dbea6f07cc8
redis_mode:standalone
os:Linux 4.18.0-193.14.2.el8_2.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll
executable:/usr/bin/redis-server
config_file:/etc/redis.confВажно: пароль хранится в конфигурационном файле в открытом виде — ограничьте права доступа к этому файлу и рассмотрите использование системных секрет-менеджеров для продакшн-сред.
Переименование опасных команд
Некоторые команды, например CONFIG, могут раскрыть конфигурацию и пароль. Лучше переименовать их.
- Откройте /etc/redis.conf:
nano /etc/redis.conf- Найдите строку (возможно закомментированную):
# rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52- Замените на уникальное имя, недоступное злоумышленнику, например:
rename-command CONFIG hitredis- Перезапустите сервис:
systemctl restart redis- Попробуйте вызвать старую команду после аутентификации:
redis-cli
127.0.0.1:6379> AUTH A D3Fs4%#df
127.0.0.1:6379> config get requirepassОжидаемая ошибка:
(error) ERR unknown command `config`, with args beginning with: `get`, `requirepass`,- Выполнение переименованной команды:
127.0.0.1:6379> hitredis get requirepassВернёт пароль (если пользователь авторизован):
1) "requirepass"
2) "A D3Fs4%#df"Примечание: переименование команд помогает уменьшить риск автоматических эксплойтов, но не заменяет сетевых и аутентификационных мер.
Дополнительные меры безопасности и эксплуатация
- Привязка к интерфейсу: в /etc/redis.conf укажите bind 127.0.0.1 или конкретный приватный IP, чтобы запретить доступ снаружи.
- protected-mode: держите protected-mode yes для неаутентифицированных инстансов.
- Защита файлы: chmod 640 /etc/redis.conf; владелец root.
- Firewall: откройте порт 6379 только для доверенных хостов (firewalld или iptables):
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.0/24" port protocol="tcp" port="6379" accept'
firewall-cmd --reload- Persistence: решите стратегию RDB (snapshot) или AOF (append-only file) в зависимости от требований устойчивости и восстановления.
- Бэкапы: регулярно копируйте dump.rdb и/или appendonly.aof на внешний хранилище.
- Мониторинг: используйте INFO, slowlog, Redis Exporter + Prometheus и алерты по росту памяти и latency.
- Логи: пересмотрите systemd-журнал и лог Redis по проблемам.
Технические подсказки и примеры конфигурации
Фрагменты, которые часто меняют в /etc/redis.conf:
# Бинд на localhost
bind 127.0.0.1
# Включить защищённый режим
protected-mode yes
# Ограничение памяти
maxmemory 128mb
maxmemory-policy allkeys-lru
# Аутентификация
requirepass A D3Fs4%#df
# Переименование опасной команды
rename-command CONFIG hitredisКритерии приёмки
- Redis установлен и сервис active (systemctl status redis).
- redis-cli отвечает PONG на ping.
- maxmemory и политика применены (проверить через CONFIG GET maxmemory и maxmemory-policy или INFO).
- requirepass задан и AUTH возвращает OK; до AUTH команды INFO вызывают NOAUTH.
- Переименованная команда CONFIG недоступна по старому имени.
Роль‑ориентированные контрольные списки
Sysadmin:
- Установить пакет, запустить и включить сервис.
- Настроить firewall и права на файл конфигурации.
- Настроить бэкапы и мониторинг.
Разработчик:
- Настроить клиентскую библиотеку на использование пароля.
- Тестировать поведение кеша при низкой памяти (eviction).
- Обработать ошибки подключения и таймауты.
DevSecOps:
- Проанализировать открытые порты и конфигурацию привязки.
- Рассмотреть использование TLS (stunnel/обёртки) и секрет‑менеджера.
Отказоустойчивость и откат (runbook)
Если после изменения конфигурации Redis перестаёт стартовать:
- Проверить journalctl -u redis -b для ошибок синтаксиса конфигурации.
- Вернуть рабочую копию /etc/redis.conf из бэкапа.
- systemctl restart redis и проверить статус.
- Если данные повреждены, восстановить dump.rdb из бэкапа.
Тестовые сценарии и приёмка
- Функциональный: подключение, AUTH, PING, SET/GET ключа.
- Нагрузочный: симулировать рост ключей и проверить поведение maxmemory-policy.
- Безопасность: попытаться выполнить CONFIG без AUTH и по старому имени команды.
Частые ошибки и способы устранения
- “NOAUTH Authentication required.” — нужно выполнить AUTH с правильным паролем.
- Сервер слушает только на 127.0.0.1 — проверьте bind и firewall.
- Данные исчезают при нехватке памяти — проверьте maxmemory-policy и логи eviction.
Короткая методология включения Redis в проект
- Развернуть инстанс в изолированной сети.
- Включить requirepass и bind на приватный интерфейс.
- Настроить maxmemory и политику eviction.
- Настроить мониторинг и бэкапы.
- Тестировать и документировать поведение приложений при отказах.
Заключение
Вы успешно установили Redis на CentOS 8, настроили его как кеш, включили базовую защиту паролем и переименовали потенциально опасную команду. Дополните инструкцию шифрованием трафика (TLS) и централизованным хранением секретов для продакшн‑развёртывания.
Важно: не храните секреты в системах с публичным доступом и регулярно пересматривайте политику доступа.
Ключевые команды для быстрого копирования
dnf install redis -y
systemctl start redis
systemctl enable redis
systemctl restart redis
redis-cli
ss -ant | grep 6379
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.0/24" port protocol="tcp" port="6379" accept'
firewall-cmd --reloadЕсли хотите, могу помочь: подобрать параметры maxmemory для конкретного объёма RAM, автоматизировать развёртывание через Ansible или подготовить конфиг с TLS.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента