argos-setup/README.md

287 lines
11 KiB
Markdown
Raw Normal View History

# ARGOS SOC — Setup & Installer
Tecnotel Servizi SRL — [www.tecnotelsrl.com](https://www.tecnotelsrl.com)
Repository pubblico contenente l'installer di prima fase e il Web Setup Wizard di ARGOS SOC.
---
## Architettura di riferimento: due VM sulla stessa VNet
ARGOS è la console SOC; **Wazuh/OpenSearch** è il SIEM che fa da normalizzatore e
store degli eventi. Il deployment standard è su **due VM Ubuntu 24.04 LTS** nella
**stessa VNet**: ARGOS interroga l'indexer Wazuh esclusivamente sull'**IP privato**,
nessun traffico SIEM transita su Internet.
```
VNet privata (es. 172.25.0.0/16)
┌────────────────────────────┐ ┌────────────────────────────┐
│ VM ARGOS │ │ VM WAZUH (SIEM) │
│ 172.25.0.5 │ 9200 │ 172.25.0.4 │
│ Flask + React + analytics │─────▶│ Indexer/OpenSearch │
│ console SOC :443 │ https│ Manager :1514/1515 │
│ web installer :8888 (temp) │ │ Syslog :514 │
└────────────────────────────┘ └────────────────────────────┘
▲ ▲
│ :443 (console) │ :514 / :1514 (log apparati/agenti)
tuo ufficio / VPN firewall, switch, endpoint
```
ARGOS si connette all'indexer in **HTTPS + Basic auth** e tollera il certificato
self-signed di Wazuh (verifica TLS disattivata lato client): non serve importare
alcuna CA per il primo bring-up.
### Matrice porte
| Servizio | VM | Porta | Sorgente consentita |
|---|---|---|---|
| Indexer / OpenSearch | Wazuh | 9200/tcp | **solo IP privato ARGOS** |
| Manager (agenti) | Wazuh | 1514/1515/tcp | VNet interna |
| Syslog (firewall/switch) | Wazuh | 514/udp+tcp | sorgenti interne / VNet |
| API Wazuh | Wazuh | 55000/tcp | localhost (ARGOS non la usa) |
| Dashboard Wazuh (opzionale) | Wazuh | 443/tcp | tuo IP ufficio (o disabilitata) |
| Console ARGOS | ARGOS | 443/tcp | tuo IP ufficio / VPN |
| Web installer ARGOS (temporaneo) | ARGOS | 8888/tcp | tuo IP ufficio (chiusa a fine setup) |
| SSH | entrambe | 22/tcp | solo IP admin |
---
## Prerequisiti
- Due VM **Ubuntu 24.04 LTS** (24.04 o 26.04 supportate), accesso root (sudo).
- **Sizing minimo** per VM: 2 vCPU / 8 GB RAM / 50 GB disco. Per la VM Wazuh sono
consigliati 4 vCPU / 16 GB e un disco da 128256 GB (il DB vulnerabilità si espande
a ~7,5 GB in import: sotto i 50 GB l'installazione si corrompe).
- **IP privati statici** su entrambe le NIC (in Azure: allocazione *Static*).
- Connettività in uscita verso `repo.argosdefense.io` (codice/aggiornamenti) e
`license.argosdefense.io` (licenze/heartbeat) dalla VM ARGOS.
- Una **licenza ARGOS** valida emessa da Tecnotel per il `machine_id` della VM ARGOS.
> In tutta la guida si usano come esempio: **Wazuh `172.25.0.4`**, **ARGOS `172.25.0.5`**,
> VNet `172.25.0.0/16`. Sostituisci con i tuoi valori reali.
---
# Parte A — Installazione Wazuh (VM `172.25.0.4`)
### A.1 Network Security Group (Azure)
Apri l'indexer **solo verso l'IP privato di ARGOS**, mai pubblico. Le altre porte
SIEM restano interne alla VNet. SSH/dashboard solo dal tuo IP ufficio.
```bash
RG=il-tuo-resource-group
NSG=nsg-wazuh
ARGOS_PRIV_IP=172.25.0.5
VNET_CIDR=172.25.0.0/16
MY_OFFICE_IP=203.0.113.5 # il tuo IP pubblico ufficio
# Indexer 9200: SOLO da ARGOS
az network nsg rule create -g $RG --nsg-name $NSG -n allow-indexer-argos \
--priority 200 --access Allow --protocol Tcp --direction Inbound \
--source-address-prefixes ${ARGOS_PRIV_IP}/32 --destination-port-ranges 9200
# Agenti/syslog: dalla VNet interna
az network nsg rule create -g $RG --nsg-name $NSG -n allow-siem-vnet \
--priority 210 --access Allow --protocol Tcp --direction Inbound \
--source-address-prefixes $VNET_CIDR --destination-port-ranges 1514 1515 514
# SSH dal solo IP admin
az network nsg rule create -g $RG --nsg-name $NSG -n allow-ssh-admin \
--priority 220 --access Allow --protocol Tcp --direction Inbound \
--source-address-prefixes $MY_OFFICE_IP --destination-port-ranges 22
```
### A.2 Installazione (all-in-one Wazuh 4.14)
```bash
sudo timedatectl set-timezone Europe/Rome
sudo apt update && sudo apt -y upgrade
sudo hostnamectl set-hostname wazuh
# Verifica la serie corrente su packages.wazuh.com se il download dà 404
curl -sO https://packages.wazuh.com/4.14/wazuh-install.sh
sudo bash ./wazuh-install.sh -a
```
L'assistente (1015 min) installa indexer + manager + dashboard + filebeat, genera i
certificati con l'IP privato già nel SAN e stampa a fine corsa **User: admin / Password: …**.
### A.3 Tuning per 8 GB di RAM
L'installer assegna 4 GB di heap all'indexer: su una VM da 8 GB è troppo. Abbassa a 2 GB:
```bash
sudo sed -i 's/^-Xms4g/-Xms2g/; s/^-Xmx4g/-Xmx2g/' /etc/wazuh-indexer/jvm.options
sudo systemctl restart wazuh-indexer
```
La **dashboard Wazuh non è necessaria** in un deployment ARGOS (la console SOC è ARGOS,
che interroga OpenSearch direttamente). Su 8 GB conviene disabilitarla:
```bash
sudo systemctl disable --now wazuh-dashboard
```
### A.4 Credenziali e verifica servizi
```bash
sudo tar -xf wazuh-install-files.tar
sudo grep -E "indexer_(username|password)" wazuh-install-files/wazuh-passwords.txt
sudo systemctl --no-pager status wazuh-indexer wazuh-manager filebeat | grep -E "●|Active:"
```
### A.5 Verifica binding indexer
L'all-in-one imposta di norma `network.host` sull'IP privato. Controlla:
```bash
grep -E "network.host|network.publish_host" /etc/wazuh-indexer/opensearch.yml
sudo ss -ltnp | grep 9200
```
Solo se NON è l'IP privato né `0.0.0.0`, correggi e riavvia:
```bash
sudo sed -i 's/^network.host:.*/network.host: "172.25.0.4"/' /etc/wazuh-indexer/opensearch.yml
sudo systemctl restart wazuh-indexer
```
Se UFW è attivo (su Azure di norma è spento, il controllo è l'NSG):
```bash
sudo ufw allow from 172.25.0.5 to any port 9200 proto tcp
```
---
# Parte B — Installazione ARGOS (VM `172.25.0.5`)
### B.1 Network Security Group (Azure)
```bash
RG=il-tuo-resource-group
NSG=nsg-argos
MY_OFFICE_IP=203.0.113.5
# Console ARGOS :443 dal tuo IP ufficio
az network nsg rule create -g $RG --nsg-name $NSG -n allow-console \
--priority 200 --access Allow --protocol Tcp --direction Inbound \
--source-address-prefixes $MY_OFFICE_IP --destination-port-ranges 443
# Web installer :8888 TEMPORANEO (il setup la richiude da solo a fine wizard)
az network nsg rule create -g $RG --nsg-name $NSG -n allow-installer-temp \
--priority 210 --access Allow --protocol Tcp --direction Inbound \
--source-address-prefixes $MY_OFFICE_IP --destination-port-ranges 8888
# SSH dal solo IP admin
az network nsg rule create -g $RG --nsg-name $NSG -n allow-ssh-admin \
--priority 220 --access Allow --protocol Tcp --direction Inbound \
--source-address-prefixes $MY_OFFICE_IP --destination-port-ranges 22
```
### B.2 Bootstrap (one-liner)
Su Ubuntu 24.04/26.04 LTS vergine:
```bash
curl -fsSL https://repo.argosdefense.io/tecnotel/argos-setup/raw/branch/main/bootstrap.sh | sudo bash
```
Il bootstrap scarica il repository, esegue `first-setup.sh` (pacchetti, utente `argos`,
cartelle `/opt/argos`, firewall, nginx temporaneo) e avvia il **Web Installer** su
`http://172.25.0.5:8888`.
> Installazione manuale equivalente:
> ```bash
> sudo apt update && sudo apt install -y git
> git clone https://repo.argosdefense.io/tecnotel/argos-setup.git /opt/argos-setup-pkg
> cd /opt/argos-setup-pkg && sudo bash first-setup.sh
> ```
### B.3 Web Installer — wizard in 6 step
Apri `http://172.25.0.5:8888` e segui:
1. **Licenza ARGOS** — il wizard mostra il `machine_id` della VM. Invialo a Tecnotel,
ricevi `license.json`, caricalo.
2. **Informazioni cliente** (nome, dominio, logo, contesto AI opzionale).
3. **Rete & SSL** (hostname/FQDN, certificato: Let's Encrypt / caricamento / autofirmato —
per una VM in VNet senza DNS pubblico usa **autofirmato**).
4. **SIEM (OpenSearch)** — punta all'indexer Wazuh sull'IP privato:
- **URL**: `https://172.25.0.4:9200`
- **Utente**: `admin`
- **Password**: quella recuperata in A.4
5. **Utente admin** della console ARGOS.
6. **Riepilogo & Installazione** — il wizard clona il repository privato `tecnotel/argos`
con il token della licenza, crea il virtualenv, configura i servizi systemd
(`argos-backend/sync/ops/analytics/updater`) e avvia ARGOS.
Al termine il Web Installer si disattiva da solo e la porta 8888 viene chiusa.
Puoi rimuovere la regola NSG temporanea `allow-installer-temp`.
---
## Verifica end-to-end
Dalla VM **ARGOS**, prima del wizard puoi già validare la rete verso il SIEM:
```bash
curl -k -u admin:'LA_PASSWORD' https://172.25.0.4:9200
curl -k -u admin:'LA_PASSWORD' "https://172.25.0.4:9200/_cat/indices/wazuh-alerts-*?v"
```
La prima deve restituire il JSON con `cluster_name`; la seconda elenca gli indici
`wazuh-alerts-*` (o segnala che non ce ne sono ancora — normale su un SIEM appena nato).
A ARGOS installato, la console su `https://172.25.0.5` deve mostrare i conteggi eventi
dal SIEM: è la conferma che backend ↔ indexer comunicano.
---
## Opzioni certificato SSL (console ARGOS)
- **Let's Encrypt** — automatico, richiede DNS pubblico già puntato alla VM.
- **Certificato esistente** — caricamento `.crt` + `.key` (es. wildcard aziendale, CA interna).
- **Autofirmato** — RSA 4096, validità 10 anni, consigliato per VM in VNet senza DNS
pubblico. I browser segnaleranno il certificato come non attendibile (atteso).
---
feat(setup): Ubuntu 26.04 LTS support + cert autofirmato + 3 file .example Modifiche di compatibilita' e miglioramenti UX dopo analisi del 12/05/26 del codice argos main repo vs argos-setup. 1. Multi-version Ubuntu (24.04 e 26.04 LTS): - first-setup.sh: SUPPORTED_VERSIONS array per check - Aggiunto openssl esplicito alle dipendenze apt - README aggiornato con compatibility matrix - ARGOS code (Python 3.14-ready: no distutils/imp/pkg_resources) gia' compatibile, requirements.txt pin gia' build 2026 2. Certificato SSL autofirmato come 3a opzione: - UI: bottone '🔐 Autofirmato' nel Tab Rete & SSL - Backend: openssl req -x509 -newkey rsa:4096 -days 3650 - SAN dinamica: tutti i DNS (hostname + aliases) + IP server - Subject: C=IT, O=<cliente_full>, OU=ARGOS SOC, CN=<hostname> - Warning UI prominente sulla non-attendibilita' browser - Utile per installazioni LAN/dev senza DNS pubblico 3. Rimozione campi M365: - sp_tenant (SharePoint tenant) rimosso da Tab Cliente - sharepoint_tenant non piu' nel argos.json generato - M365/Entra ID configurabile dall'UI Integrazioni post-install 4. Textarea ai_context opzionale nel Tab Cliente: - Iniettato nei prompt AI per contestualizzare il cliente - Hint con esempio ASREM - Salvato in argos.json -> cliente.ai_context (letto da config.py) 5. Copia di 3 file .example che il setup non gestiva: - automations.json (config feed TI sources + cron daemon) - siem_integrations.json (catalogo SIEM Integration Builder) - subnet_registry.json (mapping sede/reparto da subnet) Necessari dopo i lavori marzo-maggio 2026. 6. Rimozione gen_config.py legacy: - Schema obsoleto (manca ai_context, console_url, network, vendor_heartbeat) - Non piu' richiamato da nessuno (verificato con grep) - Sostituito completamente da setup_server.py inline 7. README aggiornato: - Sezione 'Opzioni certificato SSL' con 3 modalita' - Requisiti: Ubuntu 24.04 LTS o 26.04 LTS - Tab 2 menziona contesto AI opzionale
2026-05-12 11:20:37 +02:00
## Hardening consigliato (post bring-up)
feat(setup): Ubuntu 26.04 LTS support + cert autofirmato + 3 file .example Modifiche di compatibilita' e miglioramenti UX dopo analisi del 12/05/26 del codice argos main repo vs argos-setup. 1. Multi-version Ubuntu (24.04 e 26.04 LTS): - first-setup.sh: SUPPORTED_VERSIONS array per check - Aggiunto openssl esplicito alle dipendenze apt - README aggiornato con compatibility matrix - ARGOS code (Python 3.14-ready: no distutils/imp/pkg_resources) gia' compatibile, requirements.txt pin gia' build 2026 2. Certificato SSL autofirmato come 3a opzione: - UI: bottone '🔐 Autofirmato' nel Tab Rete & SSL - Backend: openssl req -x509 -newkey rsa:4096 -days 3650 - SAN dinamica: tutti i DNS (hostname + aliases) + IP server - Subject: C=IT, O=<cliente_full>, OU=ARGOS SOC, CN=<hostname> - Warning UI prominente sulla non-attendibilita' browser - Utile per installazioni LAN/dev senza DNS pubblico 3. Rimozione campi M365: - sp_tenant (SharePoint tenant) rimosso da Tab Cliente - sharepoint_tenant non piu' nel argos.json generato - M365/Entra ID configurabile dall'UI Integrazioni post-install 4. Textarea ai_context opzionale nel Tab Cliente: - Iniettato nei prompt AI per contestualizzare il cliente - Hint con esempio ASREM - Salvato in argos.json -> cliente.ai_context (letto da config.py) 5. Copia di 3 file .example che il setup non gestiva: - automations.json (config feed TI sources + cron daemon) - siem_integrations.json (catalogo SIEM Integration Builder) - subnet_registry.json (mapping sede/reparto da subnet) Necessari dopo i lavori marzo-maggio 2026. 6. Rimozione gen_config.py legacy: - Schema obsoleto (manca ai_context, console_url, network, vendor_heartbeat) - Non piu' richiamato da nessuno (verificato con grep) - Sostituito completamente da setup_server.py inline 7. README aggiornato: - Sezione 'Opzioni certificato SSL' con 3 modalita' - Requisiti: Ubuntu 24.04 LTS o 26.04 LTS - Tab 2 menziona contesto AI opzionale
2026-05-12 11:20:37 +02:00
- **Utente OpenSearch dedicato ad ARGOS** con permessi limitati (read su `wazuh-alerts-*`,
write su `argos-alerts-enriched-*`) al posto dell'`admin` globale.
- **Normalizzazione `data.argos.*`** sul Wazuh manager (decoder + regole canoniche) per i
log dei tuoi apparati (FortiGate, Cisco, ESET): è il cuore dell'architettura ARGOS lato SIEM.
- **Backup** di `/opt/argos/config` e `/opt/argos/data` (la console ARGOS include
Backup & Restore dei file di configurazione).
feat(setup): Ubuntu 26.04 LTS support + cert autofirmato + 3 file .example Modifiche di compatibilita' e miglioramenti UX dopo analisi del 12/05/26 del codice argos main repo vs argos-setup. 1. Multi-version Ubuntu (24.04 e 26.04 LTS): - first-setup.sh: SUPPORTED_VERSIONS array per check - Aggiunto openssl esplicito alle dipendenze apt - README aggiornato con compatibility matrix - ARGOS code (Python 3.14-ready: no distutils/imp/pkg_resources) gia' compatibile, requirements.txt pin gia' build 2026 2. Certificato SSL autofirmato come 3a opzione: - UI: bottone '🔐 Autofirmato' nel Tab Rete & SSL - Backend: openssl req -x509 -newkey rsa:4096 -days 3650 - SAN dinamica: tutti i DNS (hostname + aliases) + IP server - Subject: C=IT, O=<cliente_full>, OU=ARGOS SOC, CN=<hostname> - Warning UI prominente sulla non-attendibilita' browser - Utile per installazioni LAN/dev senza DNS pubblico 3. Rimozione campi M365: - sp_tenant (SharePoint tenant) rimosso da Tab Cliente - sharepoint_tenant non piu' nel argos.json generato - M365/Entra ID configurabile dall'UI Integrazioni post-install 4. Textarea ai_context opzionale nel Tab Cliente: - Iniettato nei prompt AI per contestualizzare il cliente - Hint con esempio ASREM - Salvato in argos.json -> cliente.ai_context (letto da config.py) 5. Copia di 3 file .example che il setup non gestiva: - automations.json (config feed TI sources + cron daemon) - siem_integrations.json (catalogo SIEM Integration Builder) - subnet_registry.json (mapping sede/reparto da subnet) Necessari dopo i lavori marzo-maggio 2026. 6. Rimozione gen_config.py legacy: - Schema obsoleto (manca ai_context, console_url, network, vendor_heartbeat) - Non piu' richiamato da nessuno (verificato con grep) - Sostituito completamente da setup_server.py inline 7. README aggiornato: - Sezione 'Opzioni certificato SSL' con 3 modalita' - Requisiti: Ubuntu 24.04 LTS o 26.04 LTS - Tab 2 menziona contesto AI opzionale
2026-05-12 11:20:37 +02:00
---
## Contenuto del repository
| File | Scopo |
|---|---|
| `bootstrap.sh` | One-liner installer: scarica il repo e avvia first-setup.sh |
| `first-setup.sh` | Installer ambiente base: sistema, utenti, firewall, nginx temp, avvia wizard web |
| `setup_server.py` | Backend Python del Web Installer (porta 8888, self-contained) |
| `setup.html` | Frontend del Web Installer — wizard in 6 step |
## Repository correlati
- [`tecnotel/argos`](https://repo.argosdefense.io/tecnotel/argos) — codice runtime di
ARGOS SOC (privato, accessibile solo con licenza).
## Requisiti (sintesi)
- Ubuntu **24.04 LTS** o **26.04 LTS** (verificato dallo script).
- Accesso root (sudo).
- VM ARGOS: connettività in uscita verso `repo.argosdefense.io` e `license.argosdefense.io`;
raggiungibilità dell'indexer Wazuh su `:9200` (IP privato, VNet).
- Wazuh: serie corrente su [packages.wazuh.com](https://packages.wazuh.com) (4.14 al momento).
## Versioning
Questo repository segue lo stesso schema di versioning di `argos` (SemVer tag `vX.Y.Z`).