Ai/automazione

Ansible Playbook Provisioning Server: Checklist 12 Task Automatizzati (2026)

Ansible Playbook Provisioning Server: Checklist 12 Task Automatizzati (2026)

Ogni nuovo server uguale all’ultimo. Nessuna configurazione dimenticata. Nessun ‘ho fatto questa cosa a mano su quel server e non ricordo più cosa’. Questo è quello che fa Ansible se lo usi bene. Quando si gestiscono infrastrutture di una certa dimensione, con centinaia o migliaia di server, l’automazione del provisioning non è più un’opzione, ma una necessità. Ho visto troppe volte team perdere ore preziose a configurare manualmente un server, solo per scoprire che un dettaglio cruciale era stato omesso o configurato in modo incoerente rispetto ad altri sistemi. Questo non solo introduce rischi di sicurezza, ma aumenta anche il tempo medio per il ripristino (MTTR) in caso di incidenti.

L’adozione di un approccio Infrastructure as Code (IaC) con strumenti come Ansible permette di definire lo stato desiderato dei server in file di testo leggibili, garantendo replicabilità, velocità e coerenza. Questo articolo ti guiderà attraverso una checklist di 12 task essenziali per un Ansible playbook di provisioning server, basata sulla mia esperienza diretta in ambienti enterprise con centinaia di VM. L’obiettivo è fornirti una base solida per automatizzare il setup di un server Linux, rendendolo robusto, sicuro e pronto per la produzione in pochi minuti.

Prerequisiti / Ambiente di test

Per seguire questa guida, avrai bisogno di un ambiente Linux con Ansible installato (versione 2.10 o superiore è consigliata). Ti servirà anche un server remoto di test (una VM su Proxmox o VMware va benissimo) con accesso SSH. Assicurati che il tuo utente Ansible abbia i permessi sudo senza password sul target, o configuralo per richiederla (--ask-become-pass).

# Installazione Ansible su Ubuntu
sudo apt update
sudo apt install ansible

# Verifica versione
ansible --version

1-3: Base — utenti, SSH, sudoers

La fondazione di ogni server sicuro inizia con una gestione oculata degli accessi. Un errore comune è lasciare l’utente root abilitato per SSH o non implementare l’autenticazione a chiave pubblica. La NIS2 impone standard elevati per la gestione degli accessi, rendendo questi passaggi non solo buone pratiche ma requisiti normativi. Il 73% dei breach parte da credenziali deboli o rubate (Verizon DBIR 2025).

Task 1: Creazione Utenti Standard

Definisci un utente non-root standard per l’amministrazione, con una home directory e una shell predefinita. Questo riduce la superficie di attacco.

Task 2: Configurazione SSH con Chiavi Pubbliche

Disabilita l’autenticazione basata su password per SSH e abilita solo quella a chiave pubblica. Questo è fondamentale. Assicurati che l’utente creato al Task 1 abbia la sua chiave SSH configurata.

Task 3: Configurazione Sudoers

Concedi all’utente amministrativo i privilegi sudo solo per i comandi necessari, o per tutti i comandi senza password (se il contesto lo permette). Evita l’uso di NOPASSWD: ALL se non strettamente necessario.

- name: Configure SSH for key-based authentication
  ansible.builtin.lineinfile:
    path: /etc/ssh/sshd_config
    regexp: '^#?PasswordAuthentication'
    line: 'PasswordAuthentication no'
    state: present
  notify: Restart sshd

- name: Ensure SSH service is restarted
  ansible.builtin.service:
    name: sshd
    state: restarted
  listen: "Restart sshd"

4-6: Sicurezza — firewall, fail2ban, sysctl hardening

Una volta gestiti gli accessi, il passo successivo è proteggere il perimetro. Molti server vengono compromessi perché esposti a internet senza un firewall adeguato o senza meccanismi di protezione contro attacchi brute-force. Una configurazione di base del firewall, unita a strumenti come Fail2ban, può bloccare la maggior parte degli attacchi automatizzati. Ho visto ambienti dove un semplice ufw enable avrebbe evitato giorni di pulizia.

Task 4: Configurazione Firewall (UFW/firewalld)

