Перейти к содержанию

Конфигурация

Настройки Системы находится в едином конфигурационном файле /etc/appsec-code/gitlab.rb.

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

docker exec -it appseccode /bin/bash

Можно просто редактировать файл /etc/appsec-code/gitlab.rb:

docker exec -it appseccode editor /etc/appsec-code/gitlab.rb

Открыв /etc/appsec-code/gitlab.rb, убедитесь, что external_url ссылается на валидный URL.

Чтобы получать сообщения от Системы по электронной почте, необходимо сконфигурировать SMTP-сервер, который не входит в комплект поставки Системы.

Настройка доступа по HTTPS также осуществляется отдельно.

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

docker restart appseccode

Запуск Системы на публичном IP-адресе

Можно создать Docker-контейнер для использования внешнего IP-адреса и перенаправлять весь трафик на контейнер Системы, изменив флаг --publish.

Например, чтобы Система работала на IP 198.51.100.1:

docker run --detach \
    --hostname yoursite.ru \
    --publish 198.51.100.1:443:443 \
    --publish 198.51.100.1:80:80 \
    --publish 198.51.100.1:22:22 \
    --name appseccode \
    --restart always \
    --volume $APPSEC_CODE_HOME/config:/etc/appsec-code \
    --volume $APPSEC_CODE_HOME/logs:/var/log/appsec-code \
    --volume $APPSEC_CODE_HOME/data:/var/opt/appsec-code \
    --shm-size 256m \
    appseccode/appseccode:latest

Открытие Системы на различных портах

Если необходимо использовать другие порты вместо 80 (HTTP) или 443 (HTTPS), следует добавить отдельную директиву --publish к команде docker run.

Например, чтобы веб-интерфейс работал на порту 8929, а SSH-сервис на порту 2289:

  1. Используйте следующую команду для запуска:

    docker run --detach \
        --hostname yoursite.ru \
        --publish 8929:8929 --publish 2289:22 \
        --name appseccode \
        --restart always \
        --volume $APPSEC_CODE_HOME/config:/etc/appsec-code \
        --volume $APPSEC_CODE_HOME/logs:/var/log/appsec-code \
        --volume $APPSEC_CODE_HOME/data:/var/opt/appsec-code \
        --shm-size 256m \
        appseccode/appseccode:latest
    
  2. Перейдите в работающий контейнер:

    docker exec -it appseccode /bin/bash
    
  3. Откройте /etc/appsec-code/gitlab.rb и задайте external_url:

    # For HTTP
    external_url "http://yoursite.ru:8929"
    
    or
    
    # For HTTPS (notice the https)
    external_url "https://yoursite.ru:8929"
    

    Порт, указанный в данном URL, должен соответствовать порту, опубликованном на хосте Docker’ом. Кроме этого, если NGINX «слушает» порт, неявно указанный в nginx['listen_port'], он будет извлечен из external_url.

  4. Укажите значение порта 2289.

  5. В завершение выполните реконфигурацию Системы с помощью команды reconfigure.

    В соответствии с приведенным выше примером можно работать с Системой через веб-браузер по адресу <hostIP>:8929 или, через SSH на 2289 порту.

Параметры конфигурации для пакетов Linux

Чтобы настроить AppSec.Code, установите соответствующие параметры в файле /etc/appsec-code/gitlab.rb. Файл gitlab.rb описывается в запускаемом docker compose файле.

gitlab.rb.template содержит полный список доступных опций. Новые установки включают все опции шаблона по умолчанию в /etc/appsec-code/gitlab.rb.

Примечание

Примеры, предоставляемые при редактировании /etc/appsec-code/gitlab.rb, могут не всегда отражать настройки по умолчанию для экземпляра.

Настройка внешнего URL для AppSec.Code

Чтобы ваши пользователи могли видеть правильные ссылки на клонирование репозиториев, необходимо предоставить AppSec.Code URL, который используют ваши пользователи для доступа к репозиторию. Вы можете использовать IP-адрес вашего сервера, но предпочтительнее использовать полностью определенное доменное имя (FQDN).

Чтобы изменить внешний URL:

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

  2. Отредактируйте /etc/appsec-code/gitlab.rb и измените external_url на предпочитаемый вами URL:

    external_url "http://asc.example.com"
    

    Альтернативно, можно использовать IP-адрес вашего сервера:

    external_url "http://10.0.0.1"
    

    В приведенных выше примерах используется простой HTTP. Если вы хотите использовать HTTPS, ознакомьтесь с инструкциями по настройке SSL.

  3. Переконфигурируйте AppSec.Code с помощью команды reconfigure.

  4. Опционально. Если вы использовали AppSec.Code некоторое время, после изменения внешнего URL также рекомендуется очистить кеш Markdown.

Настройка относительного URL для AppSec.Code

Примечание

