Differences between revisions 3 and 4
Revision 3 as of 2020-11-04 16:42:53
Size: 16468
Editor: Kurgan
Comment:
Revision 4 as of 2021-03-01 10:32:24
Size: 16691
Editor: Kurgan
Comment:
Deletions are marked like this. Additions are marked like this.
Line 92: Line 92:

# Disabilito il limite di logging perché questo plugin
# potenzialmente logga parecchia roba, specie se per dire un utente fa qualche
# operazione in massa sulla mail
mail_log_max_lines_per_sec = 0
Line 95: Line 101:
  mail_log_events = delete undelete expunge copy mailbox_delete mailbox_rename save mailbox_create
  mail_log_events = delete undelete expunge copy mailbox_delete mailbox_rename save mailbox_create flag_change
Line 98: Line 103:
  mail_log_fields = uid box msgid size from subject   mail_log_fields = uid box msgid size from subject flags

Dovecot e la gestione delle quote

Con Dovecot è relativamente semplice gestire le quote per le caselle di posta. È però necessario che sia Dovecot a gestire la casella mail, altrimenti i conteggi delle quote verranno errati. Questo vuole dire che dobbiamo usare dovecot come server imap/pop, e questo è ovvio, ma anche come LDA (local delivery agent) ovvero dobbiamo fare in modo che l' MTA "passi" a dovecot le mail che arrivano e devono essere salvate nelle mailbox degli utenti.

Questa descrizione fa riferimento alla configurazione di Dovecot ed Exim che normalmente uso io, che fa uso di Dovecot anche come LDA.

Nello specifico, prerequisito per fare funzionare questo sistema delle quote così come qui descritto è quello di avere messo in piedi un sistema come descritto in ../Exim4-Dovecot e in ../Dovecot-Sieve. Questo perché il sistema così configurato usa Dovecot anche come LDA.

Configurazione di Dovecot

Possiamo configurare Dovecot per avere delle quote "fisse", uguali per TUTTI gli utenti, oppure per avere un default e poi poter adattare la quota per ogni singolo utente nel file di configurazione degli utenti. La versione con le quote fisse richiede meno modifiche al resto del sistema.

Configurazione di Dovecot con le quote fisse

Questa è la configurazione di Dovecot per avere solo le quote fisse. Il file è /etc/dovecot/dovecot.conf. La configurazione della quota (fissa) è definita dalla voce quota_rule e dalle successive e facoltative quota_rule<N>.

##
## usa questi protocolli (le versioni "s" sono comprese, quindi
## imap include imaps e pop3 include pop3s)
##
protocols = imap pop3 sieve

##
## Disabilita IPV6 (volendo)
##
# listen=*

##
## autenticatori che accetto (tolgo ntlm, nel caso lo rimettero`)
##
   # auth_mechanisms = plain login digest-md5 cram-md5 apop ntlm
auth_mechanisms = plain login cram-md5 apop


##
## Patch per disabilitare SSLv3 e inferiori.
# Non serve per Debian 10  / Devuan Beowulf (e comunque la sintassi e` cambiata)
# ssl_protocols = !SSLv3


##
## Consenti l'autenticazione plaintext sempre, anche senza SSL.
## Non e` sicuro ma lo uso in locale con la webmail
##
disable_plaintext_auth = no


##
## Consenti di usare l' UID 8 per accedere alla mail
## (visto che tutta la mia mail dei virtual domanins e` di questo utente)
##
first_valid_uid = 8
last_valid_uid  = 8
first_valid_gid = 8
last_valid_gid  = 8


##
## Carica il certificato e la chiave privata per SSL da qui:
##
ssl_cert = </etc/dovecot/dovecot.pem
ssl_key = </etc/dovecot/private/dovecot.pem
#ssl_cert = </etc/letsencrypt/il_mio_dominio.cert
#ssl_key = </etc/letsencrypt/il_mio_dominio.key


##
## Il file con i parametri DH
## per generarlo, usa "openssl dhparam 4096 > dh.pem"
##
ssl_dh=</etc/dovecot/dh.pem


##
## Mostra in "ps" chi e` l'utente che usa il processo
##
verbose_proctitle = yes


##
## Scrive nel log le date come le voglio io
##
log_timestamp = "%Y-%m-%d %H:%M:%S "


##
## Per loggare tutte le azioni degli utenti imap e pop serve questo plugin
##

# Disabilito il limite di logging perché questo plugin
# potenzialmente logga parecchia roba, specie se per dire un utente fa qualche
# operazione in massa sulla mail
mail_log_max_lines_per_sec = 0

mail_plugins = $mail_plugins mail_log notify
plugin {
  # Events to log. Also available: flag_change save mailbox_create
  mail_log_events = delete undelete expunge copy mailbox_delete mailbox_rename save mailbox_create flag_change
  # Also available: flags vsize from subject
  mail_log_fields = uid box msgid size from subject flags
}


