Quote
Per chi volesse conferire ad
ogni utente una
determinata quantità di spazio, possiamo implementare le
quote, abbinate ad ogni spazio/utente.
Con MariaDB, inseriremo una
colonna in più nella tabella
mailbox del database
serverdiposta e la nomineremo
quota.
Sarà di tipo
bigint ("big integer"), cioè numeri interi anche molto grandi.
Il campo non potrà non essere inserito e avrà un valore di
default 0, cioè nessun limite.
Entriamo con
MariaDB nella gestione:
sudo mariadb
entriamo in
serverdiposta
use serverdiposta;
ed aggiungiamo la colonna
quota, con valore di
default = 0 :
alter table mailbox
add quota bigint(11) not null default 0;
Controlliamo la riuscita della creazione della nuova colonna:
select * from mailbox;
Adesso,
diamo delle quote ai nostri 4 utenti.
Agli utenti di sitoprovaprimo.it daremmo 200MB di spazio.
Quota vuole una cifra espressa in bytes: 200 x 1024 x 1024 = 209715200 .
Mentre agli utenti di sitoprovasecondo.it daremo una quota di 100MB, cioè 104857600 bytes.
Così le prove saranno più brevi.
update mailbox set quota = 104857600 where username = 'carlino@sitoprovasecondo.it';
update mailbox set quota = 104857600 where username = 'franco@sitoprovasecondo.it';
update mailbox set quota = 209715200 where username = 'gennarino@sitoprovaprimo.it';
update mailbox set quota = 209715200 where username = 'giubbe@sitoprovaprimo.it';
Controlliamo che tutto sia andato a buon fine:
select * from mailbox;
Vi potete sbizzarire a variare le quote di spazio a vostro piacimento.
Passiamo alla modifica del
file di configurazione di Dovecot :
dovecot.conf
sudo nano /etc/dovecot/dovecot.conf
Cerchiamo la sezione
dict .
E togliamo il
commento a
quota = mysql: ...
Ctrl+X, Y, Invio, così salviamo le modifiche.
Andiamo subito a
modificare il file nominato in
dict :
sudo nano /etc/dovecot/dovecot-dict-sql.conf.ext
Togliamo il
commento a
connect e riempiamo i valori con i nostri dati, quelli relativi al database
serverdiposta :
Il file esprime
2 mappe, da cui prendere i componenti necessari al calcolo delle quote usate (
storage) ed alla quantità di messaggi presenti in cartella (
messages).
Riscontreremo il risultato di questi valori in seguito, quando useremo
doveadm quota, con le sue opzioni.
Spostiamoci nel file
10-mail.conf e cerchiamo la riga commentata
#mail_plugins =
Eliminiamo il
commento, ed aggiungiamo
quota dopo il segno =, per abilitare l'uso del
plugin quota:
Salviamo la modifica effettuata.
È la volta del file
20-lmtp.conf :
sudo nano /etc/dovecot/conf.d/20-lmtp.conf
Cerchiamo la sezione
protocol lmtp
Eliminiamo il
commento alla riga
mail_plugins ed aggiungiamo alla fine della frase :
quota
Salviamo ed usciamo dal file.
Stessa procedura per il file
20-imap.conf
sudo nano /etc/dovecot/conf.d/20-imap.conf
Rechiamoci in
protocol imap
Anche qui eliminiamo il commento alla riga mail_plugins e, stavolta, aggiungiamo alla fine della frase : imap_quota
Salviamo ed usciamo dal file.
Adesso tocca al file
padre della configurazione delle quote, tanto che ne prende anche il nome:
90-quota.conf :
sudo nano /etc/dovecot/conf.d/90-quota.conf
Andiamo a
plugin nella sezione
Quota limits
Decommentiamo :
quota_rule : indica la
dimensione dello spazio delle caselle, se non è assegnata una quota individuale nel database;
quota_rule2 : indica una
quota aggiuntiva per il cestino e soltanto per lui;
quota_grace : permette di
eccedere temporaneamente alla quota assegnata per ricevere una mail, inviata questa con la quota massima non ancora raggiunta, ma quota massima superata con questa mail .
(2 volte % non è un errore: serve alla formattazione del simbolo %);
quota_max_mail_size : indica la
massima dimensione di ogni mail.
È l'equivalente in Dovecot di message_size_limit in main.cf di Postfix.
La impostiamo a 35 MB, come in Postfix;
Sotto, aggiungiamo un rigo:
quota_status_overquota :
quota_status_overquota = "552 5.2.2 La casella del destinatario e' piena. Non puo' ricevere altri messaggi"
Indica a
Postfix cosa fare se viene
superata la quota impostata.
Manda al mittente un messaggio di errore permanente 552, rigettando l'acquisizione della mail in entrata ed allega, al messaggio di ritorno al mittente, l'avviso enunciato.
Subito sotto, inseriamo un
servizio che si occupa, appunto, di
quota-status.
Diciamo a Postfix di ascoltare i messaggi, riguardanti le quote, inviati da Dovecot, su un
nuovo "gate" di comunicazione:
private/quota-status
service quota-status {
executable = /usr/lib/dovecot/quota-status -p postfix
unix_listener /var/spool/postfix/private/quota-status {
user = postfix
}
}
Scendiamo per modificare la
voce plugin nella sezione
Quota warnings.
Togliamo il commento
(#) alle 2 righe che iniziano con
quota_warning:
Abbiamo abilitato
gli avvisi relativi alla percentuale di quota di spazio raggiunto.
Per avvisare l'utente che lo
spazio della sua casella postale si sta
esaurendo e che al raggiungimento della quota massima le mail a lui indirizzate saranno rifiutate da Postfix, abilitiamo un
servizio di Dovecot, dove indichiamo che
l'utente vmail eseguirà uno script al raggiungimento delle quote di avviso.
Decommentiamo il servizio
quota-warning :
Togliamo il
commento anche alla riga sotto:
executable = script ... ;
Eliminiamo il
commento anche alla riga
user = dovecot
Togliamo
# alla riga seguente:
unix_listener ;
Decommentiamo user = vmail
Non ci rimane altro che
decommentare le due righe con le
parentesi graffe chiuse.
Nella sezione
Quota backends, subito sotto, scegliamo un backend per il nostro plugin quota,
Maildir, togliendone il
commento sulla riga apposita:
Come sempre
Ctrl+X, Y, Invio per salvare ed uscire da 90-quota.
Prima, in
service quota-status abbiamo aperto una
porta di comunicazione delle quote tra Dovecot e Postfix.
Dobbiamo dire a Postfix di
regolamentare le restrizioni da queste informazioni sulle quote, per rigettare le
mail overquota.
Apriamo
main.cf:
sudo nano /etc/postfix/main.cf
ed inseriamo , alla fine dei valori di
smtpd_recipient_restrictions:
check_policy_service unix:private/quota-status
Salviamo con
Ctrl+X, Y, Invio
Nel servizio
quota-warning di 90-quota.conf, abbiamo fatto il riferimento ad uno script,
/usr/local/bin/quota-warning.sh, script eseguibile per avvertire l'utente del
raggiungimento di determinate quote spazio delle sue cartelle e del rischio di perdere la possibilità di ricevere altre email.
Entriamo nel file nominato sopra:
sudo nano /usr/local/bin/quota-warning.sh
Ed
inseriamo al suo interno:
#!/bin/sh
PERCENT=$1
USER=$2
cat << EOF | /usr/sbin/sendmail $USER -O "plugin/quota=maildir:User quota:noenforcing"
From: postmaster@sitoprovaprimo.it
Subject: Avviso quota spazio rimanente
La tua casella postale è piena al $PERCENT% .
Attenzione !!! Nella quota, rientrano anche i messaggi in Posta Inviata, nelle Bozze, nello Spam e nel Cestino.
EOF
Solita sequenza di tasti per salvare il file:
Ctrl+X, Y, Invio
Rendiamo il file appena scritto
eseguibile :
sudo chmod +x /usr/local/bin/quota-warning.sh
Dobbiamo ancora
modificare la query sql relativa agli utenti, in
/etc/dovecot/dovecot-sql.conf.ext, per rilevare anche
le quote di ogni singolo utente :
Riapriamo il file :
sudo nano /etc/dovecot/dovecot-sql.conf.ext
E modifichiamo la
user_query :
user_query = SELECT CONCAT('/var/vmail/', maildir) AS home, CONCAT('*:bytes=', quota) AS quota_rule FROM mailbox WHERE username = '%u'
Salviamo la modifica.
E, finalmente,
riavviamo Dovecot :
sudo systemctl restart dovecot
ed anche
Postfix :
sudo systemctl restart postfix
e controlliamo lo
stato di Dovecot :
sudo systemctl status dovecot
Controlliamo se riusciamo ad
estrarre le quote degli utenti dal database con
Doveadm:
sudo doveadm quota get -A
In questo caso, chiaramente registrato dopo l'invio di alcune mail, notiamo che carlino è in overquota ed ha 5 messaggi
Possiamo
conoscere la quota di spazio occupata da ogni singolo utente, sempre usando
Doveadm:
sudo doveadm quota get -u giubbe@sitoprovaprimo.it
Il
destinatario delle mail, cioè l'utente del singolo dominio inserito nel database (soltanto e se ha
impostato postmaster come utente, oppure come alias), al raggiungimento delle quote impostate,
riceverà una mail di questa fattura
:
Al raggiungimento di
quota 80%:
Al raggiungimento di
quota 95%:
Al
superamento di quota 100%, stavolta sarà il
mittente, ha ricevere un messaggio da Postfix, come da noi impostato:
Curiosità: in Thunderbird, accedendo alle proprietà della cartella dell'utente, possiamo vedere la quantità di spazio affidata all'utente ed anche la percentuale utilizzata.
Anche quest'altra immagine.
Strana questa percentuale? No, perchè il mittente ha mandato la mail quando ancora non era stato raggiunto il 100% dello spazio occupato.
E poichè la mail spedita non superava anche la quota_grace da noi impostata precedentemente, la mail è stata lo stesso consegnata.