Как обезопасить установки Redis: Важные советы по конфигурации

Защитите Redis с помощью привязки к сети, защищенного режима, ACL или паролей, безопасного доступа к командам, правил брандмауэра, минимальных привилегий и TLS.

Как защитить установки Redis: основные советы по настройке

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

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


1. Сетевая конфигурация: ограничение доступа

Самая первая мера безопасности — контроль сетевых интерфейсов, на которых Redis прослушивает соединения. Многие пакетные установки Redis по умолчанию привязываются к localhost, но образы контейнеров, пользовательские файлы конфигурации и старые развертывания могут отличаться. Всегда проверяйте ваш активный redis.conf, а не предполагайте, что настройки по умолчанию безопасны.

Привязка к конкретным интерфейсам (bind)

Вы должны настроить Redis так, чтобы он прослушивал только необходимые интерфейсы. В большинстве производственных сред это означает привязку только к адресу обратной петли или к конкретному частному IP-адресу, используемому серверами приложений.

Только внутренний или локальный доступ

Если ваш сервер приложений находится на том же хосте, что и Redis, привяжитесь исключительно к адресу обратной петли.

# Фрагмент конфигурации redis.conf
bind 127.0.0.1

Сетевой частный доступ

Если ваши серверы приложений находятся в частном сегменте сети и им нужен сетевой доступ, привяжитесь к этому конкретному частному IP-адресу. Не привязывайте Redis к публичному IP-адресу, выходящему в интернет. Если вам нужен удаленный доступ, поместите его в частную сеть и ограничьте трафик с помощью правил брандмауэра или групп безопасности.

# Укажите конкретные внутренние IP-адреса, которые должны иметь доступ к Redis
bind 192.168.1.100 10.0.0.5

Понимание защищенного режима

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

Если вам необходимо отключить его для конкретной конфигурации, вы можете использовать:

protected-mode no

Предупреждение: Отключайте protected-mode только в том случае, если вы правильно настроили bind, аутентификацию и сетевую фильтрацию.

2. Аутентификация и контроль доступа

После ограничения сетевого доступа следующим уровнем защиты является аутентификация. Клиенты должны иметь возможность взаимодействовать с Redis только при предоставлении действительного пароля или, желательно, с использованием современной системы списков контроля доступа (ACL).

Реализация защиты паролем (requirepass)

Используйте директиву requirepass в вашем файле redis.conf, чтобы обеспечить аутентификацию клиентов. Это действует как глобальный общий секрет для базовой безопасности.

# Установите надежный уникальный пароль
requirepass T4h!S_Is_V3ry_S3cure_P@ss

Для подключения с использованием пароля клиенты должны выполнить команду AUTH:

# Пример использования redis-cli
$ redis-cli
127.0.0.1:6379> AUTH T4h!S_Is_V3ry_S3cure_P@ss
OK
127.0.0.1:6379> PING
PONG

Расширенная безопасность: списки контроля доступа Redis (ACL)

Для производственных сред, работающих на Redis 6.0 и более поздних версиях, ACL являются предпочтительным методом аутентификации. ACL позволяют вам определять нескольких пользователей с конкретными паролями и детальными разрешениями (например, пользователь A может только читать, пользователь B может записывать в определенные пространства ключей).

Конфигурация ACL обычно включает определение пользователей и их правил в redis.conf или отдельном файле ACL:

# Пример определения пользователей ACL в redis.conf или файле aclfile
user default off
user app_reader on >app_read_P@ss ~cache:* +get +scan
user app_writer on >app_write_P@ss ~data:* +set +del

Переименование или отключение опасных команд

Некоторые административные команды (такие как FLUSHALL, CONFIG, KEYS и SHUTDOWN) могут вызвать операционные сбои или раскрыть конфиденциальные детали конфигурации при неправильном использовании. Рекомендуется либо переименовывать эти команды в неочевидные имена, либо полностью их отключать.

