Как выполнить безопасную установку Redis на Linux

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

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

Читайте дальше и избавьтесь от головной боли при устранении ошибок установки Redis!

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

Этот учебник будет практическим демонстрационным материалом. Если вы хотите следовать за ним, убедитесь, что у вас есть следующее:

  • Машина с Ubuntu 20.04 LTS – В этом учебнике используется Ubuntu 20.04 LTS, но инструкции аналогичны для большинства дистрибутивов Linux.
  • Привилегии root или непривилегированный пользователь с sudo привилегиями

Установка Redis с помощью менеджера пакетов APT

Есть несколько способов установить Redis на Ubuntu, но для этого руководства вы выберете менеджер пакетов APT, чтобы установить Redis.

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

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

Откройте терминал и выполните нижеприведенную команду apt update, чтобы обновить список последних пакетов.

sudo apt update -y
Updating the Linux system

Теперь выполните нижеприведенную команду apt install, чтобы установить Redis на вашем компьютере.

Нижеприведенная команда использует менеджер пакетов apt, чтобы загрузить и установить пакет redis-server из репозиториев Ubuntu на ваш компьютер. Флаг -y указывает apt автоматически принимать запросы во время процесса установки.

sudo apt install redis-server -y
Installing Redis on your machine

Настройка файла Redis.conf для запуска Redis в качестве службы

Вы только что установили Redis, но он еще не готов к использованию. Прежде чем начать использовать Redis, вам нужно настроить файл redis.conf.

Файл конфигурации redis.conf включен в установленный вами пакет Redis и хранится по умолчанию в каталоге /etc/redis/. Этот файл содержит все опции конфигурации для Redis.

Расширение файла .conf логично, так как оно следует общепринятому образцу. Многие другие программы используют такой же стиль. Например, веб-сервер Apache использует расширение файла .conf для своего основного файла конфигурации.

1. Выполните следующую команду systemctl, чтобы stop сервис redis-server. Остановка службы Redis – рекомендуемая практика при первом запуске Redis.

sudo systemctl stop redis.service

2. Затем откройте файл /etc/redis/redis.conf в выбранном вами текстовом редакторе.

Найдите директиву supervised, затем установите ее в systemd, как показано ниже, и сохраните изменения. Это указывает операционной системе запускать Redis как службу.

Setting up the systemd directive

3. Теперь выполните команду systemctl restart ниже, чтобы перезапустить службу Redis (redis.service), так как служба Redis еще не знает о внесенных изменениях.

sudo systemctl restart redis.service

4. Наконец, выполните команду systemctl status ниже, чтобы увидеть, работает ли Redis.

sudo systemctl status redis.service

Как видно ниже, вывод показывает, что служба Redis работает.

Checking if Redis Service is Running

Проверка работоспособности сервера Redis

Вы настроили и проверили, что служба Redis активно работает, но это не означает, что сервер Redis работает. Как проверить, работает ли сервер Redis правильно? Подключитесь к серверу Redis и отправьте команды, чтобы увидеть, отвечает ли сервер.

1. Выполните команду redis-cli ниже, чтобы подключиться к серверу Redis. redis-cli – это интерфейс командной строки для Redis, который позволяет отправлять команды на сервер и проверять его состояние.

redis-cli

Ниже вы можете видеть, что вы находитесь в приглашении к серверу Redis (127.0.0.1:6379>). Команда redis-cli пытается подключиться к серверу Redis по умолчанию на 127.0.0.1:6379.

Connecting to the Redis Server

2. Затем выполните команду ping ниже, чтобы проверить, доступен ли сервер Redis.

ping

Как видно, сервер вернул PONG, что указывает на то, что сервер Redis доступен и теперь успешно взаимодействует со службой.

Pinging the Redis server

Возможно, вы все еще сомневаетесь; выполните нижеприведенную команду set. Команда set – это команда Redis, которая устанавливает пару ключ-значение в базе данных.

set test "This is a test"

Как видите, команда set возвращает “OK”, что указывает на то, что служба Redis работает правильно.

Testing the Redis server

3. Выполните нижеприведенную команду exit, чтобы выйти из redis-cli. Таким образом, соединение с сервером Redis будет закрыто.

exit

Привязка сервера Redis к локальному хосту

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

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

1. Откройте файл /etc/redis/redis.conf в вашем текстовом редакторе.

