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

Установка, запуск и обновление AppSec.Hub

Требования к инфраструктуре

Установленные для эксплуатации AppSec.Hub технические средства должны быть совместимы между собой и поддерживать сетевой протокол TCP/IP.

Рекомендуемые технические характеристики серверного оборудования:

  • Процессор: 4×CPU 2 ГГц.
  • Оперативная память: 16 Гб.
  • Свободное дисковое пространство: 150 Гб для размещения прикладных систем и баз данных AppSec.Hub.

ПО поддерживает следующие типы ОС для полноценного функционирования.

Операционная система Архитектура Платформа
Linux 64-bit Ubuntu Server 18.04.6 x64
Linux 64-bit Centos/RHEL 7 и выше
Linux 64-bit Astra Linux SE 1.7 (Смоленск, Воронеж)

Процесс установки

Проверка инфраструктуры

Дополнительные пакеты, которые необходимо установить на сервере AppSec.Hub перед началом инсталляции AppSec.Hub:

  • Docker версии 19.03.3 и выше.
  • Docker-compose версии 1.29.2 и выше.

Проверить версию установленных пакетов Docker и Docker-compose можно с помощью команд:

docker --version
docker-compose ––version

Установка AppSec.Hub

Программа AppSec.Hub разворачивается в инфраструктуре с использованием контейнеров Docker.

Настройте соединение с репозиторием, в котором выложен дистрибутив AppSec.Hub:

docker login docker.yourcompany.ru

Скачайте инсталляционный образ:

docker pull docker.yourcompany.ru/hub-installer:<version>

Запустите инсталляцию командой:

docker container run \
    -v /hub/install/path:/opt/apphub \
    -v /root/.docker/config.json:/root/.docker/config.json \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -e REPAIR_DB_ENABLE="disable" \
    -e REPAIR_DW_ENABLE="disable" \
    --rm \
    --name hub-updater \
    -ti \
    docker.yourcompany.ru/hub-installer:<version>

где:

  • /hub/install/path — папка, куда будут скопированы конфигурационные файлы, этот параметр можно поменять, в этом случае мы рекомендуем указать директорий /opt/apphub. При совпадении имен файлов содержимое папки будет очищено. В этой же папке будет по умолчанию расположена папка с БД. В процессе установки автоматически заполняются конфигурационные параметры в .env файле, описанные в разделе «Приложение 1. Конфигурационный файл .env», и конфигурационные параметры в app.properties файле, описанные в разделе «Приложение 4. Конфигурационный файл app.properties»;
  • -v ~/.docker/config.json — путь к файлу, куда записываются данные после docker login;
  • -e REPAIR_DB_ENABLE="disable" — режим восстановления hub-db;
  • -e REPAIR_DW_ENABLE="disable" — режим восстановления hub-dw;
  • version — версия релиза, который необходимо установить;
  • в файлах .env и app.properties будут сгенерированы пароли и ключи;
  • в процессе инсталляции будет предложено ввести URL или IP адрес вашего сервера, по которому будет доступен веб интерфейс AppSec.Hub. Это значение в дальнейшем будет использоваться для интеграции с другими инструментами, такими как Jenkins, TeamCity и т. д.;
  • в процессе инсталляции так же будет предложено внести в базу данных системы демо-данные.

Запуск AppSec.Hub

В папке /hub/install/path выполните команды:

docker-compose up -d

После выполнения этой команды подождите примерно 2–3 минуты. AppSec.Hub будет доступен через веб-интерфейс по указанному вами URL или IP адресу сервера.

Остановка AppSec.Hub

В папке /hub/install/path выполните команду:

docker-compose down

Обновление системы

  1. Остановите AppSec.Hub, см. раздел «Остановка AppSec.Hub».
  2. Укажите новые версии образов в файле .env.
  3. Загрузите новые версии контейнеров. Для этого в папке, указанной при установке (см. раздел «Установка AppSec.Hub», по умолчанию /opt/apphub) выполните следующую команду.

    docker-compose pull
    
  4. После загрузки образов запустите систему, см. раздел «Запуск AppSec.Hub».

Также возможно обновление системы путем выполнения следующей команды.

docker container run \
    -v /hub/install/path:/opt/apphub \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -e REPAIR_DB_ENABLE="disable" \
    -e REPAIR_DW_ENABLE="disable" \
    --rm \
    --name hub-updater \
    -ti \
    docker.swordfishsecurity.com/hub-installer:last

