...

Безопасность Redis: как избежать открытых портов и незащищенных экземпляров

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

Центральные пункты

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

  • Сеть Изолировать: никогда не открывать Redis для общего доступа, доступ только из частных сетей.
  • Конфигурация Оптимизация: правильно настроить bind, protected-mode, Ports и команды переименования.
  • Авторизация принудительно: requirepass плюс ACL для точной настройки прав доступа.
  • Шифрование Включить: TLS для транспорта, шифрование на уровне ОС для обеспечения постоянства соединения.
  • Мониторинг & Обновления: журналы, оповещения, резервные копии, установка регулярных версий.

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

Открытые порты: риски и типичные способы атак

Открытый стандартный порт 6379 действует как табличка с надписью „Проверьте здесь, пожалуйста“. Злоумышленники автоматически сканируют Интернет и проверяют незащищенные Экземпляры за считанные секунды. Без аутентификации они считывают данные, устанавливают ключи или загружают модули. На практике это часто приводит к утечке данных или запуску криптомайнинга. Я устраняю этот риск, строго ограничивая доступ и разрешая подключение только с определённых исходных адресов.

Правильно настроить отключение сети и привязки

Я подключаю Redis localhost или на частный IP-адрес во внутренней подсети. Таким образом, архитектура сети предотвращает прямой доступ к сервису из публичного Интернета. В распределенных конфигурациях я помещаю узлы в частную VLAN или VPC и предоставляю доступ только через VPN или внутренние пиринговые соединения. Таким образом, каждый пакет остается в пределах контролируемых сегментов. Это простое разделение значительно снижает риск.

Настройки в файле redis.conf: bind, Port, protected-mode

Я начинаю с redis.conf, ведь всего несколько строк часто играют решающую роль. С помощью bind 127.0.0.1 или bind 127.0.0.1 10.0.x.y я ограничиваю интерфейсы. Я изменяю стандартный порт, чтобы затруднить тривиальные сканирования, и оставляю параметр `protected-mode yes` включённым. Кроме того, я переименовываю опасные команды или отключаю их. При частых ошибках в настройках мне помогает следующая таблица.

Настройка Риск в случае неправильной настройки Рекомендуемое действие Пример
bind Публичные Доступность для каждого хоста Привязать только к localhost/частному IP-адресу bind 127.0.0.1 10.0.1.50
порт Простое сканирование на 6379 Указать альтернативный порт порт 6389
protected-mode Неограниченный доступ при открытом IP-АДРЕС Оставить активным protected-mode yes
команда переименования Злоупотребление критическим Команды Переименовать или отключить команда переименования CONFIG „“
tls-port/port Открытый текст—Трафик доступный Использовать только порт TLS tls-порт 6379 / порт 0

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

Последовательное использование аутентификации и списков контроля доступа (ACL)

Я ставлю сильную Аутентификация всегда, даже во внутренних сетях. С помощью requirepass я принудительно запускаю процедуру аутентификации (AUTH-handshake) и регулярно меняю пароли. Начиная с Redis 6 я использую списки контроля доступа (ACL): так я могу создавать пользователей, разрешать только необходимые команды и ограничивать области ключей. Это позволяет чётко разделить доступ к производственной среде, админ-среде и аналитике. Меньше прав — меньше ущерба в случае чрезвычайной ситуации.

Нейтрализация опасных команд

Многие атаки начинаются с мощных Команды такие как CONFIG, MODULE LOAD или SLAVEOF/REPLICAOF. Я ограничиваю доступ стандартных пользователей с помощью ACL и отключаю опасные команды с помощью rename-command, устанавливая для них пустую строку. Таким образом я устраняю целые пути для атак. Там, где функции действительно необходимы, я документирую их и ограничиваю доступ к ним только учетными записями администраторов. Таким образом, инстанс остается управляемым и безопасным.

Включить транспортное шифрование с помощью TLS