Для самостоятельно собранных (исходных) установок существует отдельный документ.

Хотя мы рекомендовали устанавливать AppSec.Code в собственном (под)домене, иногда это невозможно. В таком случае, AppSec.Code может быть установлен под относительным URL, например, https://example.com/asc.

Изменение URL приводит к изменению всех удалённых URL, поэтому вам нужно вручную отредактировать их в любом локальном репозитории, указывающем на ваш экземпляр Системы.

Чтобы включить относительный URL в Системе:

  1. Задайте external_url в /etc/appsec-code/gitlab.rb:

    external_url "https://example.com/asc"
    

    В данном примере относительный URL, под которым работает Система, — /appsec-code. Измените его по своему усмотрению.

  2. Переконфигурируйте Систему с помощью команды reconfigure.

Чтение сертификатов из файла

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

В этом примере сертификат сервера PostgreSQL читается непосредственно из файла, вместо того чтобы копировать и вставлять его непосредственно в /etc/appsec-code/gitlab.rb.

postgresql['internal_certificate'] = File.read('/path/to/server.crt')

Этот код считывает содержимое файла /path/to/server.crt и присваивает его значению internal_certificate в разделе конфигурации PostgreSQL.

Хранение данных Системы в альтернативном каталоге

По умолчанию, установки пакетов Linux хранят данные репозитория Системы в каталоге /var/opt/appsec-code/git-data/repositories.

Чтобы изменить расположение каталога:

  1. Откройте /etc/appsec-code/gitlab.rb для редактирования и внесите изменения. Вы можете добавить более одного каталога для данных Системы. Целевые каталоги и любые их подкаталоги не должны быть символическими ссылками.

  2. Переконфигурируйте AppSec.Code с помощью команды reconfigure.

Настройка запрета неудачной аутентификации

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

Ниже приведены параметры, которые можно настроить:

Параметр Описание
enabled По умолчанию false. Установите значение true, чтобы включить запрет аутентификации для Системы и реестра.
ip_whitelist Список IP-адресов, которые не будут блокироваться. Адреса должны быть отформатированы как строки в массиве Ruby. Можно указывать как отдельные IP-адреса, так и диапазоны в нотации CIDR, например: ["127.0.0.1", "127.0.0.2", "127.0.0.3", "192.168.0.1/24"].
maxretry Максимальное количество попыток аутентификации с одного IP-адреса за указанное время.
findtime Время в секундах, в течение которого подсчитываются неудачные попытки аутентификации перед тем, как IP-адрес будет добавлен в черный список.
bantime Общее время в секундах, на которое IP-адрес будет заблокирован после превышения допустимого количества неудачных попыток аутентификации.

Для настройки запрета аутентификации Системы и реестра контейнеров:

  1. Откройте /etc/appsec-code/gitlab.rb для редактирования и задайте необходимые значения, например:

    'enabled' => true
    'ip_whitelist' => ["127.0.0.1"]
    'maxretry' => 10 # Ограничьте количество попыток аутентификации по HTTP с одного IP
    'findtime' => 60 # Сбросьте счетчик попыток аутентификации для IP каждые 60 секунд
    'bantime' => 3600  # Блокируйте IP на один час (3600 секунд) после слишком большого числа попыток аутентификации
    
  2. Переконфигурируйте Систему с помощью команды reconfigure.

Отключение автоматической очистки кеша во время установки

Если у вас крупная инсталляция Системы, возможно, вы не захотите выполнять задачу rake cache:clear, поскольку её выполнение может занять длительное время. По умолчанию задача очистки кеша выполняется автоматически во время перенастройки.

Чтобы отключить автоматическую очистку кеша во время установки:

  1. Откройте /etc/appsec-code/gitlab.rb для редактирования:

    # Это расширенная функция, используемая в крупных развертываниях Системы.
    # Устновите значение 'rake_cache_clear' = false
    
  2. Переконфигурируйте Систему с помощью команды reconfigure.

Установка URL-адреса сети доставки контента (CDN)

Используйте сеть доставки контента (CDN) или хост активов для обслуживания статических активов.

Чтобы настроить CDN/хост активов:

  1. Откройте /etc/appsec-code/gitlab.rb для редактирования и установите значение CDN хоста, например, 'https://mycdnsubdomain.fictional-cdn.ru'

  2. Переконфигурируйте Систему с помощью команды reconfigure.

Установка политики безопасности контента (CSP)

Настройка политики безопасности контента (CSP) может помочь предотвратить атаки межсайтового скриптинга (XSS). Подробнее смотрите в документации Mozilla по CSP.

Неправильная настройка правил CSP может нарушить работу AppSec.Code. Прежде чем развернуть политику, вы можете протестировать её, изменив report_only на true.