В отдельных случая особенности сетевой конфигурации и/или требования безопасности не позволяют обновить AppSec.Hub указанными выше способами — следует придерживаться изложенного ниже порядка действий.

  1. Остановите AppSec.Hub, см. раздел «Остановка AppSec.Hub».

  2. В файл docker-compose.yaml, который находится в директории установки AppSec.Hub (по умолчанию, /opt/apphub), добавьте следующий раздел.

    flyway-db:
        image: docker.swordfishsecurity.com/hub-db:${hub_db_version}
        container_name: flyway-db
        networks:
            - net-hub
        environment:
            - hubadmPassword=${hub_adm_password}
            - hubappPassword=${hub_app_password}
            - hubbiPassword=${hub_bi_password}
            - hubauthPassword=${hub_auth_password}
            - hubdbName=${hub_db_name}
            - PGPASSWORD=${pgsql_admin_password}
            - PGUSER=postgres
            - PG_URL=${pgsql_url}
            - PG_PORT=${pgsql_port}
            - REPAIR_DB_ENABLE=disable
            - REPAIR_DW_ENABLE=disable
    

    Важно

    Убедитесь, что все значения параметров, используемых в добавляемом фрагменте (${hub_adm_password}, ${hub_app_password} и т. д.), не удалены из файла .env. При необходимости добавьте их вновь.

    Важно

    Убедитесь, что значения параметров networks в добавляемом разделе и в конце файла docker-compose.yaml аналогичны — в нашем примере net-hub.

    Пример раздела networks в конце файла docker-compose.yaml.

    networks:
    net-hub:
        driver: "bridge"
        driver_opts:
        com.docker.network.driver.mtu: 1400
        ipam:
        driver: default
        config:
            - subnet: 172.20.0.0/16
    

    Пример получившегося docker-compose.yaml. Нажмите, чтобы просмотреть.

        version: '3.9'
        services:
        hub-core:
            image: docker.swordfishsecurity.com/hub-core:${hub_core_version}
            container_name: hub-core
            networks:
            - net-hub
            environment:
            - "CATALINA_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"
            - UMASK=0022
            - HUB_LOG_LEVEL=debug
            - TZ=Europe/Moscow
            tmpfs:
            - /usr/local/tomcat/temp/:uid=2000,gid=2000
            - /usr/local/tomcat/work/:uid=2000,gid=2000
            ports:
            - ${IP_EXTERNAL}:5005:5005
            volumes:
            - ./logs/hub-core:/usr/local/tomcat/logs
            - ./config/hub-core/app.properties:/usr/local/tomcat/webapps/hub/WEB-INF/classes/app.properties
            - ./config/hub-core/auth.properties:/usr/local/tomcat/webapps/hub/WEB-INF/classes/auth.properties
            pids_limit: 400
            security_opt:
            - no-new-privileges
            restart: on-failure:5
            read_only: true
            cpu_shares: 1024
            deploy:
            resources:
                limits:
                memory: 3000M
        hub-ui:
            image: docker.swordfishsecurity.com/hub-ui:${hub_ui_version}
            container_name: hub-ui
            networks:
            - net-hub
            ports:
            - ${IP_EXTERNAL}:80:8080/tcp
            - ${IP_EXTERNAL}:81:81/tcp
            - ${IP_EXTERNAL}:443:4443/tcp
            - ${IP_EXTERNAL}:5602:5602/tcp
            environment:
            - TZ=Europe/Moscow
            volumes:
            - ./config/hub-ui/:/etc/nginx/conf.d/:ro
            - ./logs/hub-ui/:/var/log/nginx
            - ./ssl:/etc/ssl/certs/ssl-cert:ro
            pids_limit: 100
            security_opt:
            - no-new-privileges
            restart: on-failure:5
            read_only: true
            tmpfs:
            - /tmp
            - /var/cache/nginx/
            cpu_shares: 512
            deploy:
            resources:
                limits:
                memory: 100M
        node-exporter:
            image: nexus.service.swordfishsecurity.com:8084/sfs-node-exporter:v1.0.1
            container_name: prometheus_exporter
            user: root
            restart: always
            volumes:
            - /proc:/host/proc:ro
            - /sys:/host/sys:ro
            - /:/rootfs:ro,rslave
            command:
            - --path.procfs=/host/proc
            - --path.sysfs=/host/sys
            - --collector.filesystem.ignored-mount-points
            - ^/(sys|proc|dev|host|etc|/rootfs/var/lib/docker/containers|rootfs/var/lib/docker/overlay2|rootfs/run/docker/netns|rootfs/var/lib/docker/aufs)($$|/)
            - --path.rootfs=/rootfs
            ports:
            - '9100:9100'
            cap_add:
            - SYS_TIME
        postgresql:
            image: docker.swordfishsecurity.com/sfs-postgres:13.2.2-alpine
            container_name: postgresql
            volumes:
            - /opt/apphub/postgresql/data:/data
            - ./config/postgresql/postgresql.conf:/data/postgresql.conf
            - ./logs/postgresql:/data/logs
            networks:
            - net-hub
            ports:
            - ${IP_EXTERNAL}:5432:5432/tcp
            environment:
            # - POSTGRES_HOST_AUTH_METHOD=trust
            - POSTGRES_PASSWORD=${pgsql_admin_password}
            - TZ=Europe/Moscow
            pids_limit: 100
            security_opt:
            - no-new-privileges
            restart: on-failure:5
            read_only: true
            tmpfs:
            - /var/run/postgresql/
            - /var/cache
            cpu_shares: 1024
            deploy:
            resources:
                limits:
                memory: 300M
        flyway-db:
            image: docker.swordfishsecurity.com/hub-db:${hub_db_version}
            container_name: flyway-db
            networks:
            - net-hub
            environment:
            - hubadmPassword=${hub_adm_password}
            - hubappPassword=${hub_app_password}
            - hubbiPassword=${hub_bi_password}
            - hubauthPassword=${hub_auth_password}
            - hubdbName=${hub_db_name}
            - PGPASSWORD=${pgsql_admin_password}
            - PGUSER=postgres
            - PG_URL=${pgsql_url}
            - PG_PORT=${pgsql_port}
            - REPAIR_DB_ENABLE=disable
            - REPAIR_DW_ENABLE=disable
            #volumes:
            # - /opt/apphub/demo-hubdb-191208.sql:/opt/sql/dump.pgdata
            depends_on:
            - postgresql
        hub-air:
            image: docker.swordfishsecurity.com/hub-air:${hub_air_version}
            container_name: hub-air
            volumes:
            - /opt/apphub/logs/hub-air/logs:/opt/py-model/logs
            # - ./ml:/opt/py-model/ml
            - ./ml/local:/opt/py-model/ml/local
            environment:
            - TZ=Europe/Moscow
            - LOG_LEVEL=DEBUG
            - LOG_FILE=1
            - LOG_BASE_PATH=/opt/py-model/logs/avc_prediction.log
            - MODEL_USE_ENCRYPTION=${MODEL_USE_ENCRYPTION}
            - MODEL_SECRET_KEY="${MODEL_SECRET_KEY}"
            #- AUTH_EXPIRED="" #days
            #- AUTH_SECRET_KEY=""
            #- AUTH_USE="1"
            networks:
            - net-hub
            pids_limit: 100
            security_opt:
            - no-new-privileges
            restart: on-failure:5
            read_only: true
            cpu_shares: 512
            deploy:
            resources:
                limits:
                memory: 150M
        fluentd:
            image: docker.swordfishsecurity.com/public/fluentd-v1.12.1:latest
            container_name: fluentd
            user: root
            environment:
            - TZ=Europe/Moscow
            volumes:
            - ./logs/hub-core:/var/log-core:ro
            - ./logs/hub-ui:/var/log-ui:ro
            - ./logs/hub-air:/var/log-ml:ro
            - ./logs/postgresql:/var/log-postgresql:ro
            - /var/log:/var/log-system:ro
            - ./fluentd/fluent.conf:/fluentd/etc/fluent.conf:ro
        networks:
        net-hub:
            driver: "bridge"
            driver_opts:
            com.docker.network.driver.mtu: 1400
            ipam:
            driver: default
            config:
                - subnet: 172.20.0.0/16
    
  3. Запустите AppSec.Hub, см. раздел «Запуск AppSec.Hub».

