b148b558c3
Defer notify_lifecycle and notify_auth_login after commit; SAC_UVICORN_WORKERS via sac-api-start.sh; nginx /api/v1/events timeout; mass-update confirm in Hosts UI.
140 lines
5.6 KiB
Plaintext
140 lines
5.6 KiB
Plaintext
# Native: /opt/security-alert-center/config/sac-api.env
|
||
# sudo chown sac:sac ... && sudo chmod 600 ...
|
||
# Пароль в URL — в двойных кавычках. Символ # в пароле допустим только внутри кавычек.
|
||
# systemd НЕ парсит этот файл — читает приложение (SAC_CONFIG_FILE).
|
||
|
||
DATABASE_URL=postgresql+psycopg2://sac:CHANGE_ME_POSTGRES_PASSWORD@127.0.0.1:5432/sac
|
||
# SQLAlchemy pool (uvicorn workers × concurrent ingest). Было по умолчанию 5+10 — мало для штурма 09:00.
|
||
SAC_DB_POOL_SIZE=15
|
||
SAC_DB_MAX_OVERFLOW=25
|
||
# Uvicorn workers (ingest burst). Читает deploy/systemd/sac-api-start.sh; при >1 отключите in-process host_silence scan ниже.
|
||
SAC_UVICORN_WORKERS=4
|
||
|
||
SAC_PUBLIC_URL=https://sac.kalinamall.ru
|
||
# Опционально: другой базовый URL для WinRM-скачивания RDP bundle с ПК (LAN / split-DNS).
|
||
# SAC_AGENT_BUNDLE_BASE_URL=https://192.168.x.x
|
||
JWT_SECRET=CHANGE_ME_openssl_rand_hex_32
|
||
SAC_SECURITY_ENFORCE=true
|
||
|
||
# API key для агентов: Authorization: Bearer <ключ>
|
||
# python3.12 -c "import secrets; print('sac_'+secrets.token_urlsafe(32))"
|
||
SAC_BOOTSTRAP_API_KEY=sac_replace_with_generated_key
|
||
|
||
EVENT_SCHEMA_PATH=/opt/security-alert-center/schemas/event-schema-v1.json
|
||
|
||
SAC_ADMIN_USERNAME=admin
|
||
SAC_ADMIN_PASSWORD=
|
||
|
||
# Telegram notifications from SAC (phase 1C.4)
|
||
# При UseSAC=exclusive на агентах — основной канал для оператора; см. docs/agent-integration.md §1.3.1
|
||
TELEGRAM_ENABLED=false
|
||
TELEGRAM_BOT_TOKEN=
|
||
TELEGRAM_CHAT_ID=
|
||
# exclusive: warning (failed login, problems); prod noise-only: high
|
||
TELEGRAM_MIN_SEVERITY=high
|
||
|
||
# Generic webhook (JSON POST), F-NOT-01
|
||
WEBHOOK_ENABLED=false
|
||
WEBHOOK_URL=
|
||
WEBHOOK_SECRET_HEADER=
|
||
WEBHOOK_SECRET=
|
||
WEBHOOK_MIN_SEVERITY=high
|
||
|
||
# SMTP email (F-NOT-01)
|
||
SMTP_ENABLED=false
|
||
SMTP_HOST=
|
||
SMTP_PORT=587
|
||
SMTP_USER=
|
||
SMTP_PASSWORD=
|
||
SMTP_FROM=
|
||
SMTP_TO=
|
||
SMTP_STARTTLS=true
|
||
SMTP_SSL=false
|
||
SMTP_MIN_SEVERITY=high
|
||
|
||
# Глобальное правило: severity ≥ NOTIFY_MIN_SEVERITY → каналы из NOTIFY_CHANNELS
|
||
NOTIFY_MIN_SEVERITY=warning
|
||
NOTIFY_CHANNELS=telegram,webhook,email
|
||
|
||
# Cooldown оповещений SAC (секунды; 0 = выкл. для kind)
|
||
SAC_NOTIFY_COOLDOWN_ENABLED=true
|
||
SAC_NOTIFY_EVENT_COOLDOWN_SEC=90
|
||
SAC_NOTIFY_PROBLEM_COOLDOWN_SEC=300
|
||
|
||
# Суточные отчёты из SAC (F-NOT-05; systemd sac-daily-report.timer)
|
||
SAC_DAILY_REPORT_ENABLED=true
|
||
SAC_DAILY_REPORT_HOUR=9
|
||
SAC_DAILY_REPORT_TIMEZONE=Europe/Moscow
|
||
SAC_DAILY_REPORT_SKIP_IF_AGENT_SENT=true
|
||
SAC_DAILY_REPORT_REQUIRE_ACTIVITY=true
|
||
|
||
# Статус хоста по agent.heartbeat
|
||
# Порог stale для agent.heartbeat (мин). При интервале агента ~4 ч — 300 (5 ч) даёт запас.
|
||
SAC_HEARTBEAT_STALE_MINUTES=300
|
||
|
||
# Проактивный алерт host_silence (без ожидания нового события с хоста)
|
||
# Если включён systemd timer sac-host-silence-scan.timer — лучше SAC_HOST_SILENCE_SCAN_ENABLED=false
|
||
# (иначе scan идёт параллельно из каждого uvicorn worker + timer).
|
||
SAC_HOST_SILENCE_SCAN_ENABLED=true
|
||
SAC_HOST_SILENCE_SCAN_INTERVAL_MINUTES=5
|
||
|
||
# Корреляция Problems: host + type + rule в одном open Problem (минуты)
|
||
SAC_PROBLEM_CORRELATION_WINDOW_MINUTES=60
|
||
|
||
# rule:brute_force_burst (ssh.login.failed / rdp.login.failed)
|
||
SAC_BRUTE_FORCE_WINDOW_MINUTES=15
|
||
SAC_BRUTE_FORCE_THRESHOLD=30
|
||
|
||
# rule:privilege_spike (privilege.sudo.command)
|
||
SAC_PRIVILEGE_SPIKE_WINDOW_MINUTES=10
|
||
SAC_PRIVILEGE_SPIKE_THRESHOLD=10
|
||
|
||
# rule:rdg_session_flap (302→303)
|
||
SAC_RDG_FLAP_WINDOW_MIN_SEC=1
|
||
SAC_RDG_FLAP_WINDOW_MAX_SEC=10
|
||
SAC_RDG_FLAP_DEDUP_SEC=30
|
||
|
||
# IP HAProxy (или другого RDG-прокси), через который виден вход: external_ip в событии 302/303
|
||
# SAC_RDG_HAPROXY_EXTERNAL_IPS=192.168.160.50,10.0.0.100
|
||
|
||
# qwinsta/logoff на Windows-хостах (доменный admin)
|
||
# SAC_WIN_ADMIN_USER=B26\\Administrator
|
||
# SAC_WIN_ADMIN_PASSWORD=
|
||
|
||
# SSH / update_ssh_monitor.sh на Linux-хостах
|
||
# SAC_LINUX_ADMIN_USER=root
|
||
# SAC_LINUX_ADMIN_PASSWORD=
|
||
|
||
# Retention (systemd sac-retention.timer)
|
||
SAC_EVENTS_RETENTION_DAYS=90
|
||
SAC_PROBLEMS_RETENTION_DAYS=180
|
||
|
||
# UI login: блокировка IP после N неудачных попыток (окно в минутах) + алерт в Telegram
|
||
SAC_LOGIN_MAX_FAILURES=3
|
||
SAC_LOGIN_FAILURE_WINDOW_MINUTES=15
|
||
SAC_LOGIN_ALERT_TELEGRAM=true
|
||
# IP через запятую — не блокируются в UI (дополняет список в Настройках SAC)
|
||
SAC_LOGIN_IP_WHITELIST=192.168.160.3
|
||
# fail2ban: синхронизация белого списка из UI (нужны права записи + reload)
|
||
SAC_FAIL2BAN_SYNC_ENABLED=false
|
||
SAC_FAIL2BAN_SSH_JAIL=sshd
|
||
SAC_FAIL2BAN_IGNOREIP_FILE=/etc/fail2ban/jail.d/sac-login-whitelist.local
|
||
|
||
# Seaca mobile push (FCM HTTP v1)
|
||
SAC_FCM_ENABLED=false
|
||
SAC_FCM_PROJECT_ID=
|
||
# Путь к JSON service account Firebase (chmod 600, владелец sac)
|
||
SAC_FCM_SERVICE_ACCOUNT_JSON=
|
||
SAC_MOBILE_REFRESH_EXPIRE_DAYS=90
|
||
|
||
CORS_ORIGINS=https://sac.kalinamall.ru
|
||
|
||
# SSH: verify host keys (RejectPolicy). Add keys to file before remote actions.
|
||
# Комментарий — только отдельной строкой с #. Нельзя: SAC_SSH_AUTO_ADD_HOST_KEY=false ← текст
|
||
# SAC_SSH_KNOWN_HOSTS_FILE=/opt/security-alert-center/config/ssh_known_hosts
|
||
# SAC_SSH_AUTO_ADD_HOST_KEY=false
|
||
|
||
# WinRM: enable HTTPS listener on clients (5986) before turning on.
|
||
# SAC_WINRM_USE_HTTPS=false
|
||
# SAC_WINRM_SERVER_CERT_VALIDATION=validate
|