Vai al contenuto

Procedura Operativa: Nuova Installazione Impianto

Questo documento rappresenta la guida operativa per il sistemista incaricato di preparare, configurare e mettere in esercizio un nuovo Mini PC industriale ("box impianto") destinato alla sede di un cliente.

La procedura copre gli aspetti di sistema operativo, rete, VPN WireGuard, servizi locali, proxy verso le telecamere/NVR e la configurazione del centralino VoIP per le trombe acustiche.


1. Schema del Flusso di Provisioning

flowchart TD
    A["1. Preparazione Hardware Mini PC<br/>Installazione Ubuntu LTS, Docker, Utenti"] --> B["2. Configurazione VPN WireGuard<br/>Creazione Peer pfSense & MyVPN.conf"]
    B --> C["3. Servizi di Base sul Box<br/>Listener TCP :2000 & Watchdog VPN"]
    C --> D["4. Nginx Proxy Manager Locale<br/>Stream TCP :10101-10105 verso NVR locale"]
    D --> E["5. Provisioning Software MDM<br/>Esecuzione installer & container Docker"]
    E --> F["6. Configurazione Tromba VoIP (se presente)<br/>Creazione interno SIP PJSIP su FreePBX"]
    F --> G["7. Collaudo e Censimento Rete<br/>Verifica handshake, stream video e censimento IP"]
Hold "Ctrl" to enable pan & zoom

2. Passo 1: Installazione e Preparazione del Sistema Operativo

  1. Installazione SO: Installare Ubuntu Linux LTS a 64 bit sul Mini PC industriale.
  2. Configurazione Utente Amministrativo:
  3. Impostare la password dell'utente root:
    sudo passwd root
    sudo passwd -u root
    
  4. Creare o configurare l'utente standard di gestione bsqsecurity abilitando i privilegi di sudo senza richiesta di password:
    sudo usermod -aG sudo bsqsecurity
    echo "bsqsecurity ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/bsqsecurity
    sudo chmod 0440 /etc/sudoers.d/bsqsecurity
    
  5. Abilitare l'accesso SSH per manutenzioni remote in /etc/ssh/sshd_config (PermitRootLogin yes) e riavviare il demone SSH:
    sudo systemctl restart ssh
    
  6. Installazione Runtime Docker:
  7. Installare Docker Engine e Docker Compose dal repository ufficiale Docker:
    sudo apt-get update
    sudo apt-get install -y ca-certificates curl gnupg
    sudo install -m 0755 -d /etc/apt/keyrings
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
    sudo chmod a+r /etc/apt/keyrings/docker.gpg
    echo "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    sudo apt-get update
    sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
    sudo usermod -aG docker bsqsecurity
    

3. Passo 2: Configurazione della VPN WireGuard

Ciascun box deve stabilire un tunnel sicuro cifrato verso il firewall centrale pfSense (WG_VPN, tun_wg0).

A. Creazione del Peer sul Firewall pfSense

  1. Accedere al pannello pfSense via VPN all'indirizzo http://172.16.16.1/.
  2. Navigare su VPN → WireGuard → Peers → Add Peer.
  3. Compilare i seguenti campi:
  4. Tunnel: Selezionare tun_wg0 (WG_VPN).
  5. Description: Inserire la denominazione del cliente e della sede.
  6. Keep Alive: 25.
  7. Pre-shared Key: Cliccare sul pulsante Generate e salvare la chiave generata (servirà nel file di configurazione del box).
  8. Allowed IPs: Assegnare il primo indirizzo IP libero progressivo nella subnet 172.16.16.0/24 con maschera /32 (es. 172.16.16.67/32).
  9. Public Key: Incollare la chiave pubblica generata per il box (vedi punto successivo).
  10. Cliccare su Save Peer e poi su Apply Changes in alto a destra.

B. Generazione Chiavi e File di Configurazione sul Box