Резервное копирование

Для резервного копирования необходимо:

  • Остановить AppSec.Hub, см. раздел «Остановка AppSec.Hub».
  • Сделать резервную копию директории установки AppSec.Hub (по умолчанию, /opt/apphub).
  • Выполнить резервное копирование директорий, относящихся к docker volumes, но расположенных за пределами директории установки.
  • Запустить AppSec.Hub, см. раздел «Запуск AppSec.Hub».

Восстановление из резервной копии

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

  • Если на сервере ранее был установлен AppSec.Hub:
    1. Остановить AppSec.Hub, см. раздел «Остановка AppSec.Hub».
    2. Переместить или переименовать директорию установки AppSec.Hub (по умолчанию, /opt/apphub).
    3. Переместить или переименовать директории, относящиеся к docker volumes, но расположенные за пределами директории установки (если такие имеются).
    4. Восстановить из резервной копии установочную директорию AppSec.Hub (по умолчанию, /opt/apphub).
    5. Восстановить из резервной копии директории, относящиеся к docker volumes, но расположенные за пределами директории установки.
    6. Запустить AppSec.Hub, см. раздел «Запуск AppSec.Hub».
  • Если на сервере ранее не был установлен AppSec.Hub
    1. Восстановить из резервной копии установочную директорию AppSec.Hub (по умолчанию, /opt/apphub).
    2. Восстановить из резервной копии директории, относящиеся к docker volumes, но расположенные за пределами директории установки (если такие имеются).
    3. Запустить AppSec.Hub, см. раздел «Запуск AppSec.Hub».

Выполните базовый тест восстановленной установки:

  • Авторизация.
  • Просмотр списка инструментов, проверка соединения с ними (Test connection).
  • Просмотр списка приложений.
  • Просмотр результатов сканирования (Issues) и дефектов ИБ (Defects).
  • Выборочный запуск DevSecOps пайплайнов.
  • Просмотр результатов нового сканирования.

Настройка антивирусной защиты

На сервере с установленным AppSec.Hub необходимо установить антивирусное программное обеспечение в соответствии с политиками компании в области антивирусной защиты.

К началу