argos-setup/README.md

287 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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).
---
## Hardening consigliato (post bring-up)
- **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).
---
## 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`).