Abilita e configura un firewall. Per Ubuntu, UFW è eccellente. Apri solo le porte essenziali (es. SSH, HTTP/S). Ogni porta aperta è un potenziale vettore di attacco.

Task 5: Installazione e Configurazione Fail2ban

Fail2ban monitora i log per tentativi di accesso falliti e blocca temporaneamente gli IP malevoli. È una difesa di primo livello estremamente efficace contro attacchi brute-force su SSH, FTP, web server, etc.

Task 6: Sysctl Hardening

Applica impostazioni di hardening del kernel tramite sysctl. Questo include la protezione contro IP spoofing, il blocco dei pacchetti redirect e altre ottimizzazioni di sicurezza che rendono il sistema più resiliente agli attacchi di rete. Link esterno: Linux Kernel Parameters Documentation

7-9: Servizi — NTP, auditd, logrotate

La stabilità e la tracciabilità sono pilastri di un server ben gestito. Un’ora di sistema non sincronizzata può causare problemi con certificati, autenticazione e correlazione degli eventi. L’audit del sistema è cruciale per la conformità (es. ISO 27001:2022) e per l’indagine forense, mentre una corretta gestione dei log previene l’esaurimento dello spazio disco e facilita l’analisi.

Task 7: Sincronizzazione Oraria (NTP)

Assicurati che il server sia sincronizzato con server NTP affidabili. L’accuratezza temporale è critica per i log, la crittografia e la coerenza dei dati distribuiti.

Task 8: Installazione e Configurazione Auditd

Auditd registra gli eventi di sicurezza del sistema, fornendo una traccia delle attività degli utenti e dei processi. È uno strumento indispensabile per la conformità e per investigare incidenti.

Task 9: Configurazione Logrotate

Gestisci la rotazione dei log per evitare che riempiano il disco. Configura logrotate per i servizi principali e per i log generati dalle tue applicazioni.

10-12: Monitoring e notifiche — node exporter, alerting

Non puoi gestire ciò che non misuri. Il monitoring proattivo è l’unico modo per rilevare problemi prima che diventino critici. In un ambiente con centinaia di VM, un sistema di monitoring centralizzato è vitale per mantenere gli SLA e identificare anomalie in tempo reale. Ho ridotto i tempi di downtime del 40% in un ambiente enterprise implementando un monitoring capillare.

Task 10: Installazione Node Exporter per Prometheus

Node Exporter raccoglie metriche di sistema (CPU, memoria, disco, rete) e le espone in un formato comprensibile per Prometheus. È lo standard de facto per il monitoring di server Linux.

Task 11: Configurazione Base di Alerting (es. con Alertmanager)

Una volta raccolte le metriche, è fondamentale configurare delle soglie e delle regole di alerting. Alertmanager (parte dell’ecosistema Prometheus) può inviare notifiche via email, Slack, PagerDuty, ecc., quando le soglie vengono superate.

Task 12: Integrazione con Sistema di Log Management (es. rsyslog/filebeat)

Invia i log del sistema a un sistema di log management centralizzato (SIEM/ELK Stack) tramite rsyslog o Filebeat. Questo permette di correlare eventi da più fonti e avere una visione unificata della salute del sistema.

Come testare il playbook senza rompere nulla (–check + –diff)

Uno degli aspetti più potenti di Ansible è la sua capacità di eseguire un “dry run” completo. Questo ti permette di vedere esattamente quali modifiche verrebbero applicate al sistema target senza effettivamente modificarlo. È uno strumento indispensabile per la fase di sviluppo e per le revisioni pre-produzione.

# Verifica sintassi del playbook (prima di tutto!)
ansible-playbook site.yml --syntax-check

# Esegui un dry run e mostra le differenze che verrebbero applicate
ansible-playbook site.yml --check --diff

L’opzione --diff è particolarmente utile perché mostra le modifiche esatte ai file di configurazione, permettendoti di identificare potenziali problemi o configurazioni indesiderate. Inoltre, puoi eseguire solo specifici tag per testare singoli blocchi di configurazione:

# Esegui solo i task con il tag 'security'
ansible-playbook site.yml --tags security

