Dovecot+SQL: tracciare l’ultimo login

In molti casi è utile sapere quando un utente ha effettuato l’ultimo login via IMAP o POP ad un server di posta elettronica.

In una configurazione con Dovecot come server IMPA/POP e MySQL/MariaDB come backend per l’archivio degli utenti fin’ora era necessario utilizzare delle scappatoie per tenere traccia dell’ultima volta in cui un utente si era collegato.

Dalla versione 2.2.14 rilasciata lo scorso 14 ottobre Timo Sirainen ha aggiunto il plugin Last Login.

Al momento la documentazione del plugin è abbastanza scarna, chi volesse implementare la tracciabilità dell’ultimo login in una configurazione con Dovecot, Postfix e Postfix Admin come gestione degli utenti può procedere come segue.

Modificare la struttura della tabella mailbox aggiungendo il campo lastlogin di tipo unsigned integer.

Aggiungere queste righe al file conf.d/10-master.conf:

service dict {
   unix_listener dict {
   mode = 0660
   user = vmail
   }
}

Aggiungere queste righe al file conf.d/90-plugin.conf:

plugin {
   last_login_dict = proxy::lastlogin
   last_login_key = last-login/%u # default
}

dict {
   lastlogin = mysql:/etc/dovecot/dovecot-dict-sql.conf.ext
}

Abilitare il plugin Last Login per IMAP e POP3:

protocol imap {
   mail_plugins = $mail_plugins last_login
}

protocol pop3 {
mail_plugins = $mail_plugins last_login
}

Aggiungere queste righe a dovecot-dict-sql.conf.ext:

connect = [gli stessi valori di dovecot-sql.conf.ext]
map {
   pattern = shared/last-login/$user
   table = mailbox
   username_field = username
   value_field = lastlogin
   fields {
      username = $user
   }
}

Riavviare, quindi Dovecot.

Il campo lastlogin contiene la data e ora di ultimo login in formato time(). Per il momento il valore non viene ancora visualizzato nella consolle di Postfix Admin.

Autore: Luigi Rosa

Consulente IT, sviluppatore, SysAdmin, cazzaro, e, ovviamente, geek.

2 pensieri riguardo “Dovecot+SQL: tracciare l’ultimo login”

  1. Molto utile, pensavo fosse attivabile solo con Redis come “dict”. Ma non è necessario prima procedere alla creazione della rispettiva tabella nel DB SQL? Sarebbe infine molto utile poter registrare il protocollo del login (pop/imap) cosa che sembra possibile, almeno in teoria, lavorando su last_login_key.

    1. La documentazione dice che in “lastlogin=” puoi usare il protocollo che vuoi, purche’ sia sopportato da Dovecot.
      Si’, il campo deve esistere gia’ nella tabella SQL, nel mio esempio il campo si chiama lastlogin ed e’ un INT

Spazio per un commento