2. Найдите строку, которая говорит bind 127.0.0.1 ::1, и раскомментируйте эту строку, удалив символ решетки (#) в начале строки.

Uncommenting the bind 127.0.0.1 ::1 line

3. Теперь выполните команду ниже, чтобы перезапустить службу redis-server.

sudo systemctl restart redis-server

4. Наконец, выполните следующую команду, чтобы проверить, привязан ли ваш сервер Redis к локальному хосту. Команда netstat -lnp выводит список всех активных сетевых подключений, а часть grep redis фильтрует вывод, чтобы оставить только строки, содержащие “redis”.

-lnp означает Протокол Локального Имени (Local Name Protocol) — сетевой протокол, используемый системами, подобными UNIX, для преобразования имен хостов в IP-адреса.

sudo netstat -lnp | grep redis

Вы можете видеть ниже, что сервер Redis теперь слушает только интерфейс localhost (127.0.0.1:6379). Отражая изменение в файле конфигурации, вы можете видеть, что только интерфейс localhost указан в ваших активных интернет-соединениях (tcp).

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

Listing all active network connections

Обеспечение безопасности подключения к серверу Redis с помощью пароля

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

Как обеспечить защиту вашего сервера Redis? Установите пароль для требования аутентификации при подключении к серверу Redis.

1. Повторно откройте файл конфигурации redis.conf в вашем текстовом/кодовом редакторе.

2. Затем установите надежный пароль с помощью следующего:

  • Ищите requirepass foobared в разделе SECURITY
  • Удалите знак номера (#) в начале строки
  • Замените foobared на надежный пароль по вашему выбору и сохраните изменения
Providing a secure password

3. Запустите следующие команды для перезапуска и подключения к вашему серверу Redis.

sudo systemctl restart redis-server
redis-cli

4. Теперь выполните команду ping, чтобы увидеть, получите ли вы ответ от сервера.

ping

Ниже вы можете увидеть сообщение об ошибке, которое говорит NOAUTH Требуется аутентификация. Это сообщение указывает на то, что вам нужен аутентификационный пароль для доступа к вашему удаленному серверу Redis.

Testing connection with the server

5. Запустите нижеуказанную auth команду, за которой следует ваш пароль, чтобы аутентифицировать ваше соединение с вашим сервером Redis.

auth Qae9p_fY:YjdtJ7k

Вы получите ответ OK, когда аутентификация прошла успешно, как показано ниже.

Authenticating Redis Server Connection

6. Наконец, повторно выполните команду ping, чтобы проверить, аутентифицировано ли ваше соединение с сервером Redis.

ping

Теперь вы получите ответ PONG, как показано ниже, после аутентификации вашего соединения. На этом этапе вы успешно защитили ваш сервер Redis паролем.

Pinging the Redis server

Отключение опасных команд для защиты вашего сервера Redis

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

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

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

FLUSHDB, FLUSHALL, KEYS, PEXPIRE, DEL, CONFIG, SHUTDOWN, BGREWRITEAOF
BGSAVE, SAVE, SPOP, SREM, RENAME, DEBUG, EVAL

Чтобы дополнительно защитить ваш сервер Redis, переименуйте эти опасные команды в файле redis.conf:

1. Откройте файл redis.conf в вашем текстовом редакторе и найдите раздел Переименование команд.

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

rename-command the-command ""

Например, отключите команду CONFIG, переименовав CONFIG в пустую строку, как показано ниже, затем сохраните изменения. Двойные кавычки (“”) указывают на пустую строку, которая означает отключение команды.

Renaming the CONFIG command

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

sudo systemctl restart redis-server

3. Теперь выполните следующие команды, чтобы подключиться к вашему серверу Redis.

redis-cli
auth Qae9p_fY:YjdtJ7k

4. Наконец, выполните команду config get, чтобы проверить, что команда CONFIG отключена.

config get requirepass

Вы получите ответ ERR unknown command config, как показано ниже, что указывает на отключение команды CONFIG.

Checking the CONFIG command

Если команда config get requirepass проходит успешно, она запрашивает пароль вашего сервера Redis для аутентификации подключения к нему.

Теперь вы успешно переименовали опасную команду Redis, чтобы защитить ваш сервер Redis. Теперь продолжайте отключать другие опасные команды в файле redis.conf.

Блокировка запроса на подключение к серверу Redis с помощью брандмауэра

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

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

Чтобы настроить брандмауэр, сначала установите инструмент конфигурации брандмауэра. В этом примере используется UFW, часто используемый инструмент конфигурации брандмауэра в Linux. Но вы также можете использовать другой инструмент, например, iptables, чтобы настроить брандмауэр.

1. Запустите следующую команду, чтобы установить UFW на вашем компьютере.

sudo apt install ufw -y

2. Затем выполните следующую команду, чтобы включить UFW.

sudo ufw enable

Введите ‘Y’, когда получите предложенную ниже подсказку, чтобы продолжить выполнение команды.

Enabling UFW

3. Запустите команду ufw ниже, чтобы добавить правило, которое разрешает (allow) трафик на порту 6379 для вашего сервера Redis. Замените IP-адрес 11.22.33.44 IP-адресами ваших предполагаемых пользователей.

sudo ufw allow from 11.22.33.44 to any port 6379
Adding a firewall rule to allow traffic on port 6379

4. Наконец, выполните команду ниже, чтобы убедиться, что вы успешно добавили правило брандмауэра. Команда проверяет status вашего брандмауэра.

sudo ufw status

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

Checking the UFW rules

Теперь любые пользователи с IP-адресом 11.22.33.44 могут подключаться к Redis через порт 6379 и им потребуется аутентифицироваться с паролем. Вы можете добавить дополнительные порты для других служб аналогичным образом.

Заключение

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

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

Желаете узнать больше? Почему бы не начать с защиты сервера Redis в Kubernetes?

Source:
https://adamtheautomator.com/redis-install/