Errori comuni e troubleshooting

  • Problemi di connessione SSH: Assicurati che l’utente Ansible abbia la chiave SSH corretta e i permessi adeguati. Verifica la connettività con ssh user@host.
  • Privilegi Sudo: Se Ansible non riesce a eseguire comandi che richiedono sudo, controlla le configurazioni in /etc/sudoers sul server target.
  • Idempotenza: Ansible è idempotente per natura, ma a volte script personalizzati o comandi shell possono romperla. Assicurati che ogni task possa essere eseguito più volte senza effetti collaterali indesiderati.
  • Variabili e Vault: Non hardcodare mai le credenziali. Usa ansible-vault per crittografare i dati sensibili. Puoi crittografare file interi o singole variabili.
    ansible-vault encrypt group_vars/all/vault.yml
  • Inventory Dinamico: Per ambienti complessi, considera l’uso di inventory dinamici che si integrano con il tuo cloud provider o CMDB.
    ansible-inventory --list -i inventory/

FAQ — Domande Frequenti

Qual è la differenza tra un playbook e un ruolo in Ansible?

Un playbook è una lista di tasks da eseguire su un set di host, definendo l’ordine e la logica. Un ruolo (role) è un modo per organizzare i playbook e altri file (variabili, template, file) in una struttura riutilizzabile e standardizzata. I ruoli promuovono la modularità e la riusabilità, specialmente in progetti complessi.

Posso usare questo playbook per server Windows?

No, i task e i moduli specificati in questa checklist sono pensati per sistemi operativi Linux. Ansible supporta anche Windows, ma richiede moduli specifici e un approccio diverso (solitamente via WinRM) per il provisioning e la configurazione.

Come gestisco i segreti (password, chiavi API) in Ansible?

Utilizza ansible-vault. Permette di crittografare file o singole variabili, proteggendo le informazioni sensibili. I file crittografati possono essere inclusi nel controllo versione in modo sicuro, e la password del vault viene richiesta al momento dell’esecuzione del playbook.

È possibile integrare Ansible con un CI/CD pipeline?

Assolutamente sì. Ansible è un ottimo candidato per l’integrazione in pipeline CI/CD. Puoi automatizzare l’esecuzione dei playbook dopo il deployment del codice o per il provisioning di nuovi ambienti, garantendo che l’infrastruttura sia sempre nello stato desiderato e conforme.

Conclusioni con takeaway operativi

Automatizzare il provisioning dei server con Ansible non è solo una questione di efficienza, ma di sicurezza e resilienza. Un playbook ben strutturato garantisce che ogni server sia configurato in modo coerente, riducendo gli errori umani e rafforzando la postura di sicurezza. Questa checklist di 12 task fornisce una base solida per iniziare, ma ricorda: l’automazione è un processo continuo. Adatta, espandi e raffina i tuoi playbook man mano che le tue esigenze evolvono. La chiave è l’idempotenza e la testabilità, due principi fondamentali di Ansible che ti permetteranno di gestire la tua infrastruttura con fiducia.

Leggi anche: Linux Server Hardening: Checklist 15 Punti per la Produzione (2026)

Leggi anche: Zabbix 7 Installazione Ubuntu: Guida Completa e Configurazione (2026)

Leggi anche: Prometheus Grafana Linux: Stack di Monitoring Completo in 60 Minuti (2026)

Il playbook completo su GitHub

Il playbook completo con tutti i task descritti e ulteriori esempi è disponibile sul mio repository GitHub. Sentiti libero di clonarlo, modificarlo e adattarlo alle tue esigenze:

[Link al repository GitHub placeholder]

Aggiornato: Giugno 2026

Condividi questo articolo:

Scritto da

Rosario Giordano

Rosario Giordano è System Administrator e consulente IT specializzato in cybersecurity e cloud, con oltre 20 anni di esperienza nella gestione di infrastrutture Linux enterprise. Le sue aree di competenza includono hardening di SSH, piattaforme Kubernetes, database PostgreSQL, ambient i virtualizzati VMware e Proxmox, nonché la conformità ai framework di sicurezza NIS2 e ISO 27001.