Я включаю TLS, чтобы никто не смог Трафик может просматривать или изменять данные. В настройках я задаю параметр tls-port, отключаю порт открытого текста с помощью параметра port 0 и указываю сертификат, ключ и центр сертификации. По желанию я проверяю сертификаты клиентов, чтобы дополнительно подтвердить легитимность доступа к компьютерам. Современные клиенты без особых проблем поддерживают протокол TLS. После этого все соединения проходят по безопасному каналу.

Сделать расшифровку данных в режиме ожидания невозможной

Что касается файлов сохранения данных, я использую Шифрование файловой системы. RDB и AOF в таком случае надежно защищены на диске, даже если кто-то попытается скопировать данные с хранилища. Конфиденциальные значения я дополнительно шифрую в приложении, прежде чем передавать их в Redis. Благодаря этому мне не нужно хранить данные в открытом виде в кэше. Это снижает риск в случае кражи или некорректного резервного копирования.

Сетевая безопасность и брандмауэры на практике

Я включаю брандмауэр хоста и разрешаю Redis-Порт только для определённых диапазонов IP-адресов. В облаке я дополняю это с помощью групп безопасности, которые точно определяют протоколы, порты и исходные сети. Кроме того, я регулярно провожу сканирование портов, чтобы обнаружить забытые открытые порты. Я отключаю ненужные службы, чтобы не оставались открытыми «теневые» порты. Практическое руководство по этой теме ты найдёшь здесь: Настройки брандмауэра.

Внедрение мониторинга, ведения журналов и обновлений

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

Роли, права и рабочие процессы

Я запускаю Redis с помощью Пользователь службы без прав root, чтобы в случае взлома не пострадала вся система. Я строго разделяю роли: администраторы, разработчики и операторы получают только те права, которые им необходимы. Учётные записи приложений находятся в отдельных профилях ACL и видят только свои префиксы ключей. Я тщательно документирую все изменения, чтобы облегчить проведение аудитов. Такая структура обеспечивает порядок и снижает риск ошибочных действий.

Безопасный выбор хостинговых сред

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

Безопасная эксплуатация репликации, кластеров и Sentinel

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

  • Репликация: Я ставлю replica-read-only yes, чтобы реплики не допускали записи. Для аутентификации я сохраняю masteruser и masterauth на репликах и использую для этого собственных пользователей ACL с минимальными правами.
  • Устаревшие данные: С помощью replica-serve-stale-data no Я предотвращаю ситуацию, при которой изолированная реплика предоставляет устаревшие данные. Это обеспечивает целостность данных и сокращает площадь атаки в разделах.
  • Кластер: Я активирую tls-cluster yes, чтобы Gossip-Bus работал в зашифрованном режиме. Кроме того, я устанавливаю cluster-announce-ip, порт-объявления-кластера и порт шины оповещений кластера на внутренние адреса/порты. Таким образом я предотвращаю объявление узлами своих публичных IP-адресов.
  • Sentinel: Sentinel также работает только в частных сетях. Для контролируемых мастер-серверов я использую sentinel auth-user и sentinel auth-pass. Я не открываю доступ к интерфейсу администрирования извне и разрешаю доступ только из определенных диапазонов IP-адресов операторов.
  • Доступность против безопасности: я провожу калибровку мин-копий-для-записи и min-replicas-max-lag, чтобы в случае частичного сбоя доступ на запись осторожно ограничивался. Хотя в первую очередь это служит для обеспечения согласованности, но также предотвращает злоупотребления при сбоях в сети.