Чтобы переименовать команду, используйте rename-command:

# Переименовать команду CONFIG для предотвращения несанкционированных изменений
rename-command CONFIG HIDE_MY_CONFIG

# Полностью отключить FLUSHALL
rename-command FLUSHALL ""

3. Лучшие практики операционной безопасности

Помимо внутренней конфигурации Redis, применение надежных внешних мер операционной безопасности имеет решающее значение для обеспечения полной безопасности.

Применение строгих правил брандмауэра

Независимо от настройки директивы bind, всегда применяйте сетевую фильтрацию с помощью облачных групп безопасности, iptables или аналогичных решений брандмауэра. Порт Redis по умолчанию (6379) должен быть открыт только для конкретных IP-адресов или диапазонов IP-адресов ваших доверенных серверов приложений.

Пример правила брандмауэра (Linux/iptables)

Разрешить входящий трафик на порт 6379 только с известного IP-адреса сервера приложений (192.168.1.50):

# Разрешить конкретный сервер приложений
iptables -A INPUT -p tcp -s 192.168.1.50 --dport 6379 -j ACCEPT

# Запретить остальной входящий трафик Redis
iptables -A INPUT -p tcp --dport 6379 -j DROP

Запуск с минимальными привилегиями

Никогда не запускайте процесс сервера Redis от имени пользователя root. Если злоумышленник скомпрометирует процесс Redis, запуск от root даст ему полный контроль над всей операционной системой.

Создайте выделенного непривилегированного системного пользователя, например redis, затем настройте ваш менеджер служб для запуска процесса Redis от имени этого пользователя. В systemd это обычно обрабатывается в файле модуля с помощью директив User=redis и Group=redis или с помощью пакетной службы, предоставляемой вашим дистрибутивом.

Защита файлов конфигурации и сохраненных данных

Файл redis.conf содержит конфиденциальную информацию, такую как пароль requirepass и сетевые настройки. Убедитесь, что этот файл, а также файлы сохраненных данных (снимки RDB и журналы AOF), защищены ограничительными правами доступа к файлам, предотвращающими несанкционированное чтение или изменение другими пользователями системы.

# Пример рекомендуемых прав доступа
# Только пользователь 'redis' и root должны иметь права на чтение/запись
chown redis:redis /etc/redis/redis.conf
chmod 600 /etc/redis/redis.conf

Внедрение шифрования SSL/TLS

Для сред, где трафик Redis проходит через ненадежный сегмент сети (даже внутренний), внедрите шифрование SSL/TLS. Хотя исторически Redis не имел встроенной поддержки TLS, современные версии (начиная с Redis 6) полностью поддерживают его. Настройка TLS требует создания сертификатов и установки соответствующих директив в redis.conf:

# Включить прослушиватель TLS
tls-port 6379
port 0
tls-auth-clients yes
tls-cert-file /etc/redis/tls/redis.crt
tls-key-file /etc/redis/tls/redis.key
tls-ca-cert-file /etc/redis/tls/ca.crt

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

Сводка основных шагов по обеспечению безопасности

Обеспечение безопасности установки Redis — это многоуровневая задача. Начните с ограничения доступа, затем аутентификации, затем операционных средств контроля:

  1. Ограничьте сетевой доступ: Используйте bind 127.0.0.1 или конкретные частные IP-адреса.
  2. Обеспечьте аутентификацию: Используйте requirepass (базовый) или ACL (расширенный).
  3. Ужесточите команды: Отключите или переименуйте опасные административные команды (FLUSHALL, CONFIG).
  4. Используйте брандмауэры: Разрешайте трафик на порт 6379 только с доверенных серверов приложений.
  5. Минимальные привилегии: Запускайте процесс Redis от имени непривилегированного выделенного пользователя.
  6. Шифруйте трафик: Включите SSL/TLS для сетевых соединений, где это уместно.