##
## Plugin per la gestione delle quote (principale, poi serve imap_quota dentro imap)
##
mail_plugins = $mail_plugins quota
plugin {
        # tipo di quota usato (maildir) e nome (arbitrario) del medesimo
        quota = maildir:User quota

        # regole di default (per ogni utente)
        # 1 GB per casella, 100MB in piu` nella Trash altrimenti non posso fare pulizia se
        # sono over quota.
        quota_rule = *:storage=1G
        quota_rule2 = Trash:storage=+100M

        # messaggio personalizzato se vai over quota
        # quota_exceeded_message = Quota exceeded

        # una singola mail puo` sforare la quota del 10% ed essere comunque consegnata
        # poi ovviamente non passa piu` niente
        quota_grace = 10%%
}


##
## Per debuggare. TOGLILI QUANDO FUNZIONA!
##
# auth_debug_passwords = yes
# auth_debug = yes
# mail_debug = yes
# verbose_ssl = yes

##
## Questa credo che serva solo per i lock delle mailbox e non delle maildir, ma male non fa.
##
mail_privileged_group = mail


##
## Sieve e Managesieve
##
# NOTA: il default di managesieve e sieve e` creare una directory "sieve" nella home dell'utente.
# questa viene creata correttamente perche` la home e` definita nello userdb e finisce in
# /var/vmail/<dominio>/<utente>/sieve.
# il file del filtro attivo e` di default ".dovecot.sieve" ma lo rinomino in "dovecot-sieve"
# senza il "." all'inizio altrimenti viene confuso con una cartella imap che ovviamente non esiste.
plugin {
  sieve = ~/dovecot.sieve
}


##
## LDA (per usare i filtri sieve e le quote uso l' LDA di Dovecot richiamato da Exim)
##
lda_original_recipient_header = X-Original-To
lda_mailbox_autocreate = yes
lda_mailbox_autosubscribe = yes
protocol lda {
  mail_plugins = $mail_plugins sieve
}

##
## Configurazioni generali del sistema di autenticazione
##
service auth {
  user = Debian-exim
  # questo socket e` quello su cui si autentica Exim per l' SMTP autenticato
  unix_listener auth-client {
    mode = 0666
  }
}



##
## Configurazione dell'autenticazione degli utenti su file di testo
## diviso in due parti:

# passdb serve per autenticare l'utente e niente altro
passdb {
  args = username_format=%n scheme=plain /etc/vmail/users/%d
  driver = passwd-file
}

## - userdb definisce dove si trova la mail e come la si accede a seconda
##   di che utente sei (in questa config e` uguale per tutti, tranne che per
##   il percorso dei files della maildir, infatti uso un driver "static")

# USARE SOLO UNO DEI DUE USERDB, NON TUTTI E DUE!

userdb {
  args = uid=mail gid=mail home=/var/vmail/%d/%n mail=maildir:/var/vmail/%d/%n
  driver = static
}

## - se voglio usare le quote personalizzate devo usare un driver non statico.
##   Posso usare passwd-file ma questo mi costringe ad avere 7 campi nel file degli utenti.

# USARE SOLO UNO DEI DUE USERDB, NON TUTTI E DUE!

#userdb {
#   driver = passwd-file
#   args = username_format=%n /etc/vmail/users/%d
#   default_fields = uid=mail gid=mail home=/var/vmail/%d/%n mail=maildir:/var/vmail/%d/%n
#}



##
## configurazioni del protocollo imap
##
protocol imap {
  imap_client_workarounds =
  mail_max_userip_connections = 30
  mail_plugins = $mail_plugins imap_quota
}


##
## configurazioni del protocollo pop
##
protocol pop3 {
  pop3_logout_format = top=%t/%T, retr=%r/%R, del=%d/%m, size=%s
  pop3_uidl_format = %08Xu%08Xv
}
##
## Configurazione dell'utente di default per i socket 
## del servizio stats. Questa modifica si rende necessaria
## se si usa dovecot-lda con un utente che non sia "dovecot"
## (per esempio "mail") altrimenti dovecot-lda non riesce a 
## scrivere le stats e riporta warning ad ogni mail consegnata
## 
## Questa modifica è necessaria da Debian 10 / Devuan Beowulf in poi.
## (versione di Dovecot 2.3.4.1)
##

service stats {
    unix_listener stats-reader {
        user = mail
        group = mail
        mode = 0660
    }

    unix_listener stats-writer {
        user = mail
        group = mail
        mode = 0660
    }
}

Configurazione di Dovecot con le quote per utente

Questa è la configurazione di Dovecot per avere le quote per utente. Il file è /etc/dovecot/dovecot.conf.

