Mi piacciono tantissimo le macchine virtuali perchè, oltre a provare tutti i sistemi operativi che vogliamo, oltre a sperimentare programmi e configurazioni più varie e diverse senza temere di fare danni, si possono utilizzare per tantissime altre cose come, per esempio, eseguire programmi specifici, che accedono ad internet, senza esporre il nostro principale sistema operativo. Per fare questo però è necessaria una "base di partenza" dove installare questi programmi e niente si presta meglio a ricoprire questo ruolo come un'installazione minimale di una distro Linux!

Creiamo server minimale multiuso Debian VirtualBox

La distro da scegliere per essere utilizzata come server per il nostro progetto dipende solo dai nostri gusti: io ho scelto Debian perché questo sistema è maturo, stabile, ha una ampissima varietà di software disponibile già nei repository ufficiali, viene aggiornato costantemente e offre un'installazione minimale (ma non troppo... ) senza GUI. Procuriamoci quindi il DVD di installazione, magari tramite torrent oppure l'immagine netinstall che una volta avviata scaricherà i file necessari all'installazione direttamente da internet.

» Leggi: La Grande Guida a BitTorrent

Configurazione di VirtualBox

Per la creazione della macchina virtuale utilizzeremo il già visto VirtualBox.

Do per scontato che abbiate già letto con attenzione la guida sopra linkata e quindi non mi dilungherò troppo a spiegare le configurazioni necessarie. Per il sistema scelgo 512MB di RAM (ma 256 MB saranno più che sufficienti; potremo sempre variare la dimensione in un secondo momento, se necessario), non preoccupiamoci del processore (il carico sarà minimo); mentre per la parte video, dedicare 16MB è perfetto (nessuna GUI per il nostro server, solo CLI!). Come archiviazione ho voluto abbondare (non ho grossi problemi di spazio) e ho scelto un disco virtuale da 5GB (ma 3 dovrebbero bastare). Ovviamente ho scelto la dimensione fissa perchè l'esecuzione sarà più veloce.

Creiamo server minimale multiuso Debian VirtualBox