Защита от DoS-атак и защита ресурсов в настройках

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

  • maxclients: Я ограничиваю количество одновременных подключений до реалистичного значения с запасом. Таким образом я предотвращаю перегрузку системы из-за спама подключений.
  • ограничение буфера вывода клиентаДля нормальный, pubsub и реплика Я устанавливаю жесткие ограничения. Это защищает от безудержного роста объема памяти из-за медленно работающих устройств.
  • тайм-аут и tcp-keepalive: Я автоматически отключаю неактивные соединения, чтобы «зомби-соединения» не занимали ресурсы.
  • пороговое значение мониторинга задержки и slowlog: Я активирую точки мониторинга, чтобы на раннем этапе выявлять признаки злоупотреблений (например, сканирование KEYS). Оповещения о необычно длительном выполнении команд помогают в раннем выявлении таких случаев.
  • максимальный объем памяти и политика: я устанавливаю максимальный объем памяти-предел и подходящая политика вытеснения. Это не является функцией безопасности как таковой, но защищает всю среду от нехватки памяти (OOM) и аварийных перезапусков.

Дизайн ACL: практичные модели и надежное хранение

Я считаю, что ACL просты, воспроизводимы и поддаются версионированию. Я не только задаю правила во время выполнения, но и сохраняю их в файле, присваивая ему ограничительные права доступа.

  • База: Я отключаю пользователя по умолчанию (по умолчанию для пользователя — выключено). Для приложений я создаю специальных пользователей, которым предоставляются только те категории команд, которые действительно необходимы (+@read, +@write, -@dangerous).
  • Области применения: Я ограничиваю ключевые области с помощью префиксов, например,. ~app:*. Таким образом, приложение не сможет случайно затронуть чужие пространства имён.
  • Пример: пользовательское приложение на >S3cur3P@ss ~app:* +@read +@write -@dangerous -config -module -eval -evalsha и отдельный администраторский аккаунт с +@all, доступ к которому возможен только через хосты «Бастион».
  • Настойчивость: Я пользуюсь aclfile /etc/redis/users.acl и зафиксируйте права доступа к файлу на уровне 600. Изменения я сохраняю с помощью ACL SAVE и зафиксируй их в журнале изменений.
  • Вращение: Я регулярно меняю пароли и присваиваю версии изменениям списка контроля доступа (ACL), чтобы в случае инцидента можно было быстро восстановить прежнее состояние.

Проверка скриптов и модулей

Я уменьшаю площадь атаки Скрипты Lua и Модули Последовательно. Ненужные функции удаляются, а опасные команды становятся недоступными для пользователей приложения.

  • EVAL — только при необходимости: Я запрещаю пользователям, не являющимся администраторами, доступ к EVAL и EVALSHA. В противном случае скрипты будут запускаться с правами вызывающего пользователя и смогут перемещать огромные объемы данных.
  • Ограничения LuaС lua-time-limit я предотвращаю длительную блокировку сервера из-за некорректных скриптов. В крайнем случае я прерываю работу с помощью SCRIPT KILL от.
  • Закалка модулей: ЗАГРУЗКА МОДУЛЯ Я отключаю это с помощью команда переименования или разрешить это только администраторам. Модули я загружаю исключительно при запуске из надежного пути, защищенного от записи.
  • Опасные категории: Вместо того чтобы блокировать отдельные команды, я использую -@dangerous целые группы риска (например, DEBUG, CONFIG, MODULE, SHUTDOWN). Это удобно и надежно.

Безопасная настройка контейнерных систем и Kubernetes

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

  • Сетевые политики: Я разрешаю обмен данными между подсистемами только между открытыми пространствами имён/развертываниями. Сервисы Redis работают внутри системы; NodePort и LoadBalancer не выходят в Интернет.
  • Безопасность Pod: Redis работает runAsNonRoot, с readOnlyRootFilesystem и минимальные возможности Linux. Я включаю профили Seccomp/AppArmor и устанавливаю ограничения на ресурсы.
  • Секреты: Пароли и сертификаты сохраняются в виде Секрет-Том с ограниченными правами доступа — не в образе контейнера и не в журналах. Ротация осуществляется автоматически.
  • Тома: Я четко разделяю данные и конфигурацию. Запись возможна только на том том, где хранятся данные, а монтируемые разделы с конфигурацией остаются доступными только для чтения.
  • Работоспособность/Готовность: Я осуществляю аутентификацию при выполнении проверок работоспособности (например, через пользователя ACL с правами только на чтение), чтобы пробы не превратились в «заднюю дверь».

