Как установить и защитить Redis на Centos7

Վավեր է: Անժամկետ

Տարածաշրջան: Հայաստան/Երևան

Տեղադրված է: 2020-05-07

Դիտումներ: 2516

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

Redis был разработан для использования доверенными клиентами в доверенной среде и не имеет собственных надежных функций безопасности. Redis, однако, имеет https://redis.io/topics/security, который содержит несколько функций безопасности, которые включают базовый незашифрованный пароль и команду переименования и отключения. В этом руководстве приведены инструкции по настройке этих функций безопасности, а также некоторые другие параметры, которые могут повысить безопасность автономной установки Redis в CentOS 7.

Обратите внимание, что в этом руководстве не рассматриваются ситуации, когда сервер Redis и клиентские приложения находятся на разных хостах или в разных центрах обработки данных. В тех случаях, когда трафик Redis должен проходить через небезопасную или ненадежную сеть, потребуется другой набор конфигураций, например настройка SSL-прокси или https://www.digitalocean.com/community/tutorials/how-to-setup-and. -configure-an-openvpn-server-on-centos-7 [VPN] между компьютерами Redis.

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

Прежде чем мы сможем установить Redis, мы должны сначала добавить Extra Packages for Enterprise Linux (EPEL) репозиторий в списки пакетов сервера. EPEL - это репозиторий пакетов, содержащий несколько пакетов дополнительных программ с открытым исходным кодом, большинство из которых поддерживаются проектом Fedora.

Мы можем установить EPEL используя  yum :
sudo yum install epel-release
После завершения установки EPEL вы можете установить Redis, снова используя yum
sudo yum install redis -y
Это может занять несколько минут. После завершения установки запустите службу Redis:
sudo systemctl start redis.service
Если вы хотите, чтобы Redis запускался при загрузке, вы можете включить его командой enable
sudo systemctl enable redis
Вы можете проверить статус Redis, выполнив следующее:
sudo systemctl status redis.service
Output● redis.service - Redis persistent key-value database
  Loaded: loaded (/usr/lib/systemd/system/redis.service; disabled; vendor preset: disabled)
 Drop-In: /etc/systemd/system/redis.service.d
          └─limit.conf
  Active: active (running) since Thu 2018-03-01 15:50:38 UTC; 7s ago
Main PID: 3962 (redis-server)
  CGroup: /system.slice/redis.service
          └─3962 /usr/bin/redis-server 127.0.0.1:6379

Как только вы подтвердите, что Redis действительно работает, протестируйте установку с помощью этой команды:
redis-cli ping
Это должно вывести  PONG  в качестве ответа. Если это так, это означает, что на вашем сервере теперь запущен Redis, и мы можем приступить к его настройке для повышения его безопасности.

Шаг 2. Связывание Redis и его защита с помощью брандмауэра

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

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

sudo vi /etc/redis.conf
Найдите строку, начинающуюся с + bind +, и убедитесь, что она не закомментирована:
/etc/redis.conf
bind 127.0.0.1

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

/etc/redis.conf
bind

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

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

Для начала добавьте выделенную зону Redis в свою политику firewalld:
sudo firewall-cmd --permanent --new-zone=redis
Затем укажите, какой порт вы хотите открыть. Redis по умолчанию использует порт 6397
sudo firewall-cmd --permanent --zone=redis --add-port=6379/tcp
Затем укажите частные IP-адреса, которые должны быть разрешены для прохождения через брандмауэр и доступа к Redis:
sudo firewall-cmd --permanent --zone=redis --add-source=
После выполнения этих команд перезагрузите брандмауэр, чтобы реализовать новые правила:
sudo firewall-cmd --reload
При такой конфигурации, когда брандмауэр видит пакет с IP-адреса вашего клиента, он применяет правила в выделенной зоне Redis к этому соединению. Все остальные соединения будут обрабатываться в зоне по умолчанию + public +. Службы в зоне по умолчанию применяются ко всем соединениям, а не только к тем, которые явно не совпадают, поэтому вам не нужно добавлять другие службы (например, SSH) в зону Redis, поскольку эти правила будут применяться к этому соединению автоматически.

Если вы решили set firewall используя Iptables, вы будете необходимо предоставить вашим вторичным хостам доступ к порту, который использует Redis с помощью следующих команд:
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp -s /32 --dport 6397 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -P INPUT DROP

Обязательно сохраните правила брандмауэра Iptables, используя механизм, предоставляемый вашим дистрибутивом. Вы можете узнать больше о Iptables, ознакомившись с нашим Iptables руководством по основным вопросам.

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

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

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

Конфигурирование пароля Redis включает одну из его встроенных функций безопасности - команду  auth  - которая требует от клиентов аутентификации перед тем, как им будет разрешен доступ к базе данных. Как и в случае настройки  bind , пароль настраивается непосредственно в файле конфигурации Redis, / etc / redis.conf . Снова откройте этот файл:
sudo vi /etc/redis.conf

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

/etc/redis.conf
# requirepass foobared
 

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