La configurazione della quota di default è definita dalla voce quota_rule e dalle successive e facoltative quota_rule<N>. Se mettiamo "0" come valore, la quota di default è infinita.

Per fare funzionare questo sistema occorre fare modifiche a Exim e ai files utente - vedi oltre

##
## usa questi protocolli (le versioni "s" sono comprese, quindi
## imap include imaps e pop3 include pop3s)
##
protocols = imap pop3 sieve

##
## Disabilita IPV6 (volendo)
##
# listen=*

##
## autenticatori che accetto (tolgo ntlm, nel caso lo rimettero`)
##
   # auth_mechanisms = plain login digest-md5 cram-md5 apop ntlm
auth_mechanisms = plain login cram-md5 apop


##
## Patch per disabilitare SSLv3 e inferiori.
# Non serve per Debian 10  / Devuan Beowulf (e comunque la sintassi e` cambiata)
# ssl_protocols = !SSLv3


##
## Consenti l'autenticazione plaintext sempre, anche senza SSL.
## Non e` sicuro ma lo uso in locale con la webmail
##
disable_plaintext_auth = no


##
## Consenti di usare l' UID 8 per accedere alla mail
## (visto che tutta la mia mail dei virtual domanins e` di questo utente)
##
first_valid_uid = 8
last_valid_uid  = 8
first_valid_gid = 8
last_valid_gid  = 8


##
## Carica il certificato e la chiave privata per SSL da qui:
##
ssl_cert = </etc/dovecot/dovecot.pem
ssl_key = </etc/dovecot/private/dovecot.pem
#ssl_cert = </etc/letsencrypt/il_mio_dominio.cert
#ssl_key = </etc/letsencrypt/il_mio_dominio.key


##
## Il file con i parametri DH
## per generarlo, usa "openssl dhparam 4096 > dh.pem"
##
ssl_dh=</etc/dovecot/dh.pem



##
## Mostra in "ps" chi e` l'utente che usa il processo
##
verbose_proctitle = yes


##
## Scrive nel log le date come le voglio io
##
log_timestamp = "%Y-%m-%d %H:%M:%S "


##
## Per loggare tutte le azioni degli utenti imap e pop serve questo plugin
##
mail_plugins = $mail_plugins mail_log notify
plugin {
  # Events to log. Also available: flag_change save mailbox_create
  mail_log_events = delete undelete expunge copy mailbox_delete mailbox_rename save mailbox_create

  # Also available: flags vsize from subject
  mail_log_fields = uid box msgid size from subject
}


##
## Plugin per la gestione delle quote (principale, poi serve imap_quota dentro imap)
##
mail_plugins = $mail_plugins quota
plugin {
        # tipo di quota usato (maildir) e nome (arbitrario) del medesimo
        quota = maildir:User quota

        # regole di default (per ogni utente)
        # 1 GB per casella, 100MB in piu` nella Trash altrimenti non posso fare pulizia se
        # sono over quota.
        quota_rule = *:storage=1G
        quota_rule2 = Trash:storage=+100M

        # messaggio personalizzato se vai over quota
        # quota_exceeded_message = Quota exceeded

        # una singola mail puo` sforare la quota del 10% ed essere comunque consegnata
        # poi ovviamente non passa piu` niente
        quota_grace = 10%%
}


##
## Per debuggare. TOGLILI QUANDO FUNZIONA!
##
# auth_debug_passwords = yes
# auth_debug = yes
# mail_debug = yes
# verbose_ssl = yes

##
## Questa credo che serva solo per i lock delle mailbox e non delle maildir, ma male non fa.
##
mail_privileged_group = mail


##
## Sieve e Managesieve
##
# NOTA: il default di managesieve e sieve e` creare una directory "sieve" nella home dell'utente.
# questa viene creata correttamente perche` la home e` definita nello userdb e finisce in
# /var/vmail/<dominio>/<utente>/sieve.
# il file del filtro attivo e` di default ".dovecot.sieve" ma lo rinomino in "dovecot-sieve"
# senza il "." all'inizio altrimenti viene confuso con una cartella imap che ovviamente non esiste.
plugin {
  sieve = ~/dovecot.sieve
}


##
## LDA (per usare i filtri sieve e le quote uso l' LDA di Dovecot richiamato da Exim)
##
lda_original_recipient_header = X-Original-To
lda_mailbox_autocreate = yes
lda_mailbox_autosubscribe = yes
protocol lda {
  mail_plugins = $mail_plugins sieve
}

##
## Configurazioni generali del sistema di autenticazione
##
service auth {
  user = Debian-exim
  # questo socket e` quello su cui si autentica Exim per l' SMTP autenticato
  unix_listener auth-client {
    mode = 0666
  }
}



