Redis — это мощное хранилище типа «ключ-значение» в оперативной памяти, которое можно использовать в качестве сервера баз данных, кэша и брокера сообщений. Оно широко известно своей высокой производительностью, гибкостью и поддержкой широкого спектра языков программирования. Это бесплатное программное обеспечение с открытым исходным кодом, написанное на языке программирования C. В этом руководстве мы рассмотрим, как установить и защитить Redis на Ubuntu 18.04.
Предварительные требования
Чтобы следовать этому руководству, вам нужно будет заранее подготовить несколько вещей. Вам понадобится сервер Ubuntu 18.04, который вы можете легко установить, следуя нашему руководству. Кроме того, у вас должен быть пользователь без прав root с привилегиями sudo и настроенный базовый брандмауэр. Вы можете настроить это, следуя нашим руководствам по настройке файла sudoers в Linux и настройке UFW на облачном сервере Ubuntu и Debian.
А теперь начнем!
Установка Redis
Redis доступен напрямую из официального репозитория Ubuntu. Это самый простой способ его установки и настройки. Мы рекомендуем использовать именно этот путь, если нет веских причин поступать иначе. Поскольку исходный код Redis доступен бесплатно, его также можно собрать из исходников. Однако мы не рекомендуем этого делать, так как управлять им и обновлять его в таком случае сложнее.
Установка Redis из репозитория Ubuntu
Сначала обновите локальный кэш пакетов APT:
|
1 |
sudo apt update |
Затем установите Redis с помощью следующей команды:
|
1 |
sudo apt install redis-server |
Установка Redis из исходного кода
В Ubuntu по умолчанию нет инструментов сборки и необходимых библиотек. Следующая команда установит все необходимые инструменты для сборки Redis:
|
1 |
sudo apt install git build-essential |
Для сборки Redis требуются две дополнительные зависимости. Эти зависимости необходимы для компиляции Redis с дополнительными функциями, например, поддержкой TLS, интеграцией с systemd и т. д. Чтобы скомпилировать Redis с поддержкой TLS, установите пакет «libssl-dev». Чтобы скомпилировать Redis с поддержкой systemd, установите пакет «libsystemd-dev»:
|
1 |
sudo apt install libssl-dev libsystemd-dev |
Исходный код Redis доступен на GitHub. Посетите страницу Redis на GitHub. Затем скачайте исходный код:
|
1 |
git clone https://github.com/redis/redis.git |
Перейдите в каталог с исходным кодом Redis:
|
1 |
cd redis/ |
После этого запустите утилиту make, чтобы начать компиляцию. Она скомпилирует Redis без каких-либо дополнительных элементов:
|
1 |
make -j$(nproc) |
Чтобы включить поддержку TLS (при условии, что пакет «libssl-dev» установлен), используйте следующую команду:
|
1 |
make -j$(nproc) BUILD_TLS=yes |
Чтобы включить поддержку systemd (при условии, что пакет «libsystemd-dev» установлен), используйте следующую команду:
|
1 |
make -j$(nproc) USE_SYSTEMD=yes |
Затем проверьте, прошла ли компиляция успешно. Обратите внимание, что для запуска теста может потребоваться дополнительный пакет «tcl-dev» и связанные с ним зависимости:
|
1 |
make test |
Наконец, установите Redis, выполнив следующую команду:
|
1 |
sudo make install |
Если Redis был собран с использованием TLS, то запуск сервера должен выполняться следующим образом:
|
1 2 |
./utils/gen-test-certs.sh ./runtest --tls |
Настройка Redis
После завершения установки пришло время настроить Redis. Откройте конфигурационный файл Redis в текстовом редакторе и прокрутите вниз до раздела «supervised»:
|
1 |
sudo vim /etc/redis/redis.conf |
Измените значение параметра «supervised» на «systemd». Это гарантирует, что служба Redis будет управляться systemd. Чтобы изменения вступили в силу, перезапустите службу Redis:
|
1 |
sudo systemctl restart redis.service |
Тестирование Redis
Перед дальнейшим использованием всегда полезно проверить, правильно ли работает Redis. Вот несколько способов протестировать работу Redis. Первым шагом является проверка того, запущена ли и работает ли служба Redis:
|
1 |
sudo systemctl status redis |
Здесь Redis уже запущен. По умолчанию служба Redis будет запускаться при загрузке. Если службу Redis необходимо запускать вручную, отключите ее:
|
1 |
sudo systemctl disable redis |
Следующий тест — проверка с помощью консоли Redis. Запустите клиент командной строки Redis:
|
1 |
redis-cli |
Выполните команду «ping»:
|
1 |
ping |
Вывод подтверждает, что соединение с сервером все еще активно. Следующий тест — проверить, позволяет ли он устанавливать ключи. Создайте ключ «temp» со значением «hello world»:
|
1 |
set temp “hello world” |
Получите значение с помощью команды «get»:
|
1 |
get temp |
Если до этого момента все работает нормально, Redis должен без проблем вернуть значение ключа. Закройте клиент командной строки Redis:
|
1 |
exit |
Финальный тест — проверить, может ли Redis сохранять данные даже после остановки или перезапуска. Перезапустите службу Redis:
|
1 |
sudo systemctl restart redis |
Если при выполнении указанной выше команды возникнет ошибка, используйте команду “systemctl enable redis-server”:
|
1 |
sudo systemctl enable redis-server |
Запустите клиент командной строки Redis и получите значение ключа «temp», который мы создали ранее:
|
1 2 |
redis-cli get temp |
На этом тестирование Redis завершено. Ваш сервер Redis готов к использованию по назначению.
Обеспечение безопасности Redis
На данный момент Redis полностью работоспособен. Однако некоторые из его настроек по умолчанию не обеспечивают наилучшую безопасность. Если их не обновить, любой злоумышленник может воспользоваться возможностью получить доступ к серверу и его данным. В этом разделе будет показано, как устранить эти уязвимости. Хотя эти шаги являются необязательными, настоятельно рекомендуется выполнить их для повышения безопасности системы.
Привязка к localhost
По умолчанию Redis доступен только с localhost. Однако, если Redis был настроен на удаленном сервере, конфигурацию необходимо обновить, чтобы разрешить подключение откуда угодно. Тем не менее, это может быть не так безопасно, как привязка к localhost. Чтобы повторно привязать Redis к localhost, откройте конфигурационный файл Redis в текстовом редакторе:
|
1 |
sudo vim /etc/redis/redis.conf |
Прокрутите вниз и найдите следующую строку. Убедитесь, что она не закомментирована:
|
1 |
bind 127.0.0.1 ::1 |
Сохраните и закройте файл. Затем перезапустите службу Redis, чтобы изменения вступили в силу немедленно:
|
1 |
sudo systemctl restart redis |
Убедитесь, что изменения применились успешно:
|
1 |
sudo netstat -lnp | grep redis |
Если вы получите ошибку вида ‘netstat: command not found’, используйте команду для установки net-tools “sudo apt-get install net-tools”. Вывод подтверждает, что «redis-server» успешно привязан к localhost (127.0.0.1), отражая недавно внесенные изменения. Если там указан любой другой IP-адрес (например, 0.0.0.0), перепроверьте конфигурационный файл и снова перезапустите сервер Redis.
Настройка пароля Redis
Настройка пароля позволяет использовать встроенную функцию безопасности Redis – команду «AUTH». Она требует от клиентов прохождения аутентификации для доступа к базе данных. По умолчанию в Redis пароль не настроен. Пароль должен быть объявлен в конфигурационном файле Redis. Откройте конфигурационный файл в текстовом редакторе:
|
1 |
sudo vim /etc/redis/redis.conf |
Затем прокрутите вниз до следующей строки и раскомментируйте ее:
|
1 |
requirepass foobared |
После раскомментирования паролем по умолчанию станет «foobared». Измените его на пароль по вашему выбору. Когда дело касается Redis, надежность пароля имеет огромное значение. Поскольку Redis — это высокопроизводительный сервер, его потенциально легче взломать с помощью атак методом перебора (brute-force). Вот почему конфигурационный файл напрямую содержит следующее предупреждение. Вот быстрый пример генерации очень надежного случайного пароля. Мы будем использовать команду OpenSSL для генерации случайной строки:
|
1 |
echo $(openssl rand 60 | openssl base64 -A) |
После настройки нового пароля перезапустите службу Redis, чтобы изменения вступили в силу:
|
1 |
sudo systemctl restart redis.service |
Пришло время проверить, успешно ли применился пароль. Запустите консоль командной строки Redis:
|
1 |
redis-cli |
Затем попробуйте установить новый ключ:
|
1 |
set user “cloudsigma” |
Redis отклонит запрос, так как для этого действия требуется аутентификация. Чтобы выполнить любое действие на сервере, пользователь должен сначала пройти авторизацию. Авторизуйте пользователя с помощью следующей команды:
|
1 |
auth <пароль> |
Если пароль верный, Redis подтвердит действие. Теперь Redis разрешит доступ к функциям своего сервера:
|
1 2 |
set user “cloudsigma” get user |
На этом наша работа с консолью Redis завершена. Вы можете закрыть консоль:
|
1 |
exit |
Переименование опасных команд
Redis позволяет переименовывать или полностью отключать определенные команды, которые считаются опасными. Это еще одна важная встроенная функция безопасности Redis. Почему команды считаются опасными? При запуске неавторизованным пользователем эти команды могут перенастроить, уничтожить или стереть данные на сервере. Отключение или переименование ряда опасных команд Redis является обычной практикой. Обратите внимание, что угроза безопасности со стороны команды зависит от ситуации. Например, некоторые из следующих команд могут требоваться на регулярной основе. В таких случаях отключать их не рекомендуется. В подобной ситуации более выгодным может оказаться переименование команды. Вот краткий список команд, которые считаются опасными. Это хорошая отправная точка для повышения безопасности сервера Redis:
- FLUSHDB
- FLUSHALL
- KEYS
- PEXPIRE
- DEL
- CONFIG
- SHUTDOWN
- BGREWRITEAOF
- BGSAVE
- SAVE
- SPOP
- SREM
- RENAME
- DEBUG
Чтобы переименовать или отключить команду, ее необходимо объявить в конфигурационном файле Redis. Откройте конфигурационный файл Redis и добавьте следующие строки. Здесь «rename-command» используется для переименования команд в пустую строку. Добавьте столько записей, сколько необходимо:
|
1 |
sudo vim /etc/redis/redis.conf |
|
1 2 3 4 |
$ rename-command FLUSHDB "" $ rename-command FLUSHALL "" $ rename-command SHUTDOWN "" $ rename-command CONFIG "" |
Аналогично, команды также можно переименовать в другие названия. В определенных ситуациях это может обеспечить большую гибкость:
|
1 2 3 4 |
$ rename-command FLUSHDB "command_1" $ rename-command FLUSHALL "command_2" $ rename-command SHUTDOWN "command_3" $ rename-command CONFIG "command_4" |
Сохраните файл и выйдите из редактора. Чтобы изменения вступили в силу, перезапустите службу Redis:
|
1 |
sudo systemctl restart redis.service |
Проверьте изменения. Затем запустите консоль Redis и пройдите аутентификацию:
|
1 2 |
redis-cli auth <пароль> |
Предположим, что команда «CONFIG» была отключена или переименована. Попробуйте использовать следующую команду «CONFIG». Она завершится ошибкой:
|
1 |
config get requirepass |
Если команда была отключена, доступ к ней будет невозможен, пока она не будет включена снова. Однако, если она была переименована, используйте новый псевдоним:
|
1 |
command_4 get requirepass |
Заключение
В этом руководстве показано, как установить, защитить, настроить и проверить установку Redis. Также показано, как использовать встроенные функции безопасности Redis, чтобы сделать его менее уязвимым для атак. Однако, если кто-то уже вошел на сервер, обойти специфические функции безопасности Redis довольно просто. Вот почему наличие брандмауэра для защиты доступа к серверу Redis имеет решающее значение.
Приятной работы!






Комментарии
Комментариев пока нет. Будьте первым.