Обратите внимание: ввод этой команды в том виде, в котором она написана, будет каждый раз генерировать один и тот же пароль Чтобы создать пароль, отличный от того, который он будет генерировать, измените слово в кавычках на любое другое слово или фразу.
echo "" | sha256sum

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

/etc/redis.conf
requirepass

Если вы предпочитаете более короткий пароль, используйте вывод команды ниже. Опять же, измените слово в кавычках, чтобы он не генерировал тот же пароль, что и этот:
echo "" | sha1sum
После установки пароля сохраните и закройте файл, затем перезапустите Redis:
sudo systemctl restart redis.service
Чтобы проверить, работает ли пароль, откройте командную строку Redis:
redis-cli
Ниже приведена последовательность команд, используемая для проверки работоспособности пароля Redis. Первая команда пытается установить ключ на значение перед аутентификацией.
set key1 10
Это не сработает, так как мы еще не прошли аутентификацию, поэтому Redis возвращает ошибку.
Output(error) NOAUTH Authentication required.
Следующая команда аутентифицируется с паролем, указанным в файле конфигурации Redis.
auth​​​​​​​
Redis подтвердит, что мы прошли проверку подлинности:
OutputOK​​​​​​​
После этого повторное выполнение предыдущей команды должно быть успешным:
set key1 10
OutputOK​​​​​​​

Команда get key1  запрашивает у Redis значение нового ключа.
get key1
Output"10"​​​​​​​

Эта последняя команда выхода  redis-cli. Вы также можете использовать  exit :
quit​​​​​​​
 

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

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

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

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

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

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

  • + + FLUSHDB

  • + + FlushAll

  • + + КЛЮЧИ

  • + + PEXPIRE

  • + DEL, +

  • + CONFIG

  • + + ВЫКЛЮЧЕНИЕ

  • + + BGREWRITEAOF

  • + + BGSAVE

  • + + SAVE

  • + + SPOP

  • + + SREM + RENAME + + DEBUG +

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

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

Как и пароль аутентификации, команды переименования или отключения настраиваются в разделе  SECURITY  файла  / etc / redis.conf . Чтобы включить или отключить команды Redis, откройте файл конфигурации для редактирования еще раз:
sudo vi /etc/redis.conf

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

/etc/redis.conf

# It is also possible to completely kill a command by renaming it into
# an empty string:
#

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

/etc/redis.conf
rename-command ConFIG ""

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

sudo service redis-server restart

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

redis-cli

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

auth
OutputOK

Предполагая, что вы переименовали команду * ConFIG * в * ASC12_ConFIG *, попытка использовать команду  config  должна завершиться неудачей.

config get requirepass
Output(error) ERR unknown command config

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

asc12_config get requirepass
Output1) "requirepass"
2) "your_redis_password"

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

exit

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

OutputNOAUTH Authentication required.
 

Шаг 5. Установка прав доступа к каталогу данных и прав доступа к файлам

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

Вы можете проверить это с помощью  grep  -ing для каталога данных Redis в длинном списке его родительского каталога. Команда и ее вывод приведены ниже.

ls -l /var/lib | grep redis
Output 2 4096 Aug 6 09:32 redis

Вы можете видеть, что каталог данных Redis принадлежит пользователю * redis * с дополнительным доступом, предоставленным группе * redis *. Этот параметр владения является безопасным, но разрешения папки (которые установлены на 755) - нет. Чтобы гарантировать, что только пользователь Redis имеет доступ к папке и ее содержимому, измените параметр разрешений на 770:

sudo chmod 770 /var/lib/redis

Другое разрешение, которое вы должны изменить, - это разрешение в файле конфигурации Redis. По умолчанию он имеет разрешение на доступ к файлу 644 и принадлежит * root *, а второстепенное владение - группе * root *:

ls -l /etc/redis.conf
Output 1 30176 Jan 14 2014 /etc/redis.conf

Это разрешение (644) доступно для чтения всем. Это создает проблему безопасности, так как файл конфигурации содержит незашифрованный пароль, который вы настроили на шаге 4, а это означает, что нам нужно изменить владельца файла конфигурации и разрешения. В идеале он должен принадлежать пользователю * redis *, а второстепенное - группе * redis *. Для этого выполните следующую команду:

sudo chown redis:redis /etc/redis.conf

Затем измените разрешения, чтобы только владелец файла мог читать и / или записывать в него:

sudo chmod 660 /etc/redis.conf

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

ls -l /etc/redis.conf
Outputtotal 40 1 29716 Sep 22 18:32 /etc/redis.conf

Наконец, перезапустите Redis:

sudo service redis-server restart

Поздравляем, ваша установка Redis теперь должна быть более безопасной!

Заключение

Имейте в виду, что, как только кто-то вошел в систему на вашем сервере, очень легко обойти функции безопасности, связанные с Redis, которые мы ввели. Вот почему наиболее важной функцией безопасности, описанной в этом руководстве, является брандмауэр, поскольку он предотвращает вход неизвестных пользователей на ваш сервер.
​​​​​​​----------------------------------------------------------------------------------------------
​​​​​​​https://www.codeflow.site/ru/article/how-to-install-secure-redis-centos-7

  Մեկնաբանություններ 0

Top