Использование host-config для настройки региона

host-config может использоваться для внесения специфических настроек в конфигурацию ОС узлов. Это можно делать как перед развёртыванием региона, так и после. Если вы выполняете конфигурацию перед развёртыванием региона, вы можете не запускать пайплайн после внесения изменений в host-config.yml, они будут применены при последующем запуске основного пайплайна по развёртыванию региона.

Файл host-config находится в репозитории региона по пути host_config/host-config.yml. Если он отсутствует, вы можете создать его самостоятельно.

Предупреждение

Задача host-config взаимодействует с системной утилитой sysctl. Конфликты между параметрами разрешаются с учётом приоритета конфигурационных файлов. Чтобы избежать нештатного поведения, перед запуском задачи host-config проверьте актуальные конфигурационные файлы sysctl на наличие параметров, которые пересекаются с настройками, вносимыми этой задачей.

Настройка NTP в регионе

Для выполнения настройки протокола синхронизации времени NTP на узлах региона выполните следующие действия:

  1. Войдите в GitLab и перейдите в репозиторий региона project_k / deployments / <имя региона>.

  2. Откройте файл host_config/host-config.yml и добавьте в него строки с указанием временной зоны и IP-адреса NTP-сервера:

    ntp_enabled: true
    ntp_timezone: Europe/Moscow
    ntp_servers:
      - <IP_address>
    
  3. Либо вместо списка отдельных NTP-серверов (ntp_servers) можете указать пулы NTP-серверов с помощью параметра ntp_pools:

    ntp_enabled: true
    ntp_timezone: Europe/Moscow
    ntp_pools:
      - 0.pool.ntp.org
      - 1.pool.ntp.org
    

    Если заданы оба параметра, приоритет имеет ntp_servers.

  4. Создайте новый пайплайн: Build > Pipelines > New Pipeline.

  5. Оставьте ветку по умолчанию, соответствующую установленному релизу.

  6. Запустите пайплайн New pipeline.

  7. Дождитесь завершения выполнения задач на шаге setup.

  8. Запустите задачу bootstrap-servers и дождитесь её завершения.

  9. Запустите вручную задачу host-config и дождитесь её завершения.

Для проверки настройки NTP:

  1. Зайдите на любой узел региона по протоколу SSH.

  2. Выполните команду timedatectl:

    $ timedatectl
                   Local time: Tue 2024-09-17 10:36:10 MSK
               Universal time: Tue 2024-09-17 07:36:10 UTC
                     RTC time: Tue 2024-09-17 07:36:10
                    Time zone: Europe/Moscow (MSK, +0300)
    System clock synchronized: yes
                  NTP service: active
              RTC in local TZ: no
    

    Убедитесь, что включен параметр System clock synchronized, отображаются правильные время и зона.

Настройка DNS в регионе

Для выполнения настройки DNS на узлах региона выполните следующие действия:

  1. Войдите в GitLab и перейдите в репозиторий региона project_k / deployments / <имя региона>.

  2. Откройте файл host_config/host-config.yml и добавьте в него строки конфигурации DNS:

    dns_enabled: true
    dns_servers:
    - <IP_address2>
    - <IP_address3>
    dns_dnssec: false
    dns_domains: ["cloud.itkey.com"]
    

    Назначение параметров:

    • dns_enabled — включает настройку DNS на узлах региона.

    • dns_servers — список IP-адресов DNS-серверов.

    • dns_dnssec — включает (true) или отключает (false) проверку подлинности DNS-ответов по технологии DNSSEC. Значение по умолчанию — false.

    • dns_domains — список доменов поиска, добавляемых в конфигурацию распознавателя имён (параметр search в файле /etc/resolv.conf).

  3. Создайте новый пайплайн: Build > Pipelines > New Pipeline.

  4. Оставьте ветку по умолчанию, соответствующую установленному релизу.

  5. Запустите пайплайн New pipeline.

  6. Дождитесь завершения выполнения задач на шаге setup.

  7. Запустите задачу bootstrap-servers и дождитесь её завершения.

  8. Запустите вручную задачу host-config и дождитесь её завершения.

Для проверки настройки DNS:

  1. Зайдите на любой узел региона по протоколу SSH.

  2. Проверьте конфигурацию DNS на узле, выполнив команду cat /etc/resolv.conf:

    $ cat /etc/resolv.conf
    nameserver <IP_address2>
    nameserver <IP_address3>
    search cloud.itkey.com
    