##
## Configurazione dell'autenticazione degli utenti su file di testo
## diviso in due parti:

# passdb serve per autenticare l'utente e niente altro
passdb {
  args = username_format=%n scheme=plain /etc/vmail/users/%d
  driver = passwd-file
}

## - userdb definisce dove si trova la mail e come la si accede a seconda
##   di che utente sei (in questa config e` uguale per tutti, tranne che per
##   il percorso dei files della maildir, infatti uso un driver "static")

# USARE SOLO UNO DEI DUE USERDB, NON TUTTI E DUE!

#userdb {
#  args = uid=mail gid=mail home=/var/vmail/%d/%n mail=maildir:/var/vmail/%d/%n
#  driver = static
#}

## - se voglio usare le quote personalizzate devo usare un driver non statico.
##   Posso usare passwd-file ma questo mi costringe ad avere 7 campi nel file degli utenti.

# USARE SOLO UNO DEI DUE USERDB, NON TUTTI E DUE!

userdb {
   driver = passwd-file
   args = username_format=%n /etc/vmail/users/%d
   default_fields = uid=mail gid=mail home=/var/vmail/%d/%n mail=maildir:/var/vmail/%d/%n
}



##
## configurazioni del protocollo imap
##
protocol imap {
  imap_client_workarounds =
  mail_max_userip_connections = 30
  mail_plugins = $mail_plugins imap_quota
}


##
## configurazioni del protocollo pop
##
protocol pop3 {
  pop3_logout_format = top=%t/%T, retr=%r/%R, del=%d/%m, size=%s
  pop3_uidl_format = %08Xu%08Xv
}

##
## Configurazione dell'utente di default per i socket 
## del servizio stats. Questa modifica si rende necessaria
## se si usa dovecot-lda con un utente che non sia "dovecot"
## (per esempio "mail") altrimenti dovecot-lda non riesce a 
## scrivere le stats e riporta warning ad ogni mail consegnata
## 
## Questa modifica è necessaria da Debian 10 / Devuan Beowulf in poi.
## (versione di Dovecot 2.3.4.1)
##

service stats {
    unix_listener stats-reader {
        user = mail
        group = mail
        mode = 0660
    }

    unix_listener stats-writer {
        user = mail
        group = mail
        mode = 0660
    }
}

Modifiche necessarie per le quote personalizzate su Exim e file utenti

La configurazione delle quote personalizzate per utente si fa nel file degli utenti dentro a /var/vmail/users/<dominio> (vedi la documentazione su Exim linkata in cima alla pagina).

Per fare funzionare questa configurazione occorre però modificare alcune cose:

  • Modificare exim.conf (sempre facendo riferimento alla mia configurazione di Exim) impostando la variabile USERFILE_FIELDS=7

  • Modificare il file degli utenti in modo da avere 6 volte il carattere ":" dopo la password e prima dei valori personalizzati, in questo modo:
    utente:password:::::: <impostazioni personalizzate>
  • Alcuni esempi validi:
    utente1:password
    utente2:password::::::
    utente3:password::::::virus=off spam_smtp_deny=50 spam_blackhole=50 spam_subject=20
    utente4:password::::::userdb_quota_rule=*:storage=1M
    utente5:password::::::virus=off userdb_quota_rule=*:storage=100M
    utente5:password::::::virus=off userdb_quota_rule=*:storage=1G userdb_quota_rule2=Junk:storage=+10M
  • Notare che i valori relativi alla quota devono per forza essere messi per ultimi, in quanto contengono necessariamente dei caratteri ":" e questi rendono non più comprensibile il contenuto del file a Exim. Quindi vanno messe prima tutte le impostazioni personalizzate che deve leggere Exim (se ce ne sono) e poi quelle della quota (se ce ne sono).

Variante con due files diversi

Volendo è possibile separare i files di autenticazione di exim da quelli della definizione delle quote, impostando in Dovecot un altro filename per il file delle quote nella configurazione dello userdb. In questo caso Exim e il suo files utenti restano non modificati, e si creernno altri files che contengono solo la definizione delle quote per Dovecot, che avranno un formato del tipo

utente:::::::userdb_quota_rule=*:storage=100M

Ovvero 7 ":" e nessuna password definita, che comunque verrebbe ignorata.

Varianti fatte meglio

Le cose sarebbero molto più semplici se non mi ostinassi a usare files di testo, ma usassi un database anche banale. Oppure potrei usare uno userdb con driver "lua" (vedi la documentazione di dovecot) che mi fornisce un linguaggio di programmazione con il quale posso scrivermi la funzione che legge il file di testo come voglio io, evitandomi di dover usare questo formato con 6 o 7 ":".

LinuxDebian/Dovecot-Quota (last edited 2021-03-01 10:32:24 by Kurgan)