Home giubbe.org


×

Attenzione!

Le parole scritte in rosso devono essere sostituite dai vostri parametri.

×

Beta!

Sto lavorando al sito e commetterò tanti errori: potete segnalarmeli all'indirizzo indicato in fondo pagina. Segnalatemi anche eventuali vostre richieste. Grazie. !!!




Dovecot, 2° parte



Nella cartella /etc/dovecot/conf.d/ ci sono alcuni file .ext

Apriamo in sola lettura, perciò senza bisogno di sudo, il file auth-sql.conf.ext :
cat /etc/dovecot/conf.d/auth-sql.conf.ext
multi


Questo file indica a Dovecot dove trovare le informazioni per poter autenticare gli utenti: nel file /etc/dovecot/dovecot-sql.conf.ext

Esso prevede due sezioni, passdb e userdb, le quali optano di usare sql per richiedere al database dove rivolgersi per risolvere le query sia per user, sia per password.

Apriamo con nano il file indicato:
sudo nano /etc/dovecot/dovecot-sql.conf.ext
multi

Leggiamo il file; esso è ben commentato per le varie ipotesi di autenticazione con un database sql .


Giunti alla fine del file, possiamo inserire in esso la configurazione per regolare il rapporto tra Dovecot ed il database creato con MariaDB:
driver = mysql

connect = host=localhost dbname=serverdiposta user=gestoreposta password=g€$t0r€p0$t@

default_pass_scheme = ARGON2I

password_query = SELECT username AS user,password FROM mailbox WHERE username = '%u'

user_query = SELECT maildir FROM mailbox WHERE username = '%u'

iterate_query = SELECT username AS user FROM mailbox

multi

Usciamo, salvando.


Riavviamo Dovecot :
sudo systemctl restart dovecot

ed accertiamoci dello stato di Dovecot :
systemctl status dovecot

multi



Controlliamo se riusciamo ad estrarre gli utenti dal database con :
sudo doveadm user '*'

multi



Possiamo chiedere a doveadm di elencare le caselle postali di un utente:
sudo doveadm mailbox list -u giubbe@sitoprovaprimo.it

multi


Possiamo creare con doveadm una nuova cartella per un utente:
sudo doveadm mailbox create -u giubbe@sitoprovaprimo.it nuova_casella
e poi elencarne il contenuto

multi


All'inverso, possiamo cancellare una cartella con doveadm :
sudo doveadm mailbox delete -u giubbe@sitoprovaprimo.it nuova_casella
ed accertarsi dell'eliminazione.

multi


Possiamo, sempre con doveadm, cercare dove sono posti i file di log:
sudo doveadm log find

multi


Per quanto riguarda i file di log, possiamo chiedere a doveadm di mostrarci i 1000 ultimi errori ed avvisi, ma soltanto dall'ultimo riavvio:
sudo doveadm log errors

multi



Affrontiamo un'ultima utilità di doveadm, utile per fare il backup di ogni cartella del singolo utente.

Generiamo una cartella apposita,/home/backup/ :
sudo mkdir /home/backup/
e rendiamo proprietario e gruppo della cartella vmail :
sudo chown vmail:vmail /home/backup/

