Быстрая установка и защита Redis в Ubuntu 20.04

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

Требования

Для работы вам понадобится сервер Ubuntu 20.04, настроенный по этому мануалу. Чтобы приступить к установке Redis, войдите в сессию вашего пользователя sudo.

Примечание: Расширенную версию этого мануала вы найдете здесь.

1: Установка и настройка Redis

Обновите индекс пакетов:

sudo apt update

Установите Redis:

sudo apt install redis-server

Откройте конфигурационный файл Redis:

sudo nano /etc/redis/redis.conf

Найдите директиву supervised, которая задает систему инициализации для управления сервисом Redis, предоставляя вам больше контроля над ним. По умолчанию директива supervised имеет значение no. Поскольку вы используете систему инициализации systemd, укажите здесь ее:

. . .
# 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, чтобы обновить настройки.

sudo systemctl restart redis.service

Чтобы убедиться, что Redis работает правильно, запустите клиент командной строки redis-cli:

redis-cli

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

ping
PONG

Вывод PONG значит, что программа правильно отвечает на запросы. Теперь убедитесь, что можете добавлять ключи:

set test "It's working!"
OK

Попробуйте извлечь значение ключа:

get test

Команда должна ответить:

"It's working!"

Убедившись, что вы можете извлекать значения, выйдите из командной строки Redis, чтобы вернуться в оболочку системы:

exit

2: Настройка парольной аутентификации Redis

Пароль настраивается непосредственно в конфигурационном файле Redis, /etc/redis/redis.conf. Снова откройте этот файл с помощью редактора:

sudo nano /etc/redis/redis.conf

Найдите раздел SECURITY, а в нем — директиву requirepass.

. . .
# requirepass foobared
. . .

Раскомментируйте эту строку, удалив #, а вместо foobared укажите надежный пароль.

. . .
requirepass your_redis_password
. . .

Указав надежный пароль, сохраните и закройте файл, а затем перезапустите Redis:

sudo systemctl restart redis.service

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

redis-cli

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

set key1 10
Redis должен вернуть ошибку:
(error) NOAUTH Authentication required.

Следующая команда пройдет аутентификацию:

auth your_redis_password
OK

После того как Redis принял пароль, попробуйте снова добавить ключ:

set key1 10
OK

Напоследок запросите свой новый ключ:

get key1
"10"

Убедившись, что после аутентификации вы можете запускать команды Redis, вы можете выйти из redis-cli:

quit

3: Переименование команд

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

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

Это не полный список, но для начала достаточно будет переименовать или отключить эти команды.

Откройте файл /etc/redis/redis.conf:

sudo nano  /etc/redis/redis.conf

Важно! Далее в мануале приведены общие примеры. Вы должны отключить или переименовать те команды, которые важны в вашей конкретной ситуации. Вы можете узнать больше о вредоносном использовании команд на redis.io/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_MENOT
rename-command CONFIG ASC12_CONFIG
. . .

Сохраните и закройте файл. Перезапустите Redis:

sudo systemctl restart redis.service

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

redis-cli

Пройдите аутентификацию, используя пароль, который вы установили ранее:

auth your_redis_password
OK

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

config get requirepass
(error) ERR unknown command `config`, with args beginning with:

Теперь сработает только переименованная команда:

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

Заключение

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

Tags: ,