Конфигурация¶
Настройки Системы находится в едином конфигурационном файле /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:
-
Используйте следующую команду для запуска:
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 -
Перейдите в работающий контейнер:
docker exec -it appseccode /bin/bash -
Откройте /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. -
Укажите значение порта 2289.
-
В завершение выполните реконфигурацию Системы с помощью команды
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:
-
Опционально. Перед изменением внешнего URL определите, определяли ли вы ранее пользовательский URL домашней страницы или путь после выхода из системы. Оба эти параметра могут привести к непреднамеренному перенаправлению после настройки нового внешнего URL. Если были определены какие-либо URL-адреса, удалите их полностью.
-
Отредактируйте /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.
-
Переконфигурируйте AppSec.Code с помощью команды
reconfigure. -
Опционально. Если вы использовали AppSec.Code некоторое время, после изменения внешнего URL также рекомендуется очистить кеш Markdown.
Настройка относительного URL для AppSec.Code¶
Примечание
Для самостоятельно собранных (исходных) установок существует отдельный документ.
Хотя мы рекомендовали устанавливать AppSec.Code в собственном (под)домене, иногда это невозможно. В таком случае, AppSec.Code может быть установлен под относительным URL, например, https://example.com/asc.
Изменение URL приводит к изменению всех удалённых URL, поэтому вам нужно вручную отредактировать их в любом локальном репозитории, указывающем на ваш экземпляр Системы.
Чтобы включить относительный URL в Системе:
-
Задайте
external_urlв /etc/appsec-code/gitlab.rb:external_url "https://example.com/asc"В данном примере относительный URL, под которым работает Система, —
/appsec-code. Измените его по своему усмотрению. -
Переконфигурируйте Систему с помощью команды
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.
Чтобы изменить расположение каталога:
-
Откройте /etc/appsec-code/gitlab.rb для редактирования и внесите изменения. Вы можете добавить более одного каталога для данных Системы. Целевые каталоги и любые их подкаталоги не должны быть символическими ссылками.
-
Переконфигурируйте 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-адрес будет заблокирован после превышения допустимого количества неудачных попыток аутентификации. |
Для настройки запрета аутентификации Системы и реестра контейнеров:
-
Откройте /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 секунд) после слишком большого числа попыток аутентификации -
Переконфигурируйте Систему с помощью команды
reconfigure.
Отключение автоматической очистки кеша во время установки¶
Если у вас крупная инсталляция Системы, возможно, вы не захотите выполнять задачу rake cache:clear, поскольку её выполнение может занять длительное время. По умолчанию задача очистки кеша выполняется автоматически во время перенастройки.
Чтобы отключить автоматическую очистку кеша во время установки:
-
Откройте /etc/appsec-code/gitlab.rb для редактирования:
# Это расширенная функция, используемая в крупных развертываниях Системы. # Устновите значение 'rake_cache_clear' = false -
Переконфигурируйте Систему с помощью команды
reconfigure.
Установка URL-адреса сети доставки контента (CDN)¶
Используйте сеть доставки контента (CDN) или хост активов для обслуживания статических активов.
Чтобы настроить CDN/хост активов:
-
Откройте /etc/appsec-code/gitlab.rb для редактирования и установите значение CDN хоста, например, 'https://mycdnsubdomain.fictional-cdn.ru'
-
Переконфигурируйте Систему с помощью команды
reconfigure.
Установка политики безопасности контента (CSP)¶
Настройка политики безопасности контента (CSP) может помочь предотвратить атаки межсайтового скриптинга (XSS). Подробнее смотрите в документации Mozilla по CSP.
Неправильная настройка правил CSP может нарушить работу AppSec.Code. Прежде чем развернуть политику, вы можете протестировать её, изменив report_only на true.
Чтобы добавить CSP:
-
Откройте /etc/appsec-code/gitlab.rb для редактирования и задайте необходимые значения для политики безопасности контента, например:
enabled: true report_only: falseAppSec.Code автоматически предоставляет безопасные значения по умолчанию для CSP. Явная установка
<default_value>для директивы эквивалентна отсутствию установки значения и будет использовать значения по умолчанию.Чтобы добавить пользовательский CSP задайте необходимые значения:
enabled: true report_only: false directives: { default_src: "'none'", script_src: https://example.ru }Директивы, которые явно не настроены, используют безопасные значения по умолчанию.
Чтобы отменить директиву CSP, установите значение
false. -
Переконфигурируйте AppSec.Code с помощью команды
reconfigure.
Установка начального пароля root при установке¶
Начальный пароль для администратора root может быть установлен во время установки:
-
Откройте /etc/appsec-code/gitlab.rb для редактирования и задайте значение 'password'.
-
Переконфигурируйте AppSec.Code с помощью команды
reconfigure.
Установка разрешенных хостов для предотвращения атак на заголовки хостов¶
Чтобы запретить AppSec.Code принимать заголовок хоста, отличный от предполагаемого:
-
Откройте /etc/appsec-code/gitlab.rb для редактирования и задайте необходимое значение, например, 'aapsec-code.example.com' .
-
Переконфигурируйте Систему с помощью команды
reconfigure.
Хотя в AppSec.Code нет известных проблем безопасности, связанных с незаданными заголовками хостов, это рекомендуется для дополнительной защиты от потенциальных атак с использованием заголовков HTTP Host.
Если вы используете внешний прокси-сервер, такой как Apache, вам может потребоваться добавить адрес или имя localhost (localhost или 127.0.0.1). Добавьте фильтры к внешнему прокси-серверу, чтобы смягчить возможные атаки на заголовки HTTP Host, проходящие через прокси-сервер.
Конфигурация сеансовых cookie-файлов¶
Чтобы изменить префикс сгенерированных значений cookie-файлов веб-сеанса:
-
Откройте /etc/appsec-code/gitlab.rb для редактирования.
-
Переконфигурируйте AppSec.Code с помощью команды
reconfigureи задайте необходимое значение, например, 'custom_prefix_'.
По умолчанию используется пустая строка "".
Предоставление чувствительной конфигурации компонентам без хранения в виде простого текста¶
Некоторые компоненты предоставляют опцию extra_config_command в gitlab.rb. Это позволяет внешнему скрипту динамически предоставлять секреты, а не считывать их из хранилища простого текста.
Например: параметр redis['extra_config_command'] предоставляет дополнительную конфигурацию для файла конфигурации сервера Redis.
Значение, присваиваемое параметру, должно быть абсолютным путём к исполняемому скрипту, который записывает чувствительную конфигурацию в нужном формате в стандартный вывод (STDOUT). Компоненты:
- Выполняют предоставленный скрипт.
- Заменяют значения, установленные пользователем и файлами конфигурации по умолчанию, значениями, полученными из скрипта.
Предоставление пароля Redis серверу и клиентским компонентам¶
Как пример, вы можете использовать скрипт и фрагмент gitlab.rb ниже, чтобы указать пароль для сервера Redis и компонентов, которым требуется подключиться к Redis.
Примечание
При указании пароля для сервера Redis этот метод лишь избавляет вас от необходимости иметь пароль в виде простого текста в файле gitlab.rb. Пароль окажется в виде простого текста в файле конфигурации сервера Redis, находящемся по адресу /var/opt/appsec-code/redis/redis.conf.
-
Сохраните скрипт ниже как
/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 -
Убедитесь, что созданный скрипт доступен для исполнения:
chmod +x /opt/generate-redis-conf -
Добавьте следующий фрагмент в /etc/appsec-code/gitlab.rb:
redis['extra_config_command'] = '/opt/generate-redis-conf server' -
Запустите команду
reconfigure.