Skip to main content

Capitolo 9 – Hardening e Sicurezza dei Server

Dopo aver imparato a deployare applicazioni, è fondamentale proteggere i server.

L’hardening consiste nell’applicare configurazioni e best practice per ridurre la superficie di attacco e aumentare la sicurezza.

Ansible è uno strumento ideale per automatizzare queste procedure.


9.1 Aggiornamenti di Sicurezza

Eseguire regolarmente aggiornamenti di sicurezza è fondamentale.

Esempio playbook:

- name: Aggiornamenti di sicurezza
  hosts: all
  become: true
  tasks:
    - name: Aggiornamento pacchetti Debian
      apt:
        upgrade: dist
      when: ansible_os_family == "Debian"

    - name: Aggiornamento pacchetti RedHat
      yum:
        name: "*"
        state: latest
      when: ansible_os_family == "RedHat"

9.2 Gestione Utenti e SSH

  • Disabilitare login root diretto via SSH
  • Creare utenti con privilegi limitati
  • Forzare l’uso di chiavi SSH
  • Disabilitare password login quando possibile

Esempio task per SSH:

- name: Disabilita root login SSH
  lineinfile:
    path: /etc/ssh/sshd_config
    regexp: '^PermitRootLogin'
    line: 'PermitRootLogin no'
  notify: Restart ssh

- name: Imposta chiavi SSH per utente deploy
  authorized_key:
    user: deploy
    state: present
    key: "{{ lookup('file', '~/.ssh/id_ed25519.pub') }}"

Handler per restart SSH:

- name: Restart ssh
  service:
    name: ssh
    state: restarted

9.3 Firewall e Accesso

Abilitare firewall con regole base:

- name: Configura UFW
  ufw:
    state: enabled
    rule: allow
    port: "{{ item }}"
  loop:
    - 22
    - 80
    - 443
  • Port 22 → SSH
  • Port 80 → HTTP
  • Port 443 → HTTPS

9.4 Rimozione Pacchetti Non Necessari

Ridurre il rischio rimuovendo software inutile:

- name: Rimuovi pacchetti non necessari
  package:
    name: "{{ item }}"
    state: absent
  loop:
    - telnet
    - ftp
    - rsh-client

9.5 Logging e Audit

Abilitare logging e audit per monitorare accessi:

- name: Installazione auditd
  package:
    name: auditd
    state: present

- name: Avvia auditd
  service:
    name: auditd
    state: started
    enabled: yes

9.6 Sicurezza dei File di Configurazione

  • Impostare permessi restrittivi su file sensibili
  • Separare variabili segrete con Ansible Vault

Esempio:

- name: Imposta permessi su segreti
  file:
    path: /etc/app/secrets.yml
    owner: root
    group: root
    mode: '0600'

9.7 Best Practice Hardening

  • Automatizzare tutto con Ansible
  • Versionare playbook di sicurezza separatamente
  • Testare ogni modifica in staging prima di prod
  • Monitorare log di sistema e anomalie
  • Aggiornare regolarmente le policy di sicurezza

9.8 Conclusione

Applicare hardening con Ansible permette di:

  • Ridurre la superficie di attacco
  • Automatizzare best practice di sicurezza
  • Mantenere server coerenti e sicuri
  • Avere procedure ripetibili e verificabili

Nei prossimi capitoli si può approfondire:

  • Logging e monitoring avanzato
  • Troubleshooting playbook