компилируется...
Перейти к основному содержанию
Рекомендовать во Вконтакте Рекомендовать в Фейсбуке Рекомендовать в Твиттере

Как установить и обезопасить Redis в Ubuntu 18.04

Оригинал: https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-redis-on-ubuntu-18-04

Введение

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

Необходимые условия

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

Когда вы будете готовы начать, войдите на свой сервер Ubuntu 18.04 в качестве пользователя sudo и читайте дальше.

Шаг 1 - Установка и настройка Redis

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

Обновите свой локальный кэш пакетов apt и установите Redis, напечатав текст:

sudo apt update 
sudo apt install redis-server

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

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

sudo nano /etc/redis/redis.conf

Внутри файла найдите директиву supervised. Эта директива позволяет объявить систему инициализации для управления Redis в качестве службы, предоставляя вам больший контроль над ее работой. По умолчанию для supervised директивы установлено значение "no". Поскольку вы используете Ubuntu, который использует систему systemd, измените это значение на 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 на данном этапе, так что сохраните и закройте его, когда закончите. Затем перезапустите службу Redis, чтобы отразить изменения, внесенные в конфигурационный файл:

sudo systemctl restart redis.service

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

Шаг 2 - Тестирование Redis

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

Начните с проверки работы службы Redis:

sudo systemctl status redis

Если она работает без ошибок, эта команда выдаст результат, аналогичный следующему:

redis-server.service - Advanced key-value store
    Loaded: loaded (/lib/systemd/system/redis-server.service; enabled; vendor pre
    Active: active (running) since Wed 2019-10-23 14:19:36 +03; 1h 26min ago
      Docs: http://redis.io/documentation,
            man:redis-server(1)
   Process: 1064 ExecStart=/usr/bin/redis-server /etc/redis/redis.conf (code=exit
  Main PID: 1369 (redis-server)
     Tasks: 4 (limit: 4915)
    CGroup: /system.slice/redis-server.service
            └─1369 /usr/bin/redis-server 127.0.0.1:6379
 Oct 23 14:19:36 developer-pc systemd[1]: Starting Advanced key-value store…
 Oct 23 14:19:36 developer-pc systemd[1]: redis-server.service: Can't open PID fi
 Oct 23 14:19:36 developer-pc systemd[1]: Started Advanced key-value store.

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

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

redis-cli

В появившейся приглашении протестируйте подключение с помощью команды ping:

ping

Ответ должен быть такой:

PONG

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

set test "It's working!"

Ответ должен быть таким:

OK

Получить значение можно, введя команду:

get test

Предположив, что все работает, вы получите сохраненное значение:

"It's working!"

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

exit

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

sudo systemctl restart redis

Затем снова соединитесь с клиентом командной строки и убедитесь, что ваше тестовое значение все еще доступно:

redis-cli
get test

Значение вашего ключа должно быть по-прежнему:

"It's working!"

По окончании работы снова выйдите в консоль:

exit

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

Шаг 3 - Привязка к локальному хосту

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

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

sudo nano /etc/redis/redis.conf

Найдите эту строку и убедитесь, что она не закомментирована (удалите символ #, если он есть):

bind 127.0.0.1 ::1

Сохраните и закройте файл (нажмите CTRL + X, Y, затем ENTER).

Затем перезапустите службу, чтобы убедиться, что systemd прочитал ваши изменения:

sudo systemctl restart redis

Чтобы убедиться, что это изменение вступило в силу, выполните следующую команду netstat:

sudo netstat -lnp | grep redis

Если у вас не срабоатет команда netstat, то её нужно установить: sudo apt install net-tools

tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      14222/redis-server  
tcp6       0      0 ::1:6379                :::*                    LISTEN      14222/redis-server 

Этот вывод показывает, что redis-server привязан к localhost (127.0.0.0.1), что соответствует только что внесенным вами изменениям в конфигурационный файл. Если вы видите другой IP-адрес в этой колонке (например, 0.0.0.0.0), то вам следует дважды проверить, что вы раскомментировали правильную строку и и снова перезапустить Redis.

Теперь, когда ваш Redis прослушивает только локальный хост, злоумышленникам будет сложнее делать запросы или получать доступ к вашему серверу. Однако в настоящее время Redis не требует от пользователей аутентификации перед внесением изменений в его конфигурацию или данные, хранящиеся в нем. Чтобы исправить это, Redis позволяет вам требовать от пользователей аутентификацию с помощью пароля перед внесением изменений через клиента Redis (redis-cli).

Шаг 4 - Настройка пароля Redis

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

sudo nano /etc/redis/redis.conf

Прокрутите до раздела SECURITY и найдите закомментированную директиву, которая выглядит следующим образом:

# requirepass foobared

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

Важно! Так как redis может выдерживать до 150 тысяч запросов в секунду, то рекомендуется использовать очень сложный пароль. Так как слабый пароль могут подобрать за пару секунд.

Например, вы можете сгенерировать его командой: openssl rand 60 | openssl base64 -A

Выглядит результат примерно так:

UenFTv6pGMbwp2GzsoLefHdEEb2GpoMYJbLyiWk2XB3hLR3yUz6q9c5vwU+ahZQxZJfkYv+LOv1vx9vX

вставьте этот пароль в директиву requirepass

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

sudo systemctl restart redis.service

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

redis-cli

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

set key1 10

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

(error) NOAUTH Authentication required.

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

auth your_redis_password

Redis подтверждает:

OK

После этого повторный запуск предыдущей команды будет успешным:

set key1 10
OK

Получить значения нового ключа key1:

get key1
"10"

После подтверждения того, что вы можете выполнять команды в клиенте Redis после авторизации, вы можете выйти из redis-cli:

quit

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

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

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

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

Некоторые из команд, которые считаются опасными, включают в себя: FLUSHDB, FLUSHALL, KEYS, PEXPIRE, DEL, CONFIG, SHUTDOWN, BGREWRITEAOF, BGSAVE, SAVE, SPOP, SREM, RENAME и DEBUG. Это не полный список, но переименование или отключение всех команд в этом списке является хорошей отправной точкой для повышения безопасности вашего сервера Redis.

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

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

sudo nano  /etc/redis/redis.conf

Внимание: Следующие шаги, показывающие, как отключить и переименовать команды, являются примерами. Вы можете отключить или переименовать только те команды, которые имеют смысл для вас. Вы можете самостоятельно просмотреть полный список команд и определить, как они могут быть использованы неправильно на сайте redis.io/comnds.

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

. . .
# 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

Предположим, что вы переименовали команду CONFIG в ASC12_CONFIG, как и в предыдущем примере. Во-первых, попробуйте использовать оригинальную команду CONFIG. Она не должна сработать, потому что вы переименовали ее:

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

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

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

Наконец, вы можете выйти из redis-cli:

exit

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

NOAUTH Authentication required.

Заключение

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

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

Комментарии

Пока что нет комментариев, вы можете быть первым.
Войти или Регистрация , чтобы оставлять комментарии.

Лучшие публикации

Популярные теги

Наш сайт использует куки. Узнайте больше о нашем использовании куки: политика в отношении файлов cookie
Наш сайт существует только благодаря показу онлайн-рекламы нашим посетителям.
Пожалуйста, поддержите нас, отключив блокировку рекламы.