Настройка шифрования данных
Для обеспечения безопасности данных включите SSL-шифрование. Выполните следующие действия:
На хосте создайте директорию с конфигурацией nginx, включающую каталог для хранения информации о SSL-шифровании:
sudo mkdir -p /etc/nginx/ssl/
Создайте ключ и сертификат SSL. Если будет использоваться самоподписанный сертификат, выполните следующую команду:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/my-example-domain.com.key -out /etc/nginx/ssl/my-example-domain.com.crt
Для заполнения полей сертификата вам будет предложено несколько вопросов. Ответьте на них, уделив особое внимание строке
Common Name
. В ней нужно ввести имя или публичный IP-адрес домена, связанного с сервером. Созданные файлы ключаmy-example-domain.com.key
и сертификатаmy-example-domain.com.crt
будут сохранены в каталоге/etc/nginx/ssl/
.Если используется подтвержденный сертификат, то нужно добавить путь сертификата в volumes для сервиса
findface-video-worker
, добавить установку ca-certificates и обновить корневое хранилище сертификатов в контейнере сервиса.Откройте файл
/opt/findface-cibr/docker-compose.yaml
:sudo vi /opt/findface-cibr/docker-compose.yaml
Найдите раздел
findface-video-worker
и отредактируйте его, чтобы он выглядел так, как показано ниже.Для CPU:
findface-video-worker: entrypoint: ["sh", "-c", "apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends --yes ca-certificates && update-ca-certificates && exec /tini -- /findface-video-worker-cpu --config=/etc/findface-video-worker.yaml"] depends_on: [findface-video-manager, findface-ntls, mongodb] image: docker.int.ntl/ntech/universe/video-worker-cpu:ffserver-9.230407.1 logging: {driver: journald} network_mode: service:pause restart: always volumes: ['./configs/findface-video-worker/findface-video-worker.yaml:/etc/findface-video-worker.yaml:ro', './models:/usr/share/findface-data/models:ro', './cache/findface-video-worker/models:/var/cache/findface/models_cache', './cache/findface-video-worker/recorder:/var/cache/findface/video-worker-recorder', '/etc/nginx/ssl/my-example-domain.crt:/usr/local/share/ca-certificates/my-example-domain.crt:ro']
Для GPU достаточно будет добавить путь до сертификата и обновить корневое хранилище:
findface-video-worker: entrypoint: ["sh", "-c", "update-ca-certificates && exec /tini -- /findface-video-worker-gpu --config=/etc/findface-video-worker.yaml"] depends_on: [findface-video-manager, findface-ntls, mongodb] environment: [CUDA_VISIBLE_DEVICES=0] image: docker.int.ntl/ntech/universe/video-worker-gpu:ffserver-9.230407.1 logging: {driver: journald} network_mode: service:pause restart: always runtime: nvidia volumes: ['./configs/findface-video-worker/findface-video-worker.yaml:/etc/findface-video-worker.yaml:ro', './models:/usr/share/findface-data/models:ro', './cache/findface-video-worker/models:/var/cache/findface/models_cache', './cache/findface-video-worker/recorder:/var/cache/findface/video-worker-recorder', '/etc/nginx/ssl/my-example-domain.crt:/usr/local/share/ca-certificates/my-example-domain.crt:ro']
Важно
Для CPU версии настройка требует доступ к интернету. Если он отсутствует, обратитесь к нашими техническим специалистам (support@ntechlab.com).
Предупреждение
Для CPU версии вырастет время запуска контейнера
findface-video-worker
на ~15 секунд.Выполните пересборку контейнеров FindFace CIBR.
cd /opt/findface-cibr/ docker-compose down docker-compose up -d
Настройте nginx для использования SSL. Откройте файл конфигурации nginx
/opt/findface-cibr/configs/findface-multi-ui/nginx-site.conf
. Внесите в файл следующие изменения:Добавьте новый раздел
server {...}
, содержащий правило замены URL. В строкеrewrite ^(.*) https://…
заменитеip_address_server_ffcibr
IP-адресом сервера, на котором установлен экземпляр FindFace CIBR.server { listen 80; server_name my-example-domain.com www.my-example-domain.com; rewrite ^(.*) https://ip_address_server_ffcibr$1 permanent; access_log off; }
Закомментируйте следующие строки в существующем разделе
server {...}
:# listen 80 default_server; # listen [::]:80 default_server;
Добавьте следующие строки, включая пути к сертификату и ключу, в существующий раздел
server {...}
:listen 443 ssl; ssl_certificate /etc/nginx/ssl/my-example-domain.com.crt; ssl_certificate_key /etc/nginx/ssl/my-example-domain.com.key;
Пример файла конфигурации
/opt/findface-cibr/configs/findface-multi-ui/nginx-site.conf
с корректно заданными настройками SSL показан в примере ниже:upstream ffsecurity { server 127.0.0.1:8002; } upstream ffsecurity-ws { server 127.0.0.1:8003; } upstream ffsecurity-django { server 127.0.0.1:8004; } upstream audit { server 127.0.0.1:8012; } upstream identity-provider { server 127.0.0.1:8022; } map $http_upgrade $ffsec_upstream { default "http://ffsecurity-ws"; "" "http://ffsecurity"; } server { listen 80; server_name my-example-domain.com www.my-example-domain.com; rewrite ^(.*) https://my-example-domain.com$1 permanent; access_log off; } server { # listen 80 default_server; # listen [::]:80 default_server; listen 443 ssl; ssl_certificate /etc/nginx/ssl/my-example-domain.com.crt; ssl_certificate_key /etc/nginx/ssl/my-example-domain.com.key; root /var/lib/findface-security; autoindex off; server_name _; location = / { alias /usr/share/findface-security-ui/; try_files /index.html =404; } location /static/ { } location /uploads/ { # internal; # uncomment if you intend to enable OVERPROTECT_MEDIA add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Methods' '*'; add_header 'Access-Control-Allow-Headers' '*'; add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range'; add_header 'Access-Control-Max-Age' 2592000; location ~ /card/(?<card_type>[a-zA-Z]+)/(?<card_id>[0-9]+)/attachments/(.*)$ { add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Methods' '*'; add_header 'Access-Control-Allow-Headers' '*'; add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range'; add_header 'Access-Control-Max-Age' 2592000; add_header 'Content-Disposition' 'attachment'; add_header 'Content-Security-Policy' 'sandbox'; } } location /ui-static/ { alias /usr/share/findface-security-ui/ui-static/; } location /doc/ { alias /opt/findface-security/doc/; } location /api-docs { alias /opt/findface-security/rapidoc; index index.html; } location /api-docs/ { alias /opt/findface-security/rapidoc/; try_files $uri index.html =404; } location ~ /videos/(?<video_id>[0-9]+)/upload/(.*)$ { client_max_body_size 15g; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://ffsecurity; } location @django { internal; client_max_body_size 1g; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_http_version 1.1; proxy_read_timeout 5m; proxy_pass http://ffsecurity-django; } # location /v1/video-liveness { # add_header Access-Control-Allow-Headers "*" always; # add_header Access-Control-Allow-Methods "*" always; # add_header Access-Control-Allow-Origin "*" always; # # if ($request_method = 'OPTIONS') { # return 204; # } # # client_max_body_size 300m; # proxy_set_header Host $http_host; # proxy_set_header X-Forwarded-For $remote_addr; # proxy_set_header X-Forwarded-Proto $scheme; # proxy_pass http://127.0.0.1:18301; # proxy_read_timeout 5m; # } location / { client_max_body_size 1g; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_pass $ffsec_upstream; proxy_read_timeout 5m; location ~ ^/(cameras|videos|vms|external-vms).*/stream/?$ { proxy_set_header Host $http_host; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://ffsecurity; } location ~ ^/streams/(.*)$ { internal; proxy_pass $1$is_args$args; } location /audit-logs { proxy_pass http://audit; } location ~ ^/(auth|ad_groups|cproauth|groups|permissions|sessions|users|user-face|device-blacklist-records) { proxy_pass http://identity-provider; } } # location /users/me/ad { # # proxy_pass <FFmulti_address>/auth/ad_login/; e.g http://127.0.0.1/auth/ad_login/; # proxy_method POST; # # proxy_set_header X-Real-IP $remote_addr; # proxy_set_header Host $http_host; # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # proxy_set_header Authorization $http_authorization; # proxy_pass_header Authorization; # proxy_no_cache 1; # proxy_cache_bypass 1; # # auth_gss on; # auth_gss_realm <REALM>; # e.g. TESTNTL.LOCAL; # auth_gss_keytab <path/to/file.keytab>; # e.g. /var/lib/web.keytab # auth_gss_service_name <service_name>; # e.g. HTTP/web.testntl.local; # auth_gss_allow_basic_fallback on; # } }
Скопируйте общий файл конфигурации nginx
nginx.conf
из контейнераfindface-cibr-findface-multi-ui-1
в директорию/etc/nginx/
:sudo docker cp findface-cibr-findface-multi-ui-1:/etc/nginx/nginx.conf /etc/nginx/nginx.conf
В общем файле конфигурации
/etc/nginx/nginx.conf
найдите разделSSL Settings
и добавьте в его конец следующие строки:ssl_session_cache shared:SSL:10m; ssl_session_timeout 1h;
В файле
/opt/findface-cibr/docker-compose.yaml
добавьте (смонтируйте) каталог, хранящий данные SSL-шифрования/etc/nginx/ssl/
и файл конфигурации/etc/nginx/nginx.conf
системы-хоста в контейнерfindface-cibr-findface-multi-ui-1
:Откройте файл
/opt/findface-cibr/docker-compose.yaml
:sudo vi /opt/findface-cibr/docker-compose.yaml
Найдите раздел
findface-multi-ui
и отредактируйте его, чтобы он выглядел так, как показано в примере ниже:findface-multi-ui: depends_on: [findface-multi-legacy] image: docker.int.ntl/ntech/multi/multi/ui-cibr:ffcibr-2.1.1 network_mode: service:pause restart: always volumes: ['./configs/findface-multi-ui/nginx-site.conf:/etc/nginx/conf.d/default.conf:ro', './data/findface-multi-legacy/uploads:/var/lib/findface-security/uploads', '/etc/nginx/ssl:/etc/nginx/ssl', '/etc/nginx/nginx.conf:/etc/nginx/nginx.conf:ro']
Отредактируйте файл конфигурации
/opt/findface-cibr/configs/findface-multi-legacy/findface-multi-legacy.py
.В параметрах
ROUTER_URL
иIMAGE_CROP_URL
замените префиксhttp://
наhttps://
.sudo vi /opt/findface-cibr/configs/findface-multi-legacy/findface-multi-legacy.py ... 'ROUTER_URL': 'https://127.0.0.1', 'IMAGE_CROP_URL': 'https://127.0.0.1', ...
При использовании подтвержденного сертификата необходимо в
ROUTER_URL
указать домен, по которому был создан сертификат:'ROUTER_URL': 'https://my-example-domain.com'
Добавьте адрес
https://my-example-domain.com
в параметрEXTERNAL_ADDRESS
:... EXTERNAL_ADDRESS = 'https://my-example-domain.com' ...
На сервере с установленным FindFace CIBR откройте файл
/etc/hosts
и добавьте следующую строку:sudo vi /etc/hosts ... 127.0.0.1 my-example-domain.com
В системе, где вы используете браузер для взаимодействия с FindFace CIBR, откройте файл
hosts
. Добавьте IP-адрес сервера, на котором установлен FindFace CIBR, вместоip_address_server_ffcibr
. Заменитеmy-example-domain.com
адресом вашего домена — так же, как вы делали в предыдущих шагах.Для операционной системы Linux выполните следующее:
sudo vi /etc/hosts ... *ip_address_server_ffcibr* my-example-domain.com
Если вы используете операционную систему Windows, откройте файл
C:\Windows\System32\drivers\etc\hosts
от имени администратора. Добавьте следующую строку в файлhosts
:*ip_address_server_ffcibr* my-example-domain.com
Перезапустите контейнеры:
cd /opt/findface-cibr/ sudo docker-compose down sudo docker-compose up -d
При использовании самоподписанного сертификата для загруженных видео нужно отключать проверку SSL-сертификата:
Перейдите на вкладку Видео внутри происшествия.
Нажмите на загруженное видео.
На вкладке Дополнительные снимите флажок Проверить SSL-серnификат.