Niente audio, niente porte seriali, niente USB (e quindi dovremo impostare, nella scheda Sistema, come Dispositivo di puntamento: Mouse PS/2), niente cartelle condivise (per il momento, ma anche queste potranno essere aggiunte all'occorrenza): tutto questo per far si che il sistema virtuale sia quanto più isolato possibile dal sistema che lo ospita. Importantissima la parte riguardante le interfacce di rete: dovremo abilitare 2 schede che serviranno rispettivamenteper fornire accesso ad internet al nostro server virtuale e per avere una interfaccia di comunicazione tra il sistema host e guest. Configureremo la prima scheda (che servirà dare accesso ad internet) in modo da avere un buon compromesso per velocità e semplicità, utilizzando Tipo di scheda Rete paravirtualizzata (virtio-net) e Connessa a: NAT. In questo modo sarà VirtualBox (insieme al DHCP di Debian) a fornire la connessione ad internet alla nostra macchina virtuale e noi ci risparmieremo qualche configurazione aggiuntiva. La seconda scheda di rete sarà l'interfaccia di comunicazione fra host e guest e poiché dovrà essere visibile solo dal computer dove questa macchina virtuale sarà in esecuzione potremo scegliere Connessa a: Scheda solo host e ancora una volta sceglieremo come Tipo di scheda Rete paravirtualizzata (virtio-net).

Creiamo server minimale multiuso Debian VirtualBox

Installazione di Debian

NOTA: la procedura di installazione descritta è la più semplice possibile ed è efficace per lo scopo che vogliamo raggiungere ma non è per forza la migliore. La procedura di hardening di un sistema Linux comincia già dal partizionamento del disco!

Avviamo l'installazione della nostra distro Debian dopo aver inserito il CD nella nostra macchina virtuale.

Creiamo server minimale multiuso Debian VirtualBox

L'installazione guidata è piuttosto semplice ma vediamo brevemente tutti i passaggi necessari.

Appena avviato il processo di installazione selezioniamo lingua di sistema, il paese e la lingua della tastiera.

Creiamo server minimale multiuso Debian VirtualBox

A questo punto verrà rilevato l'hardware di rete e verranno mostrate due schede Ethernet: eth0 e eth1

Creiamo server minimale multiuso Debian VirtualBox

Se avete configurato le schede di rete in VirtualBox esattamente nell'ordine proposto, dovrete scegliere eth0 che sarà la scheda di rete connessa tramite NAT, quella che fornisce la connessione ad internet. Attendete la configurazione automatica della rete, scegliete un Nome host (o lasciate debian) e scegliete un Nome del dominio (o lasciate vuoto).

Creiamo server minimale multiuso Debian VirtualBox

Impostate la password di root: solitamente questa password deve essere abbastanza lunga e complessa perché è una password importantissima!! Tuttavia questa volta potete scegliere una qualunque password che ricordate facilmente perché ci servirà solo per il primo accesso alla macchina e la configurazione di sudo, dopodiché disattiveremo l'accesso all'utente root! Scegliamo anche un nome utente (user va benissimo) e poi scegliamo una password, questa volta robusta (e cerchiamo di non dimenticarla!!).

Creiamo server minimale multiuso Debian VirtualBox

Siamo arrivati al partizionamento del disco e lasciamo che la procedura guidata faccia il partizionamento per noi selezionando Guidato - usa l'intero disco, selezioniamo l'unico disco disponibile e poi scegliamo Tutti i file in una partizione (per nuovi utenti)

Creiamo server minimale multiuso Debian VirtualBox

Terminare il partizionamento e scrivere le modifiche sul disco, confermate e attendete l'installazione del sistema base.

Adesso è la volta di scaricare e installare gli altri pacchetti necessari e per farlo dobbiamo indicare un mirror: scegliete pure le prime voci che vi capita e se vi viene chiesto indicazioni su un eventuale proxy, ignorate e continuate. Una volta finita la configurazione di APT declinate la gentile offerta di partecipazione alla raccolta dati sull'uso dei pacchetti e ci verrà presentata la schermata di selezione del software da installare

Creiamo server minimale multiuso Debian VirtualBox

Anche se vi potrà sembrare strano, deselezionate tutte le voci!! Vogliamo un sistema quanto più snello possibile e per adesso non installiamo niente, installeremo solo lo stretto necessario per il nostro progetto in un secondo momento.

Creiamo server minimale multiuso Debian VirtualBox

Scegliamo di installare GRUB nel master boot record, scegliamo il Device per l'installazione del boot loader: /dev/sda

Creiamo server minimale multiuso Debian VirtualBox

Attendiamo il completamento dell'installazione e riavviamo il sistema.

Creiamo server minimale multiuso Debian VirtualBox

Primo accesso

Al riavvio, accediamo come root, installiamo sudo e aggiungiamo l'utente creato in fase di installazione alla lista degli utenti autorizzati ad usarlo. Per fare questo digitiamo pochi e semplici comandi per aggiornare i repository e per installare sudo:

apt update && apt install sudo

Fatto questo digitiamo:

adduser user sudo

Naturalmente se il nome dell'utente creato è diverso da user, dovrete sostituire nel comando sopra user con il nome utente da voi scelto!

A questo punto possiamo uscire dalla sessione di root e entrare come utente user (o qualunque altro nome avete scelto). Digitiamo semplicemente exit (seguito da invio) e facciamo il login con nome utente e password.

Creiamo server minimale multiuso Debian VirtualBox

Per prima cosa assicuriamoci che il comando sudo sia correttamente configurato e potremo farlo aggiornando nuovamente i repository digitando questa volta:

sudo apt update

Se ci verranno presentate 3 regole molte importanti e ci verrà richiesta la password, siamo sicuri che tutto funziona per il meglio. Provate comunque a digitare la password e controllate che l'operazione termini senza errori. Se sudo è configurato a dovere, non abbiamo più bisogno dell'utente root; "chiudiamolo" fuori dal sistema (impedendogli di loggarsi) con il comando:

sudo passwd -l root

Configurazione seconda scheda di rete (eth1)

Procediamo con la configurazione della seconda scheda di rete che ci servirà per far accedere e comunicare il nostro sistema host con il guest.

Quando in VirtualBox si attiva una scheda di rete "solo host" (o anche una "scheda con bridge") viene caricato un nuovo driver (o modulo del kernel) che aggiunge una scheda di rete virtuale al nostro sistema host che di default ha assegnato l'indirizzo IP 192.168.56.1. Questa è visibile con il comando ifconfig su Linux o MacOS (è evidenziata la sezione interessata)

Creiamo server minimale multiuso Debian VirtualBox

e ipconfig su Windows:

Creiamo server minimale multiuso Debian VirtualBox

Fatta questa verifica, possiamo configurare la nostra seconda scheda di rete; torniamo quindi sulla nostra macchina virtuale ed andiamo a creare un file di configurazione digitando:

sudo nano /etc/network/interfaces.d/eth1

Si aprirà l'editor di testo nano e qui dovremo inserire le seguenti righe di configurazione che verranno caricate dal sistema ad ogni avvio:

  • allow-hotplug eth1
  • iface eth1 inet static
  • address 192.168.56.3
  • netmask 255.255.255.0

Chiudiamo, salvando, premendo Ctrl+X, confermiamo con S e poi invio.

ATTENZIONE: se vogliamo utilizzare più macchine virtuali contemporaneamente, dovremo cambiare l'indirizzo IP assegnato ad eth1 in modo che sia unico e diverso dalle altre!!!

Riavviamo adesso il servizio di rete in modo che la nostra configurazione venga caricata; digitiamo

sudo systemctl restart networking

Se non riceviamo nessun messaggio di errore, tutto dovrebbe essere configurato secondo i nostri desideri e possiamo verificarlo con

ip addr show

Creiamo server minimale multiuso Debian VirtualBox

Ottimizzazione

L'installazione minimale di Debian non è così minimale come si potrebbe pensare e contiene ancora molti pacchetti non essenziali anche se questo dipende molto dalla funzione che assegneremo al nostro server. Potremo quindi decidere di eliminare i pacchetti non essenziali: casomai un pacchetto fosse richiesto da un programma che installeremo in seguito, questo verrà reinstallato come dipendenza al momento opportuno. Non tratterò questa parte ma se volete, potete consultare la wiki di Debian per ridurre l'installazione.

Una cosa che mi preme, però, è la velocità di avvio e anche in questo caso la wiki di Debian ci può essere di aiuto ma, con una installazione minimale come quella che abbiamo fatto, nessuna delle operazioni descritte nella wiki riesce a velocizzare l'avvio tanto quanto l'esclusione del tempo di attesa di GRUB.

Creiamo server minimale multiuso Debian VirtualBox

Per fare questo andiamo ad editare il file di configurazione di GRUB che si trova in /etc/default/grub (possiamo usare sempre nano):

sudo nano /etc/default/grub

Qui dovremo individuare la stringa GRUB_TIMEOUT=5 e sostituire 5 con 0

Creiamo server minimale multiuso Debian VirtualBox

Chiudiamo nano sempre con Ctrl+X, confermiamo la modifica con S e poi premiamo invio.

Adesso dobbiamo aggiornare GRUB con la nuova configurazione; digitiamo quindi

sudo /usr/sbin/update-grub

Creiamo server minimale multiuso Debian VirtualBox

Al successivo riavvio non si presenterà la schermata precedentemente vista ma vedremo subito il prompt per l'immissione dei dati di accesso.

Un'altra cosa che mi piace è impostare l'aggiornamento periodico automatico, in modo da avere il mio sistema sempre aggiornato. Questo può essere fatto semplicemente con uno script di crontab ma attenzione: programmare l'aggiornamento automatico non è una pratica consigliata!!! Alcuni aggiornamenti potrebbero infatti richiedere un intervento manuale per andare a buon fine e non compromettere la stabilità del sistema tuttavia, poiché il nostro sistema ha solo pochi pacchetti installati, questa possibilità si riduce notevolmente. Sentitevi liberi di ignorare la seguente creazione dello script. Apriamo il nostro editor nano per creare un file con il nome update in /etc/cron.weekly (per un aggiornamento settimanale, se invece vogliamo farlo mensilmente dovremo creare il file in /etc/cron.monthly); digitiamo:

sudo nano /etc/cron.weekly/update

Qui potremo scrivere qualcosa tipo:

  • #!/bin/bash
  • apt-get update && apt-get upgrade -y && echo "ultimo aggiornamento" `date` > /home/user/update.txt
  • apt-get autoremove -y && apt-get autoclean

In breve: la prima riga identifica uno script da eseguire con la shell Bash, la seconda aggiorna i repositori, se l'operazione termina senza errori, installa gli aggiornamenti e, di nuovo, se l'operazione termina senza errori, genera (o sovrascrive) un file contenente la data dell'ultimo aggiornamento e infine la terza riga rimuove i pacchetti installati non più necessari e pulisce la cache dai pacchetti scaricati che non servono più. Ricordiamoci di uscire salvando con la solita procedura (Ctrl+X, S e invio) e poi non dimentichiamo di assegnare i permessi di esecuzione al file appena creato:

sudo chmod +x /etc/cron.weekly/update

Un'altra operazione da fare, consigliata soprattutto se abbiamo tante macchine virtuali e poco spazio su disco, è quella di rimuovere la documentazione e i "locale" (le traduzioni dei programmi in varie lingue) che non ci interessano dei pacchetti che abbiamo installato. Rimuovere la documentazione non è generalmente una buona idea ma dato che stiamo configurando una macchina virtuale, potremo sempre consultare la documentazione mancante sul nostro sistema host!!

Rimuoviamo quindi tutti i file contenenti nelle cartelle dove risiede la documentazione non necessaria con i comandi:
  • sudo rm -r /usr/share/doc/*
  • sudo rm -r /usr/share/groff/*
  • sudo rm -r /usr/share/lintian/*
  • sudo rm -r /usr/share/linda/*

Adesso rimuoviamo tutti i "locale" ad esclusione di quelli che ci interessano (nell'esempio sotto, quelli italiano e inglese) con il comando:

sudo find /usr/share/locale/ -maxdepth 1 -type d ! -name it* ! -name en* -exec rm -r "{}" \;

A questo punto non ci resta che impedire che l'aggiornamento automatico poco prima configurato vada a ripristinare i file appena cancellati. Per questo dobbiamo istruire dpkg a non scrivere niente nelle directory appena cancellate. Creiamo quindi un file /etc/dpkg/dpkg.conf.d/01_nodoc_no locale contenente il seguente testo:

  • path-exclude /usr/share/doc/*
  • path-exclude /usr/share/groff/*
  • path-exclude /usr/share/lintian/*
  • path-exclude /usr/share/linda/*
  • path-exclude /usr/share/locale/*
  • path-include /usr/share/locale/en*
  • path-include /usr/share/locale/it*

Attenzione alle ultime due righe (path-include) che servono per indicare di aggiornare quelle directory anche se la directory che le contiene è esclusa.

Dopo aver configurato la seconda scheda di rete, potremo abilitare SSH: la nostra macchina virtuale sarà utilizzata come servizio (o demone) di sistema e quindi non vedremo mai la finestra di VirtualBox che racchiude il nostro server Debian e anche se questa può sempre essere resa visibile, è molto utile avere un modo più semplice e diretto per accedere ed amministrare la nostra macchina virtuale. Per fare questo dovremo per prima cosa installare SSH sulla nostra macchina virtuale tramite il comando

sudo apt install ssh

Adesso dovremo modificare il file di configurazione in modo da abilitare l'ascolto sull'indirizzo della seconda scheda di rete (192.168.56.3) e magari potremo anche permettere solo la connessione del nostro utente da un solo IP (quello della macchina host, 192.168.56.1). Tutto questo possiamo digitando

sudo nano /etc/ssh/sshd_config

e qui aggiungere le seguenti righe

  • ListeAddress 192.168.56.3
  • AllowUsers user@192.168.56.1

Salviamo nel solito modo e infine avviamo e abilitiamo il servizio ssh digitando:

sudo systemctl start ssh

sudo systemctl enable ssh

Per altre possibili configurazioni vi rimando agli articoli riguardanti SSH già presenti su Turbolab.

Abbiamo fatto un bel po' di lavoro e a questo punto è arrivato il momento di creare uno snapshot oppure un clone o entrambi!!!

Come avviarla

Visto che possiamo amministrare la nostra macchina virtuale tramite SSH, possiamo avviarla senza mostrare la finestra di VirtualBox sia su Linux che su Mac che su Windows digitando sul terminale/console/prompt dei comandi

VBoxHeadless -s Debian

Ovviamente Debian dovrà essere sostituito con il nome che abbiamo scelto per la nostra macchina virtuale, all'inizio della configurazione!

Il comando per spegnere la macchina virtuale (ma dovremo digitarlo in una nuova istanza del terminale/console/prompt dei comandi perché il precedente rimarrà occupato dal comando che abbiamo digitato in precedenza) sarà

VBoxManage controlvm Debian acpipowerbutton

Detto questo si capisce come si possano creare facilmente due collegamenti, uno per l'avvio manuale e uno per lo spegnimento della nostra macchina virtuale, ma in alcuni casi potremo avere la necessità di avviare la macchina virtuale contemporaneamente all'accensione del PC o al login del nostro utente.

Nel manuale di VirtualBox c'è una procedura per l'avvio di macchine virtuali al boot del sistema host ma esistono metodi più semplici (almeno per Linux e Windows; gli utenti MacOS possono seguire il manuale di VirtualBox), che utilizzano i comandi già visti.

Se la nostra distro Linux (ricordate: adesso stiamo parlando del sistema host!!) ha systemd, possiamo creare un nuovo servizio creando il file /etc/systemd/system/vbox@Debian.service. In caso abbia ancora init, possiamo creare il file /etc/init.d/vbox_Debian. I due file sono in allegato a questo articolo e potete ispezionarli con un qualunque editor di testo; in entrambi i casi dovrete, ovviamente, sostituire "CUB3" con il vostro nome utente e "Debian" con il nome della vostra macchina virtuale...

Per Windows esistono un sacco di programmi per avviare le macchine virtuali automaticamente ma sono tutti superflui; si può infatti sfruttare Utilità di pianificazione per avviare la nostra macchina virtuale al login del nostro utente e spegnerla al logout!! È quindi necessario creare due attività e usare un altro comando per l'avvio della macchina virtuale per far si che non venga mostrata nessuna finestra (in realtà anche in questo modo si aprirà una finestra del prompt per il tempo strettamente necessario all'avvio della macchina virtuale). Il comando da inserire nella scheda Attivazione, in caso di accesso dell'utente è

C:\Programmi\Oracle\VirtualBox\VBoxManage.exe

e come argomenti aggiuntivi

startvm Debian --type headless

Creiamo server minimale multiuso Debian VirtualBox

L'altra attività pianificata da programmare servirà al corretto spegnimento della macchina virtuale e come attivazione utilizzeremo il comando già visto da eseguire alla disconnessione locale della sessione utente

Creiamo server minimale multiuso Debian VirtualBox

Bene a questo punto abbiamo una macchina virtuale con una distro Linux minimale, che si auto aggiorna, che possiamo amministrare attraverso SSH e che è può avviarsi al boot del nostro sistema operativo: cosa possiamo farci?

Come si dice in questi casi: restate sintonizzati!!

» Leggi: Creiamo un proxy Tor su macchina virtuale

» Leggi: Creiamo un client peer-to-peer multirete su macchina virtuale