How To Secure Your Redis Installation on Ubuntu 14.04 | DigitalOcean

Что это такое?

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

Преимущества:

  • высокая скорость;
  • GitHub, Weibo, Pinterest, Snapchat, Craigslist, Digg, StackOverflow, Flickr выбрали это хранилище;
  • поддерживается практически всеми языками программирования, в том числе JavaScript, Java, Go, C, C , C#, Python, Objective-C, PHP;
  • имеет открытый исходный код.

Введение

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

Introduction

Redis is an in-memory, NoSQL, key-value cache and store that can also be persisted to disk.

This tutorial shows how to implement basic security for a Redis server.

However, keep in mind that Redis was designed for use by trusted clients in a trusted environment, with no robust security features of its own. To underscore that point, here’s a quote from the official Redis website:

Redis is designed to be accessed by trusted clients inside trusted environments. This means that usually it is not a good idea to expose the Redis instance directly to the internet or, in general, to an environment where untrusted clients can directly access the Redis TCP port or UNIX socket.

. . .

In general, Redis is not optimized for maximum security but for maximum performance and simplicity.

Performance and simplicity without security is a recipe for disaster. Even the few security features Redis has are really nothing to rave about. Those include: a basic unencrypted password, and command renaming and disabling. It lacks a true access control system.

However, configuring the existing security features is still a big step up from leaving your database unsecured.

In this tutorial, you’ll read how to configure the few security features Redis has, and a few other system security features that will boost the security posture of a standalone Redis installation on Ubuntu 14.04.

Note that this guide does not address situations where the Redis server and the client applications are on different hosts or in different data centers. Installations where Redis traffic has to traverse an insecure or untrusted network require an entirely different set of configurations, such as setting up an SSL proxy or a VPN between the Redis machines, in addition to the ones given here.

1: тестирование redis

Создайте SSH-подключение как пользователь с правами sudo.

Сначала установку Redis нужно проверить. Откройте командную строку:

redis-cli

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

auth your_redis_passwordOK

Подробнее о настройке аутентификации – в разделе 4.

В командную строку введите такую команду, чтобы проверить соединение:

ping

Если Redis работает правильно, вы увидите ответ:

PONG

Закройте командную строку:

exit

Теперь вы знаете, что установка Redis полностью работоспособна и готова к использованию. Пора заняться безопасностью сервера.

2: настройка ufw

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

Если вы не уверены, включен ли брандмауэр, вы можете проверить это:

sudo ufw status

Если вы выполнили мануал по начальной настройке сервера, вы получите такой вывод:

Status: activeTo                         Action      From–                         ——      —-OpenSSH                    ALLOW       AnywhereOpenSSH (v6)               ALLOW       Anywhere (v6)

Если вы настроили правила брандмауэра с помощью этого руководства, вам не нужно добавлять дополнительное правило для Redis, потому что по умолчанию UFW сбрасывает весь входящий трафик, если он явно не разрешен. Поскольку автономная установка сервера Redis по умолчанию работает только на интерфейсе loopback (127.0.0.1 или localhost), по поводу входящего трафика на его порт по умолчанию можно не беспокоиться.

Prerequisites

For this tutorial, you’ll need:

Step 1 — verifying that redis is running

First log in to your server using SSH:

Step 2 — securing the server with iptables

If you followed the prerequisites for iptables, feel free to skip this step. Or, you can do it now.

Redis is just an application that’s running on your server, and because it has no real security features of its own, the first step to truly securing it is to first secure the server it is running on.

In the case of a public-facing server like your Ubuntu 14.04 server, configuring a firewall as given in this iptables guide is that first step. Follow that link and set up your firewall now.

If you’ve implemented the firewall rules using that guide, then you do not need to add an extra rule for Redis, because by default, all incoming traffic is dropped unless explicitly allowed. Since a default standalone installation of Redis server is listening only on the loopback interface (127.0.0.1 or localhost), there should be no concern for incoming traffic on its default port.

If you need to specifically allow an IP address for Redis, you can check what IP address Redis is listening on, and what port it is bound to by grep-ing the output of the netstat command. The fourth column — 127.0.0.1:

  1. sudonetstat -plunt |grep -i redis
tcp   0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      8562/redis-server 1

Make sure this IP address is allowed in your Firewall policy. For more information on how to add rules, please see this iptables basics article.

Step 3 — binding to localhost

By default, Redis server is only accessible from localhost. However, if you followed the tutorial to set up a Redis master server, you updated the configuration file to allow connections from anywhere. This is not as secure as binding to localhost.

Open the Redis configuration file for editing:

  1. sudonano /etc/redis/redis.conf