Sul Mini PC Ubuntu:

  1. Installare il pacchetto WireGuard:
    sudo apt-get update && sudo apt-get install -y wireguard
    
  2. Generare la coppia di chiavi privata e pubblica:
    umask 077
    wg genkey | tee /etc/wireguard/private.key | wg pubkey > /etc/wireguard/public.key
    
    (La chiave contenuta in /etc/wireguard/public.key va inserita su pfSense nel campo Public Key del peer).
  3. Creare il file di configurazione /etc/wireguard/MyVPN.conf:
    [Interface]
    PrivateKey = <CONTENUTO_DI_private.key>
    Address = 172.16.16.<IP_ASSEGNATO>/24
    DNS = 8.8.8.8
    MTU = 1412
    
    [Peer]
    PublicKey = <CHIAVE_PUBBLICA_TUN_WG0_PFSENSE>
    PresharedKey = <PRESHARED_KEY_GENERATA_SU_PFSENSE>
    AllowedIPs = 172.16.16.1/32, 172.16.16.253/32, 172.16.16.254/32
    Endpoint = receiver1.protexia24.com:51420
    PersistentKeepalive = 25
    
  4. Abilitare e avviare il servizio del tunnel:
    sudo systemctl enable --now wg-quick@MyVPN
    
  5. Risoluzione Problema DNS Ubuntu (systemd-resolved): Su Ubuntu LTS l'avvio di wg-quick può provocare la perdita della risoluzione dei nomi. Eseguire:
    sudo rm /etc/resolv.conf
    sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
    sudo systemctl restart systemd-resolved.service
    
  6. Watchdog della Connessione VPN (Cronjob): Creare uno script di verifica in crontab per garantire che il tunnel venga riavviato in caso di blocco della connessione:
    sudo crontab -e
    
    Aggiungere la riga:
    */5 * * * * ping -c 2 -W 3 172.16.16.1 > /dev/null || systemctl restart wg-quick@MyVPN
    

4. Passo 3: Servizio di Raggiungibilità (Listener TCP Porta 2000)

La centrale operativa e gli script di monitoraggio verificano lo stato online del box interrogando la porta TCP 2000.

  1. Installare il pacchetto socat:
    sudo apt-get install -y socat
    
  2. Creare l'utente di sistema dedicato:
    sudo useradd --system --no-create-home --shell /usr/sbin/nologin portlistener
    
  3. Creare l'unità systemd /etc/systemd/system/port-2000-listener.service:
    [Unit]
    Description=Listener TCP porta 2000 per check raggiungibilita
    Wants=network-online.target
    After=network-online.target
    
    [Service]
    User=portlistener
    ExecStart=/usr/bin/socat TCP-LISTEN:2000,reuseaddr,fork,keepalive,nodelay -
    Restart=always
    RestartSec=1
    NoNewPrivileges=yes
    ProtectSystem=full
    ProtectHome=true
    PrivateTmp=yes
    
    [Install]
    WantedBy=multi-user.target
    
  4. Attivare il servizio:
    sudo systemctl daemon-reload
    sudo systemctl enable --now port-2000-listener.service
    sudo systemctl status port-2000-listener.service
    

5. Passo 4: NGINX Proxy Manager per Stream NVR / Telecamere

Presso molti clienti le telecamere o l'NVR si trovano su una rete interna isolata e priva di indirizzo IP pubblico o cloud. Per consentire alla centrale operativa di estrarre i flussi video, sul box viene avviato un Nginx Proxy Manager in Docker con funzionalità di inoltro stream TCP:

  1. Creare la cartella di lavoro /home/bsqsecurity/nginx_proxy/ con un file docker-compose.yml:
    services:
      app:
        image: 'jc21/nginx-proxy-manager:latest'
        restart: unless-stopped
        ports:
          - '81:81'          # Interfaccia Web di amministrazione
          - '8081:80'        # Proxy HTTP
          - '4443:443'       # Proxy HTTPS
          - '10101-10105:10101-10105' # Stream TCP verso NVR
        volumes:
          - ./data:/data
          - ./letsencrypt:/etc/letsencrypt
    
  2. Avviare il container:
    cd /home/bsqsecurity/nginx_proxy && docker compose up -d
    
  3. Accedere al pannello su http://<IP_VPN_DEL_BOX>:81 e configurare le regole di Stream:
  4. Creare un nuovo stream per ciascuna porta da 10101 a 10105.
  5. Porte per modello NVR:
    • Hikvision / Safire: Inoltro verso la porta dati proprietaria 8000 dell'IP locale dell'NVR.
    • Uniview: Inoltro verso la porta Web 80 e la porta RTSP 554 dell'IP locale dell'NVR.

