diff --git a/deploy/README.md b/deploy/README.md index 68c917b..b8f53b0 100644 --- a/deploy/README.md +++ b/deploy/README.md @@ -5,7 +5,8 @@ 1. [docs/install-ubuntu-24.04-native.md](../docs/install-ubuntu-24.04-native.md) 2. `deploy/env.native.example` → `/opt/security-alert-center/config/sac-api.env` 3. `deploy/systemd/sac-api.service` → `/etc/systemd/system/` -4. `deploy/nginx/sac.conf.example` → `/etc/nginx/sites-available/sac` +4. `deploy/nginx/sac.conf.tls.example` → `/etc/nginx/sites-available/sac` (wildcard TLS) + или `sac.conf.example` — только HTTP / отладка ## Альтернатива: Docker diff --git a/deploy/nginx/sac.conf.tls.example b/deploy/nginx/sac.conf.tls.example new file mode 100644 index 0000000..5e588b6 --- /dev/null +++ b/deploy/nginx/sac.conf.tls.example @@ -0,0 +1,48 @@ +# /etc/nginx/sites-available/sac +# HTTPS с корпоративным wildcard-сертификатом (например VeriSign / DigiCert). +# Покрывает sac.kalinamall.ru при CN/SAN *.kalinamall.ru или sac.kalinamall.ru +# +# Перед включением: +# 1) Положите fullchain и ключ (см. docs/install-ubuntu-24.04-native.md §9) +# 2) Подставьте пути в ssl_certificate / ssl_certificate_key ниже +# 3) sudo nginx -t && sudo systemctl reload nginx + +upstream sac_api { + server 127.0.0.1:8000; + keepalive 8; +} + +# Редирект HTTP → HTTPS +server { + listen 80; + listen [::]:80; + server_name sac.kalinamall.ru; + return 301 https://$host$request_uri; +} + +server { + listen 443 ssl http2; + listen [::]:443 ssl http2; + server_name sac.kalinamall.ru; + + # --- замените пути на ваши файлы wildcard --- + ssl_certificate /etc/ssl/sac/fullchain.pem; + ssl_certificate_key /etc/ssl/sac/privkey.pem; + + ssl_session_timeout 1d; + ssl_session_cache shared:SAC_SSL:10m; + ssl_protocols TLSv1.2 TLSv1.3; + ssl_prefer_server_ciphers off; + + client_max_body_size 2m; + + location / { + proxy_pass http://sac_api; + proxy_http_version 1.1; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_read_timeout 60s; + } +} diff --git a/docs/deployment.md b/docs/deployment.md index 84447df..f74450c 100644 --- a/docs/deployment.md +++ b/docs/deployment.md @@ -74,8 +74,8 @@ curl -sS https://sac.kalinamall.ru/health ## 5. TLS -- **certbot** + nginx (Let's Encrypt) -- Внутренний CA — сертификаты в nginx, доверие на агентах Windows/Linux +- **Production (KalinaMall):** корпоративный **wildcard** (VeriSign / DigiCert) — см. [install-ubuntu-24.04-native.md](install-ubuntu-24.04-native.md) §9, шаблон `deploy/nginx/sac.conf.tls.example` +- Альтернатива: **certbot** + Let's Encrypt (`deploy/nginx/sac.conf.example`) --- diff --git a/docs/install-ubuntu-24.04-native.md b/docs/install-ubuntu-24.04-native.md index eff8bff..6e1b70d 100644 --- a/docs/install-ubuntu-24.04-native.md +++ b/docs/install-ubuntu-24.04-native.md @@ -192,31 +192,86 @@ journalctl -u sac-api -f ## 9. nginx и TLS -Шаблон **только HTTP (порт 80)** — без блока `ssl`, иначе `nginx -t` падает до выпуска сертификата. +Для KalinaMall: **корпоративный wildcard** (VeriSign / DigiCert и т.п.), не Let's Encrypt. +Имя `sac.kalinamall.ru` должно попадать под сертификат (`*.kalinamall.ru` или явный SAN). + +### 9.1. Установка файлов сертификата + +Обычно от УЦ выдают: + +| Файл | Назначение | +|------|------------| +| Сертификат сервера | `sac.kalinamall.ru` или wildcard | +| Промежуточные CA | chain / intermediate | +| Закрытый ключ | `.key`, хранить только на сервере | + +Соберите **fullchain** (сервер + промежуточные, в правильном порядке — как указано в инструкции УЦ): + +```bash +sudo mkdir -p /etc/ssl/sac +sudo chmod 750 /etc/ssl/sac + +# Пример: скопировать с рабочей станции (scp) или собрать на сервере +# sudo nano /etc/ssl/sac/fullchain.pem # PEM: сервер, затем intermediate(s) +# sudo nano /etc/ssl/sac/privkey.pem # закрытый ключ + +sudo chmod 644 /etc/ssl/sac/fullchain.pem +sudo chmod 640 /etc/ssl/sac/privkey.pem +sudo chown root:root /etc/ssl/sac/fullchain.pem +sudo chown root:ssl-cert /etc/ssl/sac/privkey.pem +``` + +Проверка PEM: + +```bash +sudo openssl x509 -in /etc/ssl/sac/fullchain.pem -noout -subject -dates +sudo openssl rsa -in /etc/ssl/sac/privkey.pem -check -noout 2>/dev/null || \ + sudo openssl pkey -in /etc/ssl/sac/privkey.pem -check -noout +``` + +Убедитесь, что в сертификате есть **`*.kalinamall.ru`** или **`sac.kalinamall.ru`**. + +### 9.2. Конфиг nginx (HTTPS) ```bash cd /opt/security-alert-center sudo git pull -sudo cp deploy/nginx/sac.conf.example /etc/nginx/sites-available/sac +sudo cp deploy/nginx/sac.conf.tls.example /etc/nginx/sites-available/sac +sudo nano /etc/nginx/sites-available/sac +# Проверьте пути ssl_certificate и ssl_certificate_key → /etc/ssl/sac/... + sudo ln -sf /etc/nginx/sites-available/sac /etc/nginx/sites-enabled/sac -# убрать default при необходимости: sudo rm -f /etc/nginx/sites-enabled/default +sudo rm -f /etc/nginx/sites-enabled/default sudo nginx -t sudo systemctl reload nginx ``` -Проверка через nginx (пока без HTTPS): +Проверка: ```bash -curl -sS http://127.0.0.1/health -H "Host: sac.kalinamall.ru" | jq . -# или с DNS уже настроенным: -curl -sS http://sac.kalinamall.ru/health | jq . +curl -sS https://sac.kalinamall.ru/health | jq . ``` -Let's Encrypt (добавит `listen 443 ssl` и пути к сертификатам): +В `config/sac-api.env` должно быть: `SAC_PUBLIC_URL=https://sac.kalinamall.ru` + +### 9.3. Агенты (ssh-monitor, RDP) и доверие к CA + +- Агенты ходят на `https://sac.kalinamall.ru/api/v1/events`. +- Если используется **внутренний корневой CA**, а не публичный VeriSign/DigiCert в системном store — на Linux/Windows может понадобиться установка корневого сертификата в доверенные (или корпоративный прокси с подменой TLS). +- Для публичного коммерческого wildcard от известного УЦ обычно **дополнительных действий на агентах не нужно**. + +### 9.4. Альтернатива: только HTTP (отладка) + +Шаблон `deploy/nginx/sac.conf.example` — порт 80 без TLS. Не для production. + +### 9.5. Альтернатива: Let's Encrypt + +Если понадобится публичный бесплатный сертификат только на этот хост: ```bash +sudo cp deploy/nginx/sac.conf.example /etc/nginx/sites-available/sac +# ... nginx -t, reload, затем: sudo certbot --nginx -d sac.kalinamall.ru -sudo nginx -t && sudo systemctl reload nginx ``` ---