Con doveadm facciamo il backup delle cartelle del singolo utente verso una cartella in /home/backup:
sudo doveadm backup -u giubbe@sitoprovaprimo.it mdbox:/home/backup/giubbe@sitoprovaprimo.it/**

multi

ed elenchiamone il contenuto
sudo ls -l /home/backup/

multi

Con un semplice "cronjob", potremmo implementare un backup a scadenza fissa, con relativa cancellazione dei file dopo tot periodo, ed avere sempre una copia delle mail transitate nel server, per un eventuale recupero, in caso di disgraziata cancellazione della mail da parte dell'utente.

Per conoscere altri usi di doveadm, usate l'opzione help.


Quando abbiamo scritto la query per estrapolare gli utenti e le loro password, abbiamo nominato default_pass_scheme con valore ARGON2I .

Ma cosa significa?

Per conoscere i vari tipi di cifratura (default_pass_scheme) supportati da Dovecot, utilizziamo
doveadm-pw, il generatore di hash per password ed anche il validatore degli hash creati,
con l'opzione per elencarne gli schemi predisposti: -l
sudo doveadm pw -l
multi


Tra i tanti schemi, si trova anche ARGON2I (argon 2 i).

Ma come funziona?

L'hashing della password rende la password da testo in chiaro a stringa di caratteri casuali di una lunghezza specifica.

Una caratteristica dell'hashing è il modificare enormemente l'hash anche per piccoli cambiamenti nel testo in chiaro da cifrare; ad esempio pass1 e pass2 saranno completamente diversi e non solo nella parte finale.

Però, se facciamo l'hashing di pass1 e, in un secondo momento, noi, oppure un'altro utente, generiamo un hashing sempre per una password chiamata pass1, il risultato sarà identico.

Per ovviare a ciò, usiamo il "salting": nel creare l'hash del testo in chiaro, verrano aggiunti dei caratteri casuali alle parole da sottoporre ad hashing: pass1&ht5@ , pass1$%bf2
Il risultato, partendo da testi identici, saranno hash completamente diversi.

Argon2 è un algoritmo di hashing delle password progettato per essere resistente agli attacchi a forza bruta (dove un attaccante prova un numero elevato di password fino a trovare quella giusta) e agli attacchi a tabella arcobaleno (che utilizzano tabelle pre-calcolate per invertire gli hash).

I "rounds" sono il numero di iterazioni che l'algoritmo esegue per generare l'hash del testo in chiaro.
Maggiore è il numero di rounds, più tempo si impiega per calcolare l'hash, ma anche più tempo impiega un attaccante a provare diverse password.
Questo rende l'algoritmo più resistente agli attacchi.

Il parallelismo indica quanti thread vengono utilizzati per creare l'hashing del testo.
Il thread è una unità di esecuzione indipendente all'interno del processore.
Minore è il suo valore e maggiore sono le risorse a disposizione per l'hashing.

Per resistere agli attacchi, Argon2 utilizza un'elevata quantità di calcoli e risorse.
Non possiamo esagerare con il numero di rounds, senza rallentare eccessivamente la macchina.
Pensiamo ad un server con tanti utenti e tante generazioni di hash o validazioni di hash: il sistema andrebbe presto in crisi.

In doveadm-pw, per argon2i, il valore di default per i rounds è 3 e 1 per il parallelismo.
Perciò, se non diversamente indicato, doveadm userà questi valori.

Per generare password più robuste, useremo doveadm-pw con 5 rounds per lo schema argon2i :
sudo doveadm pw -r 5 -s ARGON2I

Doveadm ci chiede di inserire la password e di confermarla

multi


L'analisi dell'hash risultante ci dice:

$argon2i : abbiamo usato lo schema di hashing ARGON2I;

$v=19 : versione dell'hash; (0x13 numero esadecimale = 19 in decimale), perciò argon2 v1.3

$m=32768 : quantità di memoria usata in kilobytes;

t=5 : numero di "rounds" effettuati;

p=1 : quantità di parallelismo;

$AjyU3lnVSE0PkvMY6rz+sw : salt usato;

$9nBzMQCvoOMoneP9wPAHRvTu3mQDFFNelW/fWieP57Y : hash della password .


Adesso proviamo se quanto dichiarato per il salting è reale.

Digitiamo lo stesso comando, con la stessa password:
sudo doveadm pw -r 5 -s ARGON2I

Doveadm ci chiede di inserire la password e di confermarla

multi


Stavolta il salt è diverso e, di conseguenza, anche l'hashing della password è diversissimo.


Potremmo anche provare di quanto rallenta il sistema, mettendo, nel comando per creare la password cifrata, 10 iterazioni, invece di 5:
sudo doveadm pw -r 10 -s ARGON2I

A meno che abbiate una macchina estremamente potente, con tanta memoria e processori superperformanti, la differenza di tempo per creare l'hash si apprezza molto bene.

multi



Adesso, abbiamo i mezzi e la conoscenza per sostituire le password inserite, alla creazione del database, in chiaro nella colonna riguardante la password di ogni utente.

Avviamo MariaDB :
sudo mariadb

Una volta entrati, usiamo il nostro database, serverdiposta:
use serverdiposta;

multi


Leggiamo cosa avevamo inserito nella tabella mailbox:
select * from mailbox;
multi


Dovremo sostituire ogni password relativa al proprio utente.

Per fare ciò, dovremo generare una password cifrata e sostituirla a quella esistente.

Per comodità, apriremo un'altra finestra del terminale solo per generare l'hash della password e, dopo aver copiato il testo, lo inseriremo in una query scritta nella finestra del terminale già aperta e posizionata nel database.

Nulla toglie di poter creare la password, copiarla in un file di testo, riaccedere al database ed inserire la password ricopiandola nella query; tutte operazioni fatte nella solita finestra.


Generiamo una nuova password in una finestra del terminale
sudo doveadm pw -r 5 -s ARGON2I
multi


e copiamo l'hash risultante nella query scritta nel pannello aperto sul database:
update mailbox set password='inserire_qui_tra_singole_virgolette_hash_copiato' where username='giubbe@sitoprovaprimo.it';

multi


Raccomandiamo estrema attenzione agli spazi e ai non spazi, alle virgolette singole da porre prima e dopo l'hash ed anche prima e dopo l'utente .

Ripetiamo questa procedura tante volte quanti sono gli utenti e relativa password da cambiare:

multi


Finito l'aggiornamento delle password, diamo un ultimo controllo alla tabella :
select * from mailbox;

multi

Usciamo dal database:
quit;
multi



Possiamo finalmente controllare se l'autenticazione, tramite il database, funziona; e lo facciamo sempre tramite doveadm .

Usiamo la funzione auth test , poi indichiamo l'utente seguito dalla sua password, così come dovremo fare nel client di posta:
sudo doveadm auth test giubbe@sitoprovaprimo.it password_non_criptata

multi

Succeeded : l'autenticazione è riuscita ;


multi

Failed, invece, ne indica il fallimento.

Così facendo, possiamo testare tutte le autenticazioni degli utenti.



Stavolta, la configurazione del Server di Posta è finita: il sistema è completo ed espandibile all'infinito, moderato solo dalla vostra volontà.

Possiamo creare utenti, aggiungere domini da gestire, spedire e ricevere posta con i client di posta.


Però, per essere "accolti" nella comunità dei Mail Server, per presentarsi ad essi senza essere emarginati in oscure liste nere, manca la definizione di alcuni record DNS, che saranno i nostri biglietti da visita, molto dettagliati.