6. Passo 5: Provisioning del Software Applicativo MDM

  1. Eseguire lo script automatico servito dal midserver di produzione:
    curl -s http://172.16.16.253:5000/static/installer.sh | sudo bash
    
  2. Lo script autentica la macchina, scarica da AWS ECR le immagini corrette (installation, frigate_wrapper, dsniff), avvia i container Docker e genera le configurazioni base.
  3. Il nuovo box compare immediatamente nella sezione Nuove Installazioni del pannello web di produzione (https://panel.bsqdev.uk).
  4. Dal pannello web, selezionare il tipo di detector (Frigate con TPU o modulo GANZ) e inserire il MAC address per completare l'associazione.

7. Passo 6: Configurazione Tromba Acustica / Speaker IP (FreePBX)

Se l'impianto include un altoparlante IP per le comunicazioni a viva voce della centrale:

Regola Fondamentale: Creare sempre prima l'interno telefonico sul centralino FreePBX e solo successivamente configurare l'apparato fisico. Se la tromba tenta di registrarsi su un interno inesistente, il suo IP verrà bannato dal firewall Fail2ban di FreePBX.

  1. Accedere all'interfaccia di FreePBX: http://170.10.0.101/admin/ (via VPN).
  2. Andare su Applications → Extensions → Add Extension → Add New SIP [chan_pjsip] Extension.
  3. Impostazioni Generali:
  4. User Extension: Inserire il primo numero progressivo libero (es. 107).
  5. Display Name: Denominazione cliente e ubicazione tromba (es. Rossi Srl - Ingresso Principale).
  6. Secret: Generare/annotare la password sicura (da impostare sull'altoparlante).
  7. Scheda Advanced:
  8. Max Contacts: Impostare su 3.
  9. Direct Media: Selezionare No (tutto il flusso RTP deve transitare dal server).
  10. Scheda Recording Options:
  11. Impostare tutti i valori su Force (obbligo legale/aziendale di registrare ogni interazione vocale).
  12. Cliccare su Submit in basso e poi sul pulsante rosso Apply Config in alto a destra.
  13. Configurare l'altoparlante fisico con:
  14. Server SIP: 185.31.66.186 (oppure sip.protexia24.com) su porta 5060.
  15. Numero interno e Secret impostati al passo 3.

8. Particolarità: Impianti con Più Box (Architettura Master / Slave)

In siti di grandi dimensioni in cui un singolo Mini PC non è sufficiente a processare tutti i flussi video, vengono installati 2 o più box:

  • Box Master:
  • Possiede l'indirizzo MAC principale registrato a contratto.
  • Mantiene il tunnel WireGuard attivo verso pfSense e funge da gateway per il sito.
  • In Nginx Proxy Manager del Master vengono creati due stream TCP per inoltrare il traffico verso ServerIT: porta 5000 (API) e porta 1883 (MQTT).
  • Box Slave:
  • Vengono registrati sul pannello con il MAC virtuale <MAC_MASTER>-01, <MAC_MASTER>-02.
  • Non comunicano direttamente con pfSense via VPN, ma indirizzano il proprio traffico verso l'IP locale del Master, che fa da ponte verso il midserver.

9. Checklist di Collaudo Finale

  • [ ] Handshake WireGuard stabilito (sudo wg show mostra trasferimenti recenti in entrata e uscita).
  • [ ] Ping positivo verso pfSense (ping 172.16.16.1) e ServerIT (ping 172.16.16.253).
  • [ ] Listener porta 2000 attivo e rispondente da remoto.
  • [ ] Nginx Proxy Manager avviato e porte stream TCP configurate verso gli NVR locali.
  • [ ] Box visibile e registrato su https://panel.bsqdev.uk.
  • [ ] Tromba SIP registrata su FreePBX e prova audio completata con la centrale operativa.
  • [ ] Censimento documentale: registrazione di Indirizzo IP VPN, MAC Address e numero di interno SIP nel foglio di inventario impianti.