diff --git a/README.md b/README.md index b295d18..e5cbacc 100644 --- a/README.md +++ b/README.md @@ -4,28 +4,262 @@ 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. -## Installazione rapida (one-liner) +--- -Su una macchina Ubuntu 24.04 o 26.04 LTS vergine, esegui: +## 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 128–256 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 (10–15 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 scaricherà il repository e avvierà `first-setup.sh`. +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 +> 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 +> ``` -Se preferisci eseguire gli step separatamente: +### 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 -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 +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" ``` -## Contenuto +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 | |---|---| @@ -34,40 +268,19 @@ sudo bash first-setup.sh | `setup_server.py` | Backend Python del Web Installer (porta 8888, self-contained) | | `setup.html` | Frontend del Web Installer — wizard in 6 step | -## Flusso d'installazione - -1. Il cliente esegue il bootstrap (o il clone manuale + first-setup.sh). -2. `first-setup.sh` predispone l'ambiente base Ubuntu (pacchetti, utente argos, cartelle, firewall) e avvia il Web Installer su `http://IP:8888`. -3. Il cliente apre il browser e segue il wizard in 6 step: - 1. **Licenza ARGOS** — il wizard mostra il `machine_id` di questo server. Il cliente lo invia a Tecnotel, riceve `license.json`, lo carica nel wizard. - 2. **Informazioni cliente** (nome, dominio, logo, contesto AI opzionale) - 3. **Rete & SSL** (hostname, certificato: Let's Encrypt / caricamento / autofirmato) - 4. **SIEM** (OpenSearch) - 5. **Utente admin** - 6. **Riepilogo & Installazione** — il wizard clona il repository privato `tecnotel/argos` usando il token della licenza, crea virtualenv, configura servizi e avvia ARGOS SOC. - -Al termine il Web Installer viene disattivato automaticamente e la porta 8888 chiusa. - -## Opzioni certificato SSL - -Il wizard offre tre modalità per il certificato: - -- **🔒 Let's Encrypt** — automatico e gratuito. Richiede DNS pubblico già puntato al server. -- **📄 Certificato esistente** — caricamento di file `.crt` e `.key` esistenti (es. cert wildcard aziendale, cert di CA interna). -- **🔐 Autofirmato** — generato localmente con RSA 4096 e validità 10 anni. Utile per installazioni in LAN / dev / ambienti isolati senza DNS pubblico. ⚠️ I browser segnaleranno il certificato come non attendibile. - -## Requisiti - -- Ubuntu **24.04 LTS** o **26.04 LTS** (verificato dallo script) -- Accesso root (sudo) -- Connessione internet verso `repo.argosdefense.io` (Gitea: codice e aggiornamenti) e `license.argosdefense.io` (vendor heartbeat e licenze) -- Una licenza ARGOS valida emessa da Tecnotel per il `machine_id` del server - ## Repository correlati -- [`tecnotel/argos`](https://repo.argosdefense.io/tecnotel/argos) — codice runtime di ARGOS SOC (privato, accessibile solo con licenza). +- [`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`). -