One place for hosting & domains

      обеспечение

      Установка и обеспечение безопасности Grafana в Ubuntu 20.04


      Автор выбрал COVID-19 Relief Fund для получения пожертвования в рамках программы Write for DOnations.

      Введение

      Grafana — это инструмент визуализации и мониторинга данных с открытым исходным кодом, который интегрируется со сложными данными из таких источников, как Prometheus, InfluxDB, Graphite, ElasticSearch. Grafana позволяет создавать предупреждения, уведомления и специальные фильтры для данных, а также проще взаимодействовать с коллегами посредством встроенных функций обмена данными.

      В этом обучающем руководстве вы установите Grafana и защитите его сертификатом SSL и обратным прокси-сервером Nginx. После настройки Grafana у вас будет возможность настроить аутентификацию пользователя через GitHub, что позволит лучше организовать разрешения для вашей команды.

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

      Для данного обучающего модуля вам потребуется следующее:

      • Один сервер Ubuntu 20.04, настроенный в соответствии с указаниями обучающего модуля Начальная настройка сервера для Ubuntu 20.04, включая пользователя без привилегий root с привилегиями sudo и настроенный брандмауэр ufw.
      • Зарегистрированное полное доменное имя. В этом обучающем руководстве мы будем использовать your_domain. Вы можете купить доменное имя на Namecheap, получить его бесплатно на Freenom или воспользоваться услугами любого предпочитаемого регистратора доменных имен.
      • Следующие записи DNS, настроенные для вашего сервера. Вы можете следовать указаниям руководства Настройка имени хоста с помощью DigitalOcean для получения информации о том, как их добавить.
        • Запись A, где your_domain указывает на публичный IP-адрес вашего сервера.
        • Запись A, где www.your_domain указывает на публичный IP-адрес вашего сервера.
      • Nginx настроен в соответствии с руководством Установка Nginx в Ubuntu 20.04, включая блок сервера для вашего домена.
      • Блок сервера Nginx с настройкой Let’s Encrypt, который можно установить, следуя руководству Защита Nginx с помощью Let’s Encrypt в Ubuntu 20.04.
      • Дополнительно для настройки аутентификации GitHub вам потребуется учетная запись GitHub, связанная с организацией.

      Шаг 1 — Установка Grafana

      На этом первом шаге вы установите Grafana на сервер Ubuntu 20.04. Вы можете установить Grafana либо путем загрузки непосредственно с официального веб-сайта, либо через репозиторий APT. Поскольку репозиторий APT упрощает установку обновлений Grafana и управление ими, в этом обучающем руководстве мы будем использовать этот метод.

      Скачайте ключ GPG Grafana с помощью wget, а затем выведите результат на apt-key. Это добавит ключ в список надежных ключей установки APT, что позволит загрузить и проверить пакет Grafana с подписью GPG:

      • wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -

      В этой команде опция -q выключает сообщение об обновлении статуса для wget, а -O выводит файл, который вы загрузили в терминал. Эти два варианта гарантируют, что в apt-key​​​ выводится только содержимое загруженных файлов.

      Затем добавьте репозиторий Grafana в свои источники APT:

      • sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"

      Обновите свой кэш APT для обновления списка пакетов:

      Теперь вы можете перейти к установке:

      После установки Grafana используйте systemctl для запуска сервера Grafana:

      • sudo systemctl start grafana-server

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

      • sudo systemctl status grafana-server

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

      Output

      ● grafana-server.service - Grafana instance Loaded: loaded (/lib/systemd/system/grafana-server.service; disabled; vendor preset: enabled) Active: active (running) since Thu 2020-05-21 08:08:10 UTC; 4s ago Docs: http://docs.grafana.org Main PID: 15982 (grafana-server) Tasks: 7 (limit: 1137) ...

      В этом выводе содержится информация о процессе Grafana, включая его статус, главный идентификатор процесса (PID) и многое другое. active (running) указывает, что процесс выполняется корректно.

      Наконец, активируйте службу для автоматического запуска Grafana при загрузке:

      • sudo systemctl enable grafana-server

      Результат будет выглядеть следующим образом:

      Output

      Synchronizing state of grafana-server.service with SysV service script with /lib/systemd/systemd-sysv-install. Executing: /lib/systemd/systemd-sysv-install enable grafana-server Created symlink /etc/systemd/system/multi-user.target.wants/grafana-server.service → /usr/lib/systemd/system/grafana-server.service.

      Это подтверждает, что systemd создал необходимые символические ссылки для автоматического запуска Grafana.

      Grafana теперь установлен и готов к использованию. Затем вы защитите подключение к Grafana с помощью обратного прокси-сервера и сертификата SSL.

      Шаг 2 — Настройка обратного прокси-сервера

      Использование сертификата SSL гарантирует безопасность ваших данных путем шифрования подключения к Grafana и от него. Однако для использования этого подключения сначала необходимо перенастроить Nginx в обратный прокси-сервер для Grafana.

      Откройте файл конфигурации Nginx, который вы создали при настройке блока сервера Nginx с помощью Let’s Encrypt в предварительных требованиях. Вы можете использовать любой текстовый редактор, но для этого обучающего руководства мы будем использовать nano:

      • sudo nano /etc/nginx/sites-available/your_domain

      Найдите следующий блок:

      /etc/nginx/sites-available/your_domain

      ...
          location / {
              try_files $uri $uri/ =404;
          }
      ...
      

      Поскольку вы уже настроили Nginx для связи через SSL и поскольку весь веб-трафик на ваш сервер уже проходит через Nginx, вам просто нужно сообщить Nginx, чтобы он пересылал все запросы в Grafana, который работает в порту 3000 по умолчанию.

      Удалите существующую строку try_files в этом location block и замените ее на proxy_pass:

      /etc/nginx/sites-available/your_domain

      ...
          location / {
              proxy_pass http://localhost:3000;
          }
      ...
      

      Это будет направлять прокси-сервер в соответствующий порт. После завершения сохраните и закройте файл, нажав CTRL+X, Y, а затем ENTER, если вы используете nano.

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

      Результат будет выглядеть следующим образом:

      Output

      nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful

      Наконец, активируйте изменения, перезагрузив Nginx:

      • sudo systemctl reload nginx

      Теперь вы можете получить доступ к экрану входа по умолчанию Grafana, указав в адресной строке браузера https://your_domain​​​. Если вы не можете получить доступ к Grafana, убедитесь, что брандмауэр установлен на разрешение приема трафика в порту 443, и затем отследите предыдущие инструкции.

      После шифрования подключения к Grafana вы можете предпринять дополнительные меры защиты, начиная с изменения административных учетных данных Grafana по умолчанию.

      Шаг 3 — Обновление учетных данных

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

      Начнем с перехода к https://your_domain из вашего веб-браузера. Это выведет экран входа по умолчанию, где вы увидите логотип Grafana, форму для ввода адреса электронной почты или имени пользователя (Email or username​​​) и пароля (Password​​​), кнопку входа (Log in) и ссылку восстановления пароля (Forgot your password?).

      Вход в Grafana

      Введите admin в поля Адрес электронной почты или имя пользователя и Пароль, а затем нажмите на кнопку Вход.

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

      Замените пароль

      Введите пароль для запуска в поле New password (Новый пароль) и Confirm new password (Подтвердить новый пароль).

      Здесь можно нажать Submit​​​ (Отправить) для сохранения новой информации и Skip (Пропустить), чтобы пропустить это действие. Если вы пропустите этот шаг, вам будет предложено изменить пароль при следующем входе.

      Чтобы повысить безопасность настройки Grafana, нажмите Submit (Отправить). Вы попадете на приветственную панель управления Grafana:

      Панель управления

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

      Шаг 4 — Отключение регистраций Grafana и анонимного доступа

      Grafana предоставляет опции, позволяющие посетителям создавать пользовательские собственные учетные записи и просматривать панель управления без регистрации. Если доступ к Grafana через Интернет отсутствует или при работе с общедоступными данными, например состояние службы, возможно, вы захотите разрешить эти функции. Однако при использовании Grafana в режиме онлайн для работы с чувствительными данными анонимный доступ может сказаться на безопасности. Для решения этой проблемы необходимо немного изменить конфигурацию Grafana.

      Запустите для редактирования главный файл конфигурации Grafana:

      • sudo nano /etc/grafana/grafana.ini

      Найдите директиву allow_sign_up под заголовком [users]:

      /etc/grafana/grafana.ini

      ...
      [users]
      # disable user signup / registration
      ;allow_sign_up = true
      ...
      

      При активации этой директивы с помощью true появится кнопка Sign Up (Регистрация) на экране входа, позволяющая пользователям самостоятельно регистрироваться и получать доступ к Grafana.

      При отключении этой директивы с помощью false кнопка Sign Up (Регистрация) удаляется, что повышает безопасность и конфиденциальность Grafana.

      Раскомментируйте эту директиву, удалив ; в начале строки, а затем установите опцию false:

      /etc/grafana/grafana.ini

      ...
      [users]
      # disable user signup / registration
      allow_sign_up = false
      ...
      

      Затем найдите следующую директиву enabled под заголовком [auth.anonymous]:

      /etc/grafana/grafana.ini

      ...
      [auth.anonymous]
      # enable anonymous access
      ;enabled = false
      ...
      

      Установка enabled вместо true дает незарегистрированным пользователям доступ к вашим панелям управления; установка false предоставляет доступ к панели управления только для зарегистрированных пользователей.

      Раскомментируйте эту директиву, удалив ; в начале строки, а затем измените опцию false:

      /etc/grafana/grafana.ini

      ...
      [auth.anonymous]
      # enable anonymous access
      enabled = false
      ...
      

      Сохраните файл и выйдите из текстового редактора.

      Чтобы активировать изменения, перезапустите Grafana:

      • sudo systemctl restart grafana-server

      Убедитесь, что все работает, проверив состояние службы Grafana:

      • sudo systemctl status grafana-server

      Как и ранее, вывод сообщит, что Grafana active (running)​​​.

      Теперь впишите в строке браузера https://your_domain. Чтобы вернуться на экран Регистрации, установите курсор на ваш аватар в нижнем левом углу экрана и нажмите на появившуюся кнопку Выход.

      После выхода проверьте, что кнопка Sign Up (Регистрация) отсутствует и вы не можете зарегистрироваться, не введя учетные данные для входа.

      На этом этапе Grafana полностью настроен и готов к работе. Затем вы можете упростить процесс входа для вашей организации путем аутентификации через GitHub.

      (Дополнительно) Шаг 5 — Настройка приложения OAuth для GitHub

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

      Сначала войдите в учетную запись GitHub, связанную с вашей организацией, а затем перейдите на страницу профиля GitHub на https://github.com/settings/profile

      Переключите контекст настроек, нажав на имя в левой части экрана, а затем выбрав свою организацию в выпадающем меню. Это позволит переключить контекст с Personal settings (Персональные настройки) на Organization settings (Настройки организации).

      На следующем экране вы увидите Organization profile (Профиль организации), где можно будет изменить такие настройки, как Organization display name (Отображаемое имя организации), Email (Адрес электронной почты) организации и URL (URL-адрес) организации.

      Поскольку Grafana использует OAuth — открытый стандарт для предоставления удаленного доступа к локальным ресурсам третьим сторонам — для аутентификации пользователей через GitHub, вам нужно будет создать новое приложение OAuth в GitHub.

      Нажмите на ссылку OAuth Apps (Приложения OAuth) в Developer settings (Настройки разработчика) в нижнем левом углу экрана.

      Если у вас уже нет приложений OAuth, связанных с вашей организацией на GitHub, вы получите уведомление No Organization Owned Applications​​​ (Нет приложений, принадлежащих организации). В противном случае вы увидите список приложений OAuth, уже подключенных к вашей учетной записи.

      Нажмите на кнопку New OAuth App​​​ (Новое приложение OAuth), чтобы продолжить.

      На следующем экране впишите следующие данные об установке Grafana:

      • Application name​​​ (Имя приложения) — это поможет отличать разные приложения OAuth друг от друга.
      • Homepage URL (URL-адрес домашней страницы) — это укажет GitHub, где найти Grafana. Введите https://your_domain в это поле, заменив your_domain на свой домен.
      • Application Description​​​ (Описание приложения) — описание цели вашего приложения OAuth.
      • Application callback URL (URL-адрес вызова приложения) — адрес, на который будут направляться пользователи после успешной аутентификации. Для Grafana это поле должно быть установлено на https://your_domain/login/github.

      Помните, что пользователи Grafana, которые выполняют вход через GitHub, будут видеть данные, введенные в первые три предыдущих поля, поэтому следует вводить значимую и соответствующую информацию.

      После завершения форма будет выглядеть примерно следующим образом:

      Приложение OAuth для регистрации в GitHub

      Нажмите на зеленую кнопку Register application (Регистрация приложения).

      Теперь вы будете перенаправлены на страницу, содержащую Client ID (Идентификатор клиента) и Client Secret (Секрет клиента), связанные с вашим новым приложением OAuth. Запишите оба значения, так как потребуется добавить их в главный файл конфигурации Grafana для завершения настройки.

      Предупреждение! Держите свой Идентификатор клиента и Секрет клиента в надежном закрытом месте, так как они могут быть использованы для атаки.

      После создания вашего приложения OAuth для GitHub вы готовы изменить конфигурацию Grafana для использования GitHub для аутентификации.

      (Дополнительно) Шаг 6 — Настройка Grafana в качестве приложения OAuth для GitHub

      Чтобы завершить аутентификацию GitHub для настройки Grafana, вы внесете некоторые изменения в файлы конфигурации Grafana.

      Для начала откройте главный файл конфигурации Grafana.

      • sudo nano /etc/grafana/grafana.ini

      Найдите заголовок [auth.github] и раскомментируйте этот раздел, удалив ;​​​ в начале каждой строки, кроме ;allowed_domains = и ;team_ids =, которые не будут изменены в этом обучающем руководстве.

      Затем выполните следующие изменения:

      • Установите enabled и allow_sign_up вместо true. Это позволит выполнить аутентификацию GitHub разрешит членам дозволенной организации самостоятельно создавать учетные записи. Обратите внимание, что эта настройка отличается от свойства allow_sign_up в [users]​​​, которое вы изменили в Шаге 4.
      • Установите client_id и client_secret​​​ вместо значений, полученных во время создания приложения OAuth для GitHub.
      • Установите allowed_organizations​​​ в качестве имени вашей организации, чтобы только члены вашей организации могли регистрироваться и входить в Grafana.

      Полная конфигурация будет выглядеть следующим образом:

      /etc/grafana/grafana.ini

      ...
      [auth.github]
      enabled = true
      allow_sign_up = true
      client_id = your_client_id_from_github
      client_secret = your_client_secret_from_github
      scopes = user:email,read:org
      auth_url = https://github.com/login/oauth/authorize
      token_url = https://github.com/login/oauth/access_token
      api_url = https://api.github.com/user
      ;allowed_domains =
      ;team_ids =
      allowed_organizations = your_organization_name
      ...
      

      Теперь вы сообщили Grafana всю необходимую информацию о GitHub. Чтобы завершить настройку, вам нужно будет активировать переадресации за обратным прокси-сервером. Это выполняется путем установки значения root_url под заголовком [server].

      /etc/grafana/grafana.ini

      ...
      [server]
      root_url = https://your_domain
      ...
      

      Сохраните конфигурацию и закройте файл.

      Затем перезапустите Grafana для активации изменений:

      • sudo systemctl restart grafana-server

      Наконец, убедитесь, что служба запущена и работает.

      • sudo systemctl status grafana-server

      Вывод будет указывать, что служба active (running)​​​.

      Теперь протестируйте новую систему аутентификации, перейдя на https://your_domain. Если вы уже вошли в Grafana, наведите мышку на аватар для входа в нижнем левом углу экрана и нажмите Sign out (Выход) в дополнительном меню, которое появляется рядом с вашим именем.

      На странице входа вы увидите новый раздел под начальной кнопкой Log in (Вход), который включает кнопку Sign in with GitHub (Регистрация с помощью GitHub) с логотипом GitHub.

      Страница входа Grafana с помощью GitHub

      Нажмите на кнопку Sign in with GitHub (Регистрация с помощью GitHub) для перенаправления на GitHub, где вы зарегистрируете свою учетную запись GitHub и подтвердите свое намерение авторизовать Grafana (Authorize Grafana).

      Нажмите на зеленую кнопку Authorize your_github_organization (Авторизовать your_github_organization).

      Примечание. Убедитесь, что ваша учетная запись GitHub принадлежит к утвержденной организации, а ваш адрес электронной почты Grafana соответствует вашему адресу электронной почты GitHub. Если вы попытаетесь аутентифицировать учетную запись GitHub, которая не принадлежит к утвержденной организации, вы получите сообщение Login Failed (Ошибка входа) с текстом User not a member of one of the required organizations (Пользователь не является участником ни одной из утвержденных организаций).

      Теперь вы выполните вход с помощью существующей учетной записи Grafana. Если учетная запись уже не существует для пользователя, в качестве которого вы выполнили вход, Grafana создаст новую учетную запись пользователя с разрешениями для просмотра (Viewer), чтобы новые пользователи могли использовать только существующие панели управления.

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

      • sudo nano /etc/grafana/grafana.ini

      Найдите директиву auto_assign_org_role под заголовком [users] и раскомментируйте настройку, удалив ; в начале строки.

      Измените директиву на одно из следующих значений:

      • Viewer — может использовать только существующие панели управления
      • Editor​​​ — может использовать, изменять и добавлять панели управления
      • Admin — имеет разрешение выполнять все действия

      В этом руководстве будет установлено автоматическое присвоение Viewer:

      /etc/grafana/grafana.ini

      ...
      [users]
      ...
      auto_assign_org_role = Viewer
      ...
      

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

      • sudo systemctl restart grafana-server

      Проверьте состояние службы:

      • sudo systemctl status grafana-server

      Как и ранее, состояние будет выглядеть как active (running)​​​.

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

      Заключение

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

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



      Source link

      Установка и обеспечение безопасности Redis в Ubuntu 20.04 [Краткое руководство]


      Введение

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

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

      Для выполнения данного руководства вам потребуется сервер Ubuntu 20.04 с пользователем без прав root с привилегиями sudo и брандмауэром с конфигурацией ufw. Вы можете выполнить настройку, следуя указаниям документа Начальная настройка сервера для Ubuntu 20.04​​​.

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

      Начните с обновления кэша локальных пакетов apt:

      Затем установите Redis. Для этого введите следующее:

      • sudo apt install redis-server

      Далее откройте файл конфигурации Redis в любом текстовом редакторе:

      • sudo nano /etc/redis/redis.conf

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

      /etc/redis/redis.conf

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

      Сохраните файл и закройте его после завершения. Если вы использовали nano для редактирования файла, нажмите CTRL + X, Y, а затем ENTER.

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

      • sudo systemctl restart redis.service

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

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

      Output

      PONG

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

      Output

      OK

      Запросите значение с помощью следующей команды:

      Если все работает корректно, вы получите сохраненное значение:

      Output

      "It's working!"

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

      Шаг 2 — Настройка пароля Redis

      Вы можете настроить пароль Redis непосредственно в файле конфигурации Redis /etc/redis/redis.conf. Откройте этот файл еще раз в предпочитаемом редакторе:

      • sudo nano /etc/redis/redis.conf

      Прокрутите содержимое файла до раздела SECURITY и найдите следующую закомментированную директиву:

      /etc/redis/redis.conf

      . . .
      # requirepass foobared
      . . .
      

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

      /etc/redis/redis.conf

      . . .
      requirepass your_redis_password
      . . .
      

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

      • sudo systemctl restart redis.service

      Чтобы проверить, работает ли пароль, откройте клиент Redis:

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

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

      Output

      (error) NOAUTH Authentication required.

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

      Redis принимает пароль:

      Output

      OK

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

      Output

      OK

      get key1 запрашивает в Redis значение нового ключа.

      Output

      "10"

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

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

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

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

      • sudo nano /etc/redis/redis.conf

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

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

      /etc/redis/redis.conf

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

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

      /etc/redis/redis.conf

      . . .
      # rename-command CONFIG ""
      rename-command SHUTDOWN SHUTDOWN_MENOT
      rename-command CONFIG ASC12_CONFIG
      . . .
      

      Сохраните изменения и закройте файл.

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

      • sudo systemctl restart redis.service

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

      Затем выполните аутентификацию:

      Output

      OK

      Если вы переименовали команду CONFIG в ASC12_CONFIG, как в предыдущем примере, попробуйте использовать первоначальную команду CONFIG. Команда не будет выполнена, потому что вы переименовали ее:

      Output

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

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

      • asc12_config get requirepass

      Output

      1) "requirepass" 2) "your_redis_password"

      Заключение

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



      Source link

      Установка и обеспечение безопасности Redis в Ubuntu 20.04


      Предыдущая версия данного обучающего руководства была написана Джастином Эллингвудом

      Введение

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

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

      Для выполнения данного руководства вам потребуется сервер Ubuntu 20.04 с non-root user с привилегиями sudo и брандмауэром с конфигурацией ufw. Вы можете выполнить настройку, следуя указаниям документа Начальная настройка сервера для Ubuntu 20.04​​​.

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

      Мы будем использовать диспетчер пакетов APT для установки redis из официальных репозиториев Ubuntu. На момент написания этой статьи в репозиториях по умолчанию доступна версия 5.0.7.

      Начните с обновления кэша локальных пакетов apt:

      Затем установите Redis. Для этого введите следующее:

      • sudo apt install redis-server

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

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

      • sudo nano /etc/redis/redis.conf

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

      /etc/redis/redis.conf

      . . .
      
      # 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 на данный момент,поэтому сохраните и закройте его после завершения редактирования. Если вы использовали nano для редактирования файла, нажмите CTRL + X, Y, а затем ENTER.

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

      • sudo systemctl restart redis.service

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

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

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

      Сначала проверьте, что служба Redis запущена:

      • sudo systemctl status redis

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

      Output

      ● redis-server.service - Advanced key-value store Loaded: loaded (/lib/systemd/system/redis-server.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2020-04-30 23:26:54 UTC; 4s ago Docs: http://redis.io/documentation, man:redis-server(1) Process: 36552 ExecStart=/usr/bin/redis-server /etc/redis/redis.conf (code=exited, status=0/SUCCESS) Main PID: 36561 (redis-server) Tasks: 4 (limit: 2345) Memory: 1.8M CGroup: /system.slice/redis-server.service └─36561 /usr/bin/redis-server 127.0.0.1:6379 . . .

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

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

      • sudo systemctl disable redis

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

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

      Output

      PONG

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

      Output

      OK

      Запросите значение с помощью следующей команды:

      Если все работает корректно, вы получите сохраненное значение:

      Output

      "It's working!"

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

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

      • sudo systemctl restart redis

      Затем снова выполните подключение с помощью клиента командной строки:

      И убедитесь, что ваше тестовое значение все еще доступно.

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

      Output

      "It's working!"

      Выйдите в командную строку после завершения:

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

      Шаг 3 — Привязка к localhost

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

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

      • sudo nano /etc/redis/redis.conf

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

      /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

      Output

      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

      Примечание: команда netstat может отсутствовать по умолчанию в вашей системе. В этом случае вы можете установить ее (а также многие другие удобные сетевые инструменты) с помощью следующей команды:

      • sudo apt install net-tools

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

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

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

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

      • sudo nano /etc/redis/redis.conf

      Прокрутите содержимое файла до раздела SECURITY и найдите следующую закомментированную директиву:

      /etc/redis/redis.conf

      . . .
      # requirepass foobared
      . . .
      

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

      Примечание: над директивой requirepass в файле redis.conf располагается закомментированное предупреждение:

      /etc/redis/redis.conf

      . . .
      # Warning: since Redis is pretty fast an outside user can try up to
      # 150k passwords per second against a good box. This means that you should
      # use a very strong password otherwise it will be very easy to break.
      #
      . . .
      

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

      • openssl rand 60 | openssl base64 -A

      Вывод должен выглядеть следующим образом:

      Output

      RBOJ9cCNoGCKhlEBwQLHri1g+atWgn4Xn4HwNUbtzoVxAYxkiYBi7aufl4MILv1nxBqR4L6NNzI0X6cE

      Скопируйте и вставьте вывод этой команды в качестве нового значения для requirepass. Оно должно выглядеть следующим образом:

      /etc/redis/redis.conf

      requirepass RBOJ9cCNoGCKhlEBwQLHri1g+atWgn4Xn4HwNUbtzoVxAYxkiYBi7aufl4MILv1nxBqR4L6NNzI0X6cE

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

      • sudo systemctl restart redis.service

      Чтобы проверить, работает ли пароль, откройте клиент Redis:

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

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

      Output

      (error) NOAUTH Authentication required.

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

      Redis принимает пароль:

      Output

      OK

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

      Output

      OK

      get key1 запрашивает в Redis значение нового ключа.

      Output

      "10"

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

      Затем мы рассмотрим переименование команд 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/commands.

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

      /etc/redis/redis.conf

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

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

      /etc/redis/redis.conf

      . . .
      # rename-command CONFIG ""
      rename-command SHUTDOWN SHUTDOWN_MENOT
      rename-command CONFIG ASC12_CONFIG
      . . .
      

      Сохраните изменения и закройте файл.

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

      • sudo systemctl restart redis.service

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

      Затем выполните аутентификацию:

      Output

      OK

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

      Output

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

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

      • asc12_config get requirepass

      Output

      1) "requirepass" 2) "your_redis_password"

      После этого вы можете закрыть redis-cli:

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

      Output

      NOAUTH Authentication required.

      В отношении практики переименования команд в конце раздела SECURITY файла /etc/redis/redis.conf есть следующее предостережение:

      /etc/redis/redis.conf

      . . .
      # Please note that changing the name of commands that are logged into the
      # AOF file or transmitted to replicas may cause problems.
      . . .
      

      Примечание: проект Redis предпочитает использовать термины «master» и «slave», в то время как DigitalOcean предпочитает использовать варианты «primary» и «secondary». Чтобы не допустить путаницы, мы решили использовать здесь термины, используемые в документации Redis.

      Это значит, что, если переименованная команда не содержится в файле AOF, либо содержится, но AOF файл не передается «slave» компонентам, не будет никаких проблем.

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

      Если вы используете AOF и работаете с конфигурацией master-slave, изучите этот ответ на странице проблем проекта на GitHub. Ниже приводится ответ на вопрос автора:

      Команды сохраняются в AOF и воспроизводятся в «slave» компоненте в таком же виде, как были отправлены, поэтому если вы попытаетесь использовать AOF для экземпляра, где не было выполнено переименование, могут возникнуть противоречия, так как команда не может быть выполнена (то же самое характерно для «slave» компонентов).

      Таким образом, при переименовании необходимо убедиться, что переименованные команды применяются во всех экземплярах на установках типа «master-slave».

      Заключение

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

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



      Source link