Автоматизация, песочница Systemd и безопасная доставка

Я внедряю меры безопасности в процесс автоматизации, чтобы каждый экземпляр развертывался одинаково и надежно. В этом случае отклонения сразу же бросаются в глаза.

  • Шаблоны: redis.conf, файл ACL и модуль systemd-unit находятся под контролем версий как код. Перед каждым развертыванием я автоматически проверяю bind, порты, TLS и ACL.
  • Укрепление безопасности Systemd: В модуле я активирую NoNewPrivileges=yes, PrivateTmp=yes, ProtectSystem=strict, ProtectHome=да и установить UMask=027. Это позволяет эффективно ограничивать доступ к файлам и права на выполнение.
  • CICD-Gates: Конвейеры прерываются, если какой-либо порт открыт для внешнего доступа, отсутствуют сертификаты или рискованные команды не переименованы. Так я предотвращаю регрессии.
  • Образы и пакеты: Я проверяю образы контейнеров и пакеты ОС на наличие уязвимостей. Обновления я внедряю поэтапно, отслеживая при этом показатели и бюджеты ошибок.

Подготовка к чрезвычайным ситуациям: структурированный план реагирования

Я готовлюсь к чрезвычайной ситуации заранее, до того как она возникнет. Так я могу быстро реагировать, минимизировать ущерб и бесперебойно возобновить работу.

  • Сдерживать: Я немедленно блокирую сетевые пути (группы безопасности, брандмауэр), прекращаю публичный доступ и замораживаю подозрительные экземпляры для сохранения доказательств.
  • ОпределитеС ИНФОРМАЦИЯ для клиентов, СПИСОК ACL, РОЛЬ, CONFIG GET и СПИСОК МОДУЛЕЙ Я проверяю состояние, количество активных пользователей, репликацию и загруженные модули.
  • Ротация учетных данных: Я устанавливаю новые пароли/ключи ACL, блокирую подозрительных пользователей (ACL SETUSER user off) и приостанавливаю действие прав до выяснения обстоятельств.
  • Уборка: Недопустимые ключевые области я выявляю с помощью стратегии префиксов, удаляю вредоносные модули в автономном режиме и сравниваю конфигурацию с заданным состоянием.
  • Реставрация: Я восстанавливаю систему из проверенных резервных копий, устанавливаю обновления и внедряю упрочнённые конфигурации. Затем проводится анализ инцидента с определением четких мер.

Практическая реализация: контрольный список в текстовом формате

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

Краткое резюме

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

Текущие статьи

Серверные стойки с визуализированной изоляцией файловой системы CageFS в хостинге CloudLinux
Безопасность

CloudLinux CageFS — максимальная изоляция файловых систем на виртуальном хостинге

CloudLinux CageFS обеспечивает надежную изоляцию файловых систем в условиях виртуального хостинга и повышает уровень безопасности CloudLinux за счет изолированных сред пользователей и веб-сайтов.

Серверная среда с визуализированными ограничениями CloudLinux LVE для хостинга
Серверы и виртуальные машины

Как правильно понимать ограничения LVE в CloudLinux для обеспечения стабильной работы виртуального хостинга

Правильная настройка ограничений CloudLinux LVE на виртуальном хостинге: узнайте, как с помощью CloudLinux LVE оптимально настроить ограничения по ЦП, оперативной памяти, вводу-выводу и процессам, чтобы обеспечить стабильные ограничения ресурсов хостинга и справедливую производительность для всех учетных записей.

Защищенный сервер Redis с закрытыми портами в современном центре обработки данных
Безопасность

Безопасность Redis: как избежать открытых портов и незащищенных экземпляров

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