Отключение истории команд

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

  1. Войдите в GitLab и перейдите в репозиторий региона project_k / deployments / <имя региона>.

  2. Откройте файл host_config/host-config.yml и добавьте в него строки конфигурации:

    security_hardening: true
    disable_history: true
    
  3. Создайте новый пайплайн: Build > Pipelines > New Pipeline.

  4. Оставьте ветку по умолчанию, соответствующую установленному релизу.

  5. Запустите пайплайн New pipeline.

  6. Дождитесь завершения выполнения задач на шаге setup.

  7. Запустите задачу bootstrap-servers и дождитесь её завершения.

  8. Запустите вручную задачу host-config и дождитесь её завершения.

Для проверки отключения истории команд:

  1. Зайдите на любой узел региона по протоколу SSH.

  2. Введите команду history и убедитесь, что вывод отсутствует.

Отключение внешних накопителей

Отключение поддержки внешних накопителей позволяет запретить использование внешних USB-накопителей. Для настройки выполните следующие действия:

  1. Войдите в GitLab и перейдите в репозиторий региона project_k / deployments / <имя региона>.

  2. Откройте файл host_config/host-config.yml и добавьте в него строки конфигурации:

    security_hardening: true
    disable_usb_storage: true
    
  3. Создайте новый пайплайн: Build > Pipelines > New Pipeline.

  4. Оставьте ветку по умолчанию, соответствующую установленному релизу.

  5. Запустите пайплайн New pipeline.

  6. Дождитесь завершения выполнения задач на шаге setup.

  7. Запустите задачу bootstrap-servers и дождитесь её завершения.

  8. Запустите вручную задачу host-config и дождитесь её завершения.

Для проверки отключения внешних накопителей:

  1. Зайдите на любой узел региона по протоколу SSH.

  2. Введите команду lsmod | grep usb_storage, чтобы убедиться, что в выводе отсутствует значение usb_storage.

Удаление группы wheel из файла /etc/sudoers

Для удаления группы wheel из списка привилегированных пользователей выполните следующие действия:

  1. Войдите в GitLab и перейдите в репозиторий региона project_k / deployments / <имя региона>.

  2. Откройте файл host_config/host-config.yml и добавьте в него строки конфигурации:

    security_hardening: true
    remove_wheel_from_sudoers: true
    
  3. Создайте новый пайплайн: Build > Pipelines > New Pipeline.

  4. Оставьте ветку по умолчанию, соответствующую установленному релизу.

  5. Запустите пайплайн New pipeline.

  6. Дождитесь завершения выполнения задач на шаге setup.

  7. Запустите задачу bootstrap-servers и дождитесь её завершения.

  8. Запустите вручную задачу host-config и дождитесь её завершения.

Для проверки:

  1. Зайдите на любой узел региона по протоколу SSH.

  2. Введите команду cat /etc/sudoers и убедитесь, что строка # %wheel ALL=(ALL) ALL закомментирована (начинается с #).

Установка привилегий доступа к файлам

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

Примечание

Настройка поддерживается только для Sberlinux.

Для установки привилегий доступа к файлам выполните следующие действия:

  1. Войдите в GitLab и перейдите в репозиторий региона project_k / deployments / <имя региона>.

  2. Откройте файл host_config/host-config.yml и добавьте в него строки конфигурации:

    security_hardening: true
    setting_file_permissions: true
    
  3. Создайте новый пайплайн: Build > Pipelines > New Pipeline.

  4. Оставьте ветку по умолчанию, соответствующую установленному релизу.

  5. Запустите пайплайн New pipeline.

  6. Дождитесь завершения выполнения задач на шаге setup.

  7. Запустите задачу bootstrap-servers и дождитесь её завершения.

  8. Запустите вручную задачу host-config и дождитесь её завершения.

Настройка безопасного текстового редактора

Данная настройка ограничивает выполнение потенциально опасных операций через текстовый редактор (например, запуск внешних команд). Используемый редактор унаследует переменные окружения PAM (Pluggable Authentication Modules), которые задаются в файле /etc/security/pam_env.conf.

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

  1. Войдите в GitLab и перейдите в репозиторий региона project_k / deployments / <имя региона>.

  2. Откройте файл host_config/host-config.yml и добавьте в него строки конфигурации:

    security_hardening: true
    copy_pam_env: true
    
  3. Создайте новый пайплайн: Build > Pipelines > New Pipeline.

  4. Оставьте ветку по умолчанию, соответствующую установленному релизу.

  5. Запустите пайплайн New pipeline.

  6. Дождитесь завершения выполнения задач на шаге setup.

  7. Запустите задачу bootstrap-servers и дождитесь её завершения.

  8. Запустите вручную задачу host-config и дождитесь её завершения.

Настройка политики паролей и учётных записей (PAM)

Данная настройка применяет усиленную политику управления паролями и учётными записями через PAM. Настройка задаёт требования к сложности и сроку действия паролей, блокировку учётной записи после серии неудачных попыток входа, а также параметры файла /etc/login.defs.

  1. Войдите в GitLab и перейдите в репозиторий региона project_k / deployments / <имя региона>.

  2. Откройте файл host_config/host-config.yml и добавьте в него строки конфигурации:

    security_hardening: true
    enable_pam_hardening: true
    
  3. Создайте новый пайплайн: Build > Pipelines > New Pipeline.

  4. Оставьте ветку по умолчанию, соответствующую установленному релизу.

  5. Запустите пайплайн New pipeline.

  6. Дождитесь завершения выполнения задач на шаге setup.

  7. Запустите задачу bootstrap-servers и дождитесь её завершения.

  8. Запустите вручную задачу host-config и дождитесь её завершения.

Настройка формата истории команд и автоматического завершения сеанса

Данная настройка размещает на узлах региона скрипты в каталоге /etc/profile.d/, которые задают расширенный формат записи истории команд (с отметками времени и сведениями о пользователе) и автоматически завершают неактивные сеансы командной оболочки.

  1. Войдите в GitLab и перейдите в репозиторий региона project_k / deployments / <имя региона>.

  2. Откройте файл host_config/host-config.yml и добавьте в него строки конфигурации:

    security_hardening: true
    enable_shell_profile_hardening: true
    
  3. Создайте новый пайплайн: Build > Pipelines > New Pipeline.

  4. Оставьте ветку по умолчанию, соответствующую установленному релизу.

  5. Запустите пайплайн New pipeline.

  6. Дождитесь завершения выполнения задач на шаге setup.

  7. Запустите задачу bootstrap-servers и дождитесь её завершения.

  8. Запустите вручную задачу host-config и дождитесь её завершения.

Исключение записей PROCTITLE из журнала аудита

Данная настройка добавляет правило аудита /etc/audit/rules.d/20-proctitle-exclude.rules, которое исключает записи типа PROCTITLE из журнала службы аудита auditd. Это уменьшает объём журнала и количество избыточных событий.

Примечание

Настройка имеет смысл при включённой службе аудита (параметр auditd_enabled, см. раздел Настройка аудита на серверах Linux/UNIX-подобных систем).

  1. Войдите в GitLab и перейдите в репозиторий региона project_k / deployments / <имя региона>.

  2. Откройте файл host_config/host-config.yml и добавьте в него строки конфигурации:

    security_hardening: true
    enable_audit_proctitle_exclude_rule: true
    
  3. Создайте новый пайплайн: Build > Pipelines > New Pipeline.

  4. Оставьте ветку по умолчанию, соответствующую установленному релизу.

  5. Запустите пайплайн New pipeline.

  6. Дождитесь завершения выполнения задач на шаге setup.

  7. Запустите задачу bootstrap-servers и дождитесь её завершения.

  8. Запустите вручную задачу host-config и дождитесь её завершения.

Настройка фильтрации системного журнала (rsyslog)

Данная настройка изменяет правило записи в файл /var/log/messages в конфигурации службы rsyslog, исключая из него сообщения почтовой подсистемы, аутентификации (authpriv), планировщика cron и локальных категорий (local0local7). Правило задаётся параметром rsyslog_messages_rule и при необходимости может быть переопределено.

  1. Войдите в GitLab и перейдите в репозиторий региона project_k / deployments / <имя региона>.

  2. Откройте файл host_config/host-config.yml и добавьте в него строки конфигурации:

    security_hardening: true
    enable_rsyslog_hardening: true
    
  3. Создайте новый пайплайн: Build > Pipelines > New Pipeline.

  4. Оставьте ветку по умолчанию, соответствующую установленному релизу.

  5. Запустите пайплайн New pipeline.

  6. Дождитесь завершения выполнения задач на шаге setup.

  7. Запустите задачу bootstrap-servers и дождитесь её завершения.

  8. Запустите вручную задачу host-config и дождитесь её завершения.

Усиление конфигурации SSH-сервера

Данная настройка применяет усиленную конфигурацию SSH-сервера в файле /etc/ssh/sshd_config: запрет входа под пользователем root, ограничение переадресации портов и туннелирования, современные алгоритмы шифрования, обмена ключами и контроля целостности (MAC). Базовый набор параметров можно дополнить или переопределить с помощью параметра sshd_custom_parameters.

Примечание

Эта настройка отличается от раздела Настройка завершения сеансов подключения к серверам: тот управляет только таймаутами сеанса (параметр sshd_enabled), тогда как enable_sshd_hardening формирует конфигурацию SSH-сервера целиком.

Предупреждение

Настройка полностью перезаписывает файл /etc/ssh/sshd_config. Перед применением убедитесь, что используемый способ доступа (например, вход по ключу) не будет заблокирован новой конфигурацией.

  1. Войдите в GitLab и перейдите в репозиторий региона project_k / deployments / <имя региона>.

  2. Откройте файл host_config/host-config.yml и добавьте в него строки конфигурации:

    security_hardening: true
    enable_sshd_hardening: true
    sshd_custom_parameters:
      PermitRootLogin: "no"
      X11Forwarding: "no"
      ClientAliveInterval: "300"
    

    Параметры из sshd_custom_parameters объединяются с набором параметров по умолчанию; при совпадении имён приоритет имеют значения из sshd_custom_parameters. Если переопределять параметры не требуется, оставьте sshd_custom_parameters пустым.

  3. Создайте новый пайплайн: Build > Pipelines > New Pipeline.

  4. Оставьте ветку по умолчанию, соответствующую установленному релизу.

  5. Запустите пайплайн New pipeline.

  6. Дождитесь завершения выполнения задач на шаге setup.

  7. Запустите задачу bootstrap-servers и дождитесь её завершения.

  8. Запустите вручную задачу host-config и дождитесь её завершения.

Настройка параметров безопасности ядра

Данная настройка применяет на узлах региона набор параметров безопасности ядра Linux через утилиту sysctl. При включении функции создаётся конфигурационный файл /etc/sysctl.d/99-keystack.conf со следующими группами параметров:

  • Защита сетевого стека — включение TCP SYN cookies, запрет маршрутизации от источника (accept_source_route) и ICMP-перенаправлений (accept_redirects, send_redirects, secure_redirects), включение обратной фильтрации пути (rp_filter), игнорирование широковещательных и некорректных ICMP-ответов.

  • Ограничение доступа к данным ядра — ограничение чтения буфера ядра (kernel.dmesg_restrict) и вывода адресов ядра (kernel.kptr_restrict), усиление JIT-компиляции BPF и запрет непривилегированного BPF, рандомизация адресного пространства (kernel.randomize_va_space), ограничение подсистемы perf.

  • Защита файловой системы — защита символьных и жёстких ссылок, именованных каналов и обычных файлов (fs.protected_*), запрет создания дампов памяти для процессов с SUID (fs.suid_dumpable).

Для применения параметров безопасности ядра выполните следующие действия:

  1. Войдите в GitLab и перейдите в репозиторий региона project_k / deployments / <имя региона>.

  2. Откройте файл host_config/host-config.yml и добавьте в него строку конфигурации:

    sysctl_hardening_enabled: true
    
  3. Создайте новый пайплайн: Build > Pipelines > New Pipeline.

  4. Оставьте ветку по умолчанию, соответствующую установленному релизу.

  5. Запустите пайплайн New pipeline.

  6. Дождитесь завершения выполнения задач на шаге setup.

  7. Запустите задачу bootstrap-servers и дождитесь её завершения.

  8. Запустите вручную задачу host-config и дождитесь её завершения.

Настройка параметров ядра для высоконагруженных систем

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

При включении функции на всех узлах региона создаются два конфигурационных файла:

  • /etc/sysctl.d/60-keystack.conf — параметры ядра (sysctl), включающие оптимизации сетевых соединений, управления памятью и лимитов conntrack.

  • /etc/security/limits.d/10-keystack.conf — лимиты на количество открытых файловых дескрипторов для пользователей системы.

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

  1. Войдите в GitLab и перейдите в репозиторий региона project_k / deployments / <имя региона>.

  2. Откройте файл host_config/host-config.yml и добавьте в него строку конфигурации:

    sysctl_enabled: true
    
  3. Создайте новый пайплайн: Build > Pipelines > New Pipeline.

  4. Оставьте ветку по умолчанию, соответствующую установленному релизу.

  5. Запустите пайплайн New pipeline.

  6. Дождитесь завершения выполнения задач на шаге setup.

  7. Запустите задачу bootstrap-servers и дождитесь её завершения.

  8. Запустите вручную задачу host-config и дождитесь её завершения.

Для проверки применения настроек:

  1. Зайдите на любой узел региона по протоколу SSH.

  2. Убедитесь, что файлы конфигурации созданы:

    $ ls -la /etc/sysctl.d/60-keystack.conf
    -rw-r--r-- 1 root root 2048 Dec 24 10:00 /etc/sysctl.d/60-keystack.conf
    
    $ ls -la /etc/security/limits.d/10-keystack.conf
    -rw-r--r-- 1 root root 140 Dec 24 10:00 /etc/security/limits.d/10-keystack.conf
    
  3. Проверьте, что параметры sysctl применены, выполнив команду:

    $ sysctl net.core.somaxconn
    net.core.somaxconn = 16384
    

Настройка GRUB

Для настройки GRUB выполните следующие действия:

  1. Войдите в GitLab и перейдите в репозиторий региона project_k / deployments / <имя региона>.

  2. Откройте файл host_config/host-config.yml и добавьте в него строки конфигурации:

    grub_config_enabled: true
    grub_cmdline_options:
      - "processor.max_cstate=1" # cpu performance option
      - "intel_idle.max_cstate=1" # cpu performance option
      - "idle=poll" # cpu performance option
      - "hugepagesz=1G" # hugepages option
      - "audit=1" # paranoic security option
      - "ipv6.disable=1" # paranoic security option
      - "tsx=auto" # paranoic security option
      - "slab_nomerge" # paranoic security option
      - "randomize_kstack_offset=1" # paranoic security option
      # - "custom_option"
    
  3. Создайте новый пайплайн: Build > Pipelines > New Pipeline.

  4. Оставьте ветку по умолчанию, соответствующую установленному релизу.

  5. Запустите пайплайн New pipeline.

  6. Дождитесь завершения выполнения задач на шаге setup.

  7. Запустите задачу bootstrap-servers и дождитесь её завершения.

  8. Запустите вручную задачу host-config и дождитесь её завершения.

Настройка аудита на серверах Linux/UNIX-подобных систем

В качестве службы аудита для безопасности в Linux/UNIX-подобных системах используется auditd (Audit Daemon). Auditd отслеживает системные события, связанные с безопасностью, а также регистрирует действия пользователей и системных процессов.

Для настройки аудита выполните следующие действия:

  1. Войдите в GitLab и перейдите в репозиторий региона project_k / deployments / <имя региона>.

  2. Откройте файл host_config/host-config.yml и добавьте в него строку конфигурации:

    auditd_enabled: true
    
  3. Создайте новый пайплайн: Build > Pipelines > New Pipeline.

  4. Оставьте ветку по умолчанию, соответствующую установленному релизу.

  5. Запустите пайплайн New pipeline.

  6. Дождитесь завершения выполнения задач на шаге setup.

  7. Запустите задачу bootstrap-servers и дождитесь её завершения.

  8. Запустите вручную задачу host-config и дождитесь её завершения.

Настройка завершения сеансов подключения к серверам

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

  1. Войдите в GitLab и перейдите в репозиторий региона project_k / deployments / <имя региона>.

  2. Откройте файл host_config/host-config.yml и добавьте в него строку конфигурации:

    sshd_enabled: true
    client_alive_interval: 15
    client_alive_count_max: 20 #5 min
    channel_timeout: 60 #1 min
    
  3. Создайте новый пайплайн: Build > Pipelines > New Pipeline.

  4. Оставьте ветку по умолчанию, соответствующую установленному релизу.

  5. Запустите пайплайн New pipeline.

  6. Дождитесь завершения выполнения задач на шаге setup.

  7. Запустите задачу bootstrap-servers и дождитесь её завершения.

  8. Запустите вручную задачу host-config и дождитесь её завершения.

Ограничение прав sudo для служебного пользователя kolla

Данная настройка ограничивает права sudo служебного пользователя kolla минимально необходимым набором команд в файлах каталога /etc/sudoers.d. Это реализует принцип наименьших привилегий для учётной записи, используемой при развёртывании и обслуживании платформы.

Примечание

Настройка не требует включения параметра security_hardening.

  1. Войдите в GitLab и перейдите в репозиторий региона project_k / deployments / <имя региона>.

  2. Откройте файл host_config/host-config.yml и добавьте в него строку конфигурации:

    kolla_sudo_rule_enabled: true
    
  3. Создайте новый пайплайн: Build > Pipelines > New Pipeline.

  4. Оставьте ветку по умолчанию, соответствующую установленному релизу.

  5. Запустите пайплайн New pipeline.

  6. Дождитесь завершения выполнения задач на шаге setup.

  7. Запустите задачу bootstrap-servers и дождитесь её завершения.

  8. Запустите вручную задачу host-config и дождитесь её завершения.

Также вы можете настроить регулярное выполнение применения конфигурации узлов с помощью Pipeline Schedules. Подробнее см. в разделе Применение конфигурации узлов.