Чтобы добавить CSP:

  1. Откройте /etc/appsec-code/gitlab.rb для редактирования и задайте необходимые значения для политики безопасности контента, например:

    enabled: true
    report_only: false
    

    AppSec.Code автоматически предоставляет безопасные значения по умолчанию для CSP. Явная установка <default_value> для директивы эквивалентна отсутствию установки значения и будет использовать значения по умолчанию.

    Чтобы добавить пользовательский CSP задайте необходимые значения:

    enabled: true
    report_only: false
    directives: {
        default_src: "'none'",
        script_src: https://example.ru
    }
    

    Директивы, которые явно не настроены, используют безопасные значения по умолчанию.

    Чтобы отменить директиву CSP, установите значение false.

  2. Переконфигурируйте AppSec.Code с помощью команды reconfigure.

Установка начального пароля root при установке

Начальный пароль для администратора root может быть установлен во время установки:

  1. Откройте /etc/appsec-code/gitlab.rb для редактирования и задайте значение 'password'.

  2. Переконфигурируйте AppSec.Code с помощью команды reconfigure.

Установка разрешенных хостов для предотвращения атак на заголовки хостов

Чтобы запретить AppSec.Code принимать заголовок хоста, отличный от предполагаемого:

  1. Откройте /etc/appsec-code/gitlab.rb для редактирования и задайте необходимое значение, например, 'aapsec-code.example.com' .

  2. Переконфигурируйте Систему с помощью команды reconfigure.

Хотя в AppSec.Code нет известных проблем безопасности, связанных с незаданными заголовками хостов, это рекомендуется для дополнительной защиты от потенциальных атак с использованием заголовков HTTP Host.

Если вы используете внешний прокси-сервер, такой как Apache, вам может потребоваться добавить адрес или имя localhost (localhost или 127.0.0.1). Добавьте фильтры к внешнему прокси-серверу, чтобы смягчить возможные атаки на заголовки HTTP Host, проходящие через прокси-сервер.

Чтобы изменить префикс сгенерированных значений cookie-файлов веб-сеанса:

  1. Откройте /etc/appsec-code/gitlab.rb для редактирования.

  2. Переконфигурируйте AppSec.Code с помощью команды reconfigure и задайте необходимое значение, например, 'custom_prefix_'.

По умолчанию используется пустая строка "".

Предоставление чувствительной конфигурации компонентам без хранения в виде простого текста

Некоторые компоненты предоставляют опцию extra_config_command в gitlab.rb. Это позволяет внешнему скрипту динамически предоставлять секреты, а не считывать их из хранилища простого текста.

Например: параметр redis['extra_config_command'] предоставляет дополнительную конфигурацию для файла конфигурации сервера Redis.

Значение, присваиваемое параметру, должно быть абсолютным путём к исполняемому скрипту, который записывает чувствительную конфигурацию в нужном формате в стандартный вывод (STDOUT). Компоненты:

  1. Выполняют предоставленный скрипт.
  2. Заменяют значения, установленные пользователем и файлами конфигурации по умолчанию, значениями, полученными из скрипта.

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

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

Примечание

При указании пароля для сервера Redis этот метод лишь избавляет вас от необходимости иметь пароль в виде простого текста в файле gitlab.rb. Пароль окажется в виде простого текста в файле конфигурации сервера Redis, находящемся по адресу /var/opt/appsec-code/redis/redis.conf.

  1. Сохраните скрипт ниже как /opt/generate-redis-conf:

    #!/opt/appsec-code/embedded/bin/ruby
    
    require 'json'
    require 'yaml'
    
    class RedisConfig
        REDIS_PASSWORD = `echo "toomanysecrets"`.strip # Измените команду внутри обратных кавычек, чтобы получить пароль Redis
    
        class << self
            def server
                puts "requirepass '#{REDIS_PASSWORD}'"
                puts "masterauth '#{REDIS_PASSWORD}'"
            end
    
            def appsec-code_exporter
                puts YAML.dump({
                    'probes' => {
                        'sidekiq' => {
                            'opts' => {
                                'redis_password' => REDIS_PASSWORD
                            }
                        }
                    }
                })
            end
        end
    end
    
    def print_error_and_exit
        $stdout.puts "Usage: generate-redis-conf <COMPONENT>"
        $stderr.puts "Supported components are: server, appsec-code_exporter"
    
        exit 1
    end
    
    print_error_and_exit if ARGV.length != 1
    
    component = ARGV.shift
    begin
        RedisConfig.send(component.to_sym)
    rescue NoMethodError
        print_error_and_exit
    end
    
  2. Убедитесь, что созданный скрипт доступен для исполнения:

    chmod +x /opt/generate-redis-conf
    
  3. Добавьте следующий фрагмент в /etc/appsec-code/gitlab.rb:

    redis['extra_config_command'] = '/opt/generate-redis-conf server'
    
  4. Запустите команду reconfigure.