Locate this line and make sure it is uncommented (remove the # if it exists):

bind 127.0.0.1

We’ll keep using this file, so keep it open for now.

Step 4 — configuring a redis password

If you installed Redis using the How To Configure a Redis Cluster on Ubuntu 14.04 article, you should have configured a password for it. At your discretion, you can make a more secure password now by following this section. If not, instructions in this section show how to set the database server password.

Configuring a Redis password enables one of its two built-in security feature – the auth command, which requires clients to authenticate to access the database. The password is configured directly in Redis’s configuration file, /etc/redis/redis.conf, which you should still have open from the previous step.

Scroll to the SECURITY section and look for a commented directive that reads:

# requirepass foobared

Uncomment it by removing the #, and change foobared to a very strong and very long value.

Rather than make up a password yourself, you may use a tool like apg or pwgen to generate one. If you don’t want to install an application just to generate a password, you may use the one-liner below. To generate a password different from the one that this would generate, change the word in quotes.

Step 5 — renaming dangerous commands

The other security feature built into Redis allows you to rename or completely disable certain commands that are considered dangerous.

Предварительные требования

Для выполнения данного руководства вам потребуется сервер Ubuntu 18.04 с пользователем без прав root с привилегиями sudo и брандмауэром с базовой конфигурацией. Вы можете выполнить настройку с помощью нашего руководства по первоначальной настройке сервера.

​​Когда все будет готово, выполните вход на сервер Ubuntu 18.04 с помощью пользователя с правами sudo и продолжите выполнять дальнейшие инструкции.

Проверка redis

Для того, чтобы убедиться, что сервер работает, выполните следующую команду:

sudo systemctl status redis

Результат:

Чтобы проверить корректность работы Redis, подключитесь к серверу с помощью клиента командной строки:

Проверьте соединение с помощью команды ping:

Результат PONG подтверждает, что соединение с сервером установлено. Затем убедитесь, что установка ключей Redis доступна:

Теперь получите заданное значение, также после перезапуска сервера значение должно сохраниться:

Для выхода из клиента используйте сочетание клавиш Ctrl С или команду:

Удаленное подключение

Иногда бывает удобно выполнять удаленное подключение к Redis, для этого откройте файл конфигурации:

Найдите следующую строку:

Раскомментируйте и замените адрес, 0.0.0.0 – подключнию с любого IP, если указать конкретный IP, то сможете подключаться именно с него:

Перезагрузите СУБД:

Не забудьте открыть порт, на котором запущен сервер, с помощью iptables, например:

Для удаленного подключения используйте следующую команду:

redis-cli -h <ip-адрес> -p <порт>

Например:

redis-cli -h 5.200.56.169 -p 6379

Установка и конфигурация redis

Первоначальные требования: действия выполняются от имени пользователя с правами sudo.

Для успешной установки Redis выполните обновление локальной базы пакетов:

Для загрузки и установки Redis выполните следующую команду:

С помощью текстового редактора, например vi, откройте конфигурационный файл, который генерируется автоматически:

С помощью поиска найдите параметр supervised. Значение параметра указывает на систему инициализации, по умолчанию имеет значение no, необходимо заменить это значение на systemd:

Перезагрузите СУБД:

Установка пароля

Для увеличения безопасности хранилища рекомендуем установить пароль, для этого откройте файл конфигурации:

Найдите следующую строку:

# requirepass foobared

Раскомментируйте строку, удалив #, и измените значение параметра requirepass на безопасный пароль:

requirepass <пароль>

Перезагрузите СУБД:

Для подключения по паролю используйте ключ a:

redis-cli -a <пароль>

Шаг 1 — установка и настройка redis

Мы будем использовать диспетчер пакетов APT для установки redis из официальных репозиториев Ubuntu. На момент написания этой статьи в репозиториях по умолчанию доступна версия 5.0.7.

Начните с обновления кэша локальных пакетов apt:

  1. sudoapt update

Затем установите Redis. Для этого введите следующее:

  1. sudoaptinstall redis-server

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

Откройте этот файл в предпочитаемом текстовом редакторе:

  1. sudonano /etc/redis/redis.conf

Внутри файла найдите директиву supervised. Эта директива позволяет объявить систему инициализации для управления Redis как службой, предоставляя вам более широкий контроль за ее работой. Для директивы supervised по умолчанию установлено значение no.

. . .

# If you run Redis from upstart or systemd, Redis can interact with your
# supervision tree. Options:
#   supervised no      - no supervision interaction
#   supervised upstart - signal upstart by putting Redis into SIGSTOP mode
#   supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET
#   supervised auto    - detect upstart or systemd method based on
#                        UPSTART_JOB or NOTIFY_SOCKET environment variables
# Note: these supervision methods only signal "process is ready."
#       They do not enable continuous liveness pings back to your supervisor.
supervised systemd

. . .

Это единственное изменение, которое вам нужно внести в файл конфигурации Redis на данный момент,поэтому сохраните и закройте его после завершения редактирования. Если вы использовали nano для редактирования файла, нажмите CTRL X, Y, а затем ENTER.

Перезапустите службу Redis, чтобы изменения в файле конфигурации вступили в силу:

  1. sudo systemctl restart redis.service

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

Шаг 5 — переименование опасных команд

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

При использовании неавторизованными пользователями, такие команды могут использоваться для изменения конфигурации, уничтожения или выведения из строя ваших данных. Как и в случае пароля для аутентификации, переименование или отключение команд выполняется в том же разделе SECURITY в файле /etc/redis/redis.conf.

Список команд, которые считаются опасными, включает: FLUSHDB, FLUSHALL, KEYS, PEXPIRE, DEL, CONFIG, SHUTDOWN, BGREWRITEAOF, BGSAVE, SAVE, SPOP, SREM, RENAME и DEBUG.

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

Чтобы активировать или отключить команды Redis, откройте файл конфигурации еще раз:

  1. sudonano /etc/redis/redis.conf

Предупреждение. Седующие шаги с демонстрацией отключения или переименования команд являются примерами. Вы должны отключить или переименовать команды, имеющие смысл для вас. Вы можете просмотреть полный список команд самостоятельно и узнать, как они могут использоваться злоумышленниками, по адресу vhod-v-lichnyj-kabinet.ru/commands.

Чтобы отключить команду, просто укажите пустую строку в качестве имени (обозначается парой кавычек без символов между ними), как показано ниже:

. . .
# It is also possible to completely kill a command by renaming it into
# an empty string:
#
rename-command FLUSHDB ""rename-command FLUSHALL ""rename-command DEBUG ""
. . .

Чтобы переименовать команду, дайте ей другое имя, как показано в приведенных ниже примерах. Переименованные команды должно быть трудно подобрать, но легко запомнить:

. . .
# rename-command CONFIG ""
rename-command SHUTDOWN SHUTDOWN_MENOTrename-command CONFIG ASC12_CONFIG
. . .

Сохраните изменения и закройте файл.

После переименования команды примените изменения, перезапустив Redis:

  1. sudo systemctl restart redis.service

Чтобы протестировать новую команду, откройте командную строку Redis:

  1. redis-cli

Затем выполните аутентификацию:

  1. auth your_redis_password
OK

Предположим, вы переименовали команду CONFIG в ASC12_CONFIG, как показано в предыдущем примере. Сначала попробуйте воспользоваться первоначальной команду CONFIG. Команда не будет выполнена, потому что вы переименовали ее:

  1. config get requirepass
(error) ERR unknown command 'config'

Вызов переименованной команды будет успешным. Регистр не имеет значения:

  1. asc12_config get requirepass
1) "requirepass"
2) "your_redis_password"

После этого вы можете закрыть redis-cli:

  1. exit

Обратите внимание, что если вы уже используете командную строку Redis, а затем перезапустите Redis, вам нужно будет повторно выполнить аутентификацию. Иначе вы получите следующую ошибку при вводе команды:

NOAUTH Authentication required.

В отношении практики переименования команд в конце раздела SECURITY файла /etc/redis/redis.conf есть следующее предостережение:

Обратите внимание, что изменение имени команд, зарегистрированных в файле AOF или передающихся “slave” компонентам системы, может вызывать проблемы.

Примечание:проект Redis предпочитает использовать термины «master» и «slave», в то время как DigitalOcean предпочитает использовать варианты «primary» и «secondary». Чтобы не допустить путаницы, мы решили использовать здесь термины, используемые в документации Redis.

Это значит, что, если переименованная команда не содержится в файле AOF, либо содержится, но AOF файл не передается «slave» компонентам, не будет никаких проблем.

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

Если вы используете AOF и работаете с конфигурацией master-slave, изучите этот ответ на странице проблем проекта на GitHub. Ниже приводится ответ на вопрос автора:

Команды сохраняются в AOF и воспроизводятся в «slave» компоненте в таком же виде, как были отправлены, поэтому если вы попытаетесь использовать AOF для экземпляра, где не было выполнено переименование, могут возникнуть противоречия, так как команда не может быть выполнена (то же самое характерно для «slave» компонентов).

Таким образом, при переименовании необходимо убедиться, что переименованные команды применяются во всех экземплярах на установках типа «master-slave».

Заключение

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

Чтобы защитить Redis в небезопасной сети, вам придется использовать прокси SSL, как рекомендовано разработчиками Redis в официальном руководстве по безопасности Redis.

Tags:

Conclusion

Keep in mind that once someone is logged in to your server, it’s very easy to circumvent the Redis-specific security features we’ve put in place. So, the most important security feature is one that makes it extremely difficult to jump that fence.

That should be your firewall.

To take your server security to the next level, you could configure an intrusion detection system like OSSEC. To configure OSSEC on Ubuntu 14.04, see this OSSEC guide.

If you’re attempting to secure Redis communication across an untrusted network you’ll have to employ an SSL proxy, as recommeded by Redis developers in the official Redis security guide. Setting up an SSL proxy to secure Redis commmunication is a separate topic.

We didn’t include a full list of Redis commands in the renaming section. However, you can check this for yourself and determine how they might be misused at vhod-v-lichnyj-kabinet.ru/commands.

Похожее:  отмена авторизации сбербанк что это значит с возвратом средств

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *