Installare e configurare vpopmail

27 marzo 2021 Roberto Puzzanghera6 commenti

Vpopmail fornisce un modo semplice di gestire indirizzi di posta su domini virtuali e account email diversi da quelli su /etc/passwd.

Lo scopo di questa pagina è anche mostrare come usare Mysql come sistema di autenticazione. Avere gli utenti su database ha anche il vantaggio di poter interagire con il database attraverrso un'interfaccia web che gestisce gli accounts.

Changelog

  • April 13, 2021
    - minor code cleanup to the sql-aliasdomain patch
  • March 27, 2021
    - bug fixes in the defaultdelivery patch: increased the buffer for the .qmail-default file path, as in particular cases of long path/domain names it will result truncated. Fixed another bug where the .qmail.default file where opened twice.
    - now if vdelivermail is installed the "delete" option will be used instead of "bounce-no-mailbox", which is not reasonable anymore
  • March 24, 2021
    - bug fix in the defaultdelivery patch: increased the buffer for the .qmail-default file path, as in particular cases of long path/domain names it will result truncated.
    Testers needed! Please report any issue
  • March 9, 2021
    - the vpopmail patch now installs the sql code needed for "one table per domain" (--disable-many-domains) in ~/vpopmail/etc/pwd-query_disable-many-domains.sql and creates the sql procedure if needed. Of course this add-on to vpopmail will be completely transparent when you compile with the default option --enable-many-domains
  • March 2, 2021
    - added mysql-limits support. See changes in dovecot-sql password_query as well.
  • February 26, 2021
    - added a "defaultdelivery patch" to the package of patches. configure --enable-defaultdelivery to enable it.
  • February 15, 2021
    - fix in the configure file. An autoreconf is needed as I modified the configure.in and Makefile.am files
  • February 13, 2021
    - fix in the configure file
  • February 10, 2021
    - a C program vsavealiasdomains can now save all the existing domain aliases to MySQL. It can be useful in case of migrations to the dovecot's sql auth driver.
  • February 5, 2021
    - sql-aliasdomains patch added and combined patch released
  • December 12, 2020
    - patch to get vpopmail compatible with gcc-10

Dettagli della patch installata

La patch che andremo ad applicare è l'insieme delle seguenti:

  • la patch sql-aliasdomains, che fa in modo che vpopmail salvi gli aliasdomains su mysql. Questo consente al driver sql di dovecot di fare l'autenticazione non solo con i domini reali ma anche con gli alias, a condizione che si modifichi anche la query all'interno del driver, come verrà spiegato dopo. Ciò è ora importante, dato che dovecot ha eliminato il driver per vpopmail.
  • la patch defaultdelivery, che fa in modo che vpopmail copi il nostro deldelivery agent preferito (salvato in QMAILDIR/control/defauldelivery) nel file the .qmail-default di ogni nuovo dominio, scovrascrivendo il comportamento di default che cuole che il programma installi il proprio delivery agent vdelivermail.
    Se la funzionalità è disabilitata (--disable-defaultdelivery, opzione di default) vdelivermail verrà installato con l'opzione "delete" invece di "bounce-no-mailbox", che oggi è deprecabile.
  • dovecot-pwd_query patch. Se si vuole usare il driver sql di dovecot con la configurazione "una tabella per un dominio) (--disable-many-domains) è necessario personalizzare in modo pesante la password query. Con questo aggiustamento vpopmail installerà in modo autonomo la procedura e le funzioni sql nel database quando si crea un nuovo dominio. La procedura può essere chiamata da dovecot per fare l'autenticazione.
    Il codice sql supporta gli aliasdomains e i mysql limits, e sarà caricato dal file ~/vpopmail/etc/pwd-query_disable-many-domains.sql che si può ovviamente personalizzare.
    E' necessario configurare vpopmail con --enable-mysql-bin=PATH poichè dobbiamo installare la procedura chiamando mysql con un comando shell.
  • la patch gcc-10-compat, con il la quale vpopmail è compatibile con gcc-10.

Setup

Creare l'utente e il gruppo vpopmail:

groupadd -g 89 vchkpw
useradd -g vchkpw -u 89 -d /home/vpopmail vpopmail

Scaricare i sorgenti (sorgenti originali sono qui: http://sourceforge.net/projects/vpopmail/files/, ma potete scaricare la mia copia locale) e configurare. La patch che andremo ad applicare risolve i problemi di compilazione con gcc-10.

cd /usr/local/src
wget https://notes.sagredo.eu/files/qmail/tar/vpopmail-5.4.33.tar.gz
wget https://notes.sagredo.eu/files/qmail/patches/vpopmail/roberto_vpopmail-5.4.33.patch
tar xzvf vpopmail-5.4.33.tar.gz
cd vpopmail-5.4.33
chown -R root.root .
patch -p1 < ../roberto_vpopmail-5.4.33.patch

autoreconf -f -i
./configure \
        --enable-qmaildir=/var/qmail/ \
        --enable-qmail-newu=/var/qmail/bin/qmail-newu \
        --enable-qmail-inject=/var/qmail/bin/qmail-inject \
        --enable-qmail-newmrh=/var/qmail/bin/qmail-newmrh \
        --disable-roaming-users \
        --enable-auth-module=mysql \
        --enable-incdir=/usr/include/mysql \
        --enable-libdir=/usr/lib64 \
        --enable-logging=p \
        --disable-clear-passwd \
        --enable-auth-logging \
        --enable-sql-logging \
        --disable-valias \
        --disable-passwd \
        --enable-qmail-ext \
        --enable-learn-passwords \ 
        --enable-mysql-limits \
        --enable-sql-aliasdomains \
        --enable-defaultdelivery

--disable-roaming-users i roaming users saranno disabilitati, dal momento che non dobbiamo qui usare l'autenticazione  POP before SMTP. Invece applicheremo una patch per l'autenticazione lato smtp.

--enable-auth-module=mysql mette su il supporto mysql e salva gli account utente in un database mysql.

--enable-incdir=/usr/include/mysql è la directory include di MySQL (usare in caso si sia installato mysql dai binari o dai sorgenti in una locazione non standard. Montare mysql da qualche parte se è il server è installato in un'altra macchina..

--enable-libdir=/usr/lib64 La directory lib di MySQL. Naturalmente sarà /usr/lib nei sistemi 32b

--disable-valias Salva gli alias nei file dot-qmail anzichè su mysql.
Questa opzione non funziona con dovecot-lda, dal momento che esso continua a cercare gli alias nei file .qmail-alias.

--disable-passwd Non includere il supporto per /etc/passwd. Personalmente non voglio gestire gli utenti reali e userò questa opzione, dato che questo è solo un web server.

--enable-clear-passwd Una copia delle password NON verrà salvata su DB anche in chiaro. Se si vogliono evitare i soliti problemi dell'amministratore quando gli utenti dimenticano la password e si vuole ripristinarla rapidamente, oppure per fare test, abilitare --enable-clear-passwd. Ho notato, pensando di disabilitare questa opzione per maggior sicurezza, che il programma per il cambio password non funziona più (testato con la versione 5.4.33, commenti graditi su questo).

--enable-sql-logging Lascia i vlog in una tabella di MySQL (vengono mostrate le richieste di accesso fallite).

--enable-auth-logging Crea una tabella MySQL con il log dell'ultimo accesso (lastauth).

--disable-roaming-users Non supportare gli utenti roaming.

--enable-mysql-limits MySQL salva i limiti in alternativa ai file .qmailadmin-limits.

--enable-sql-aliasdomains (default) salva gli alias domains su MySQL al fine di consentire l'autenticazione IMAP anche per gli alias domain nel caso si usi il driver di autenticazione sql di dovecot (è necessario modificare la query di consenguenza come sarà spiegato più avanti).

--enable-sql-aliasdomains (default) salva i domain alias su MySQL al fine di validare anche i domain alias oltre che i domini regolari quando si usa il driver sql di dovecot, aa condizione che si sia modificata la password_query di conseguenza.

--enable-defaultdelivery abilità la possibilità di installare nel .qmail-default di ogni nuovo dominio il delivery agent salvato preventivamente in /var/qmail/control/defaultdelivery.

Compilare e installare:

make
make install-strip

vusaged

vusaged cerca gli utenti sotto vpopmail e conteggia quanto spazio disco essi usano. Richiede libev.

Installazione di libev

cd /usr/local/src
wget http://dist.schmorp.de/libev/libev-4.33.tar.gz
tar xzvf libev-4.33.tar.gz
cd libev-4.33
chown -R root.root .
./configure
make
make install
ldconfig

Installazione e configurazione di vusaged

cd /usr/local/src/vpopmail-5.4.33/vusaged
./configure
make
cp -f vusaged /home/vpopmail/bin
cp -f etc/vusaged.conf /home/vpopmail/etc

Ora copiare lo startup script in /etc/rc.d (Slackware) o init.d e lanciarlo. Questo è un esempio che va bene almeno per Slackware:

cp contrib/rc.vusaged /etc/rc.d/
/etc/rc.d/rc.vusaged start

Configurazione

Controlliamo il file ~vpopmail/etc/tcp.smtp. Questo file contiene l'elenco di tutti gli IP delle macchine che vogliamo abilitare al relay, ovvero a spedire messaggi con la nostra MTA. Naturalmente abilteremo l'invio dei messaggi dall'indirizzo locale e magari da parte degli indirizi della rete locale. Nel caso qui presentato gli IP degli utenti roaming (internet) sono bloccati.

Per abilitare il relay della rete 10.0.0.x e di localhost modifichioamo come segue il file ~vpopmail/etc/tcp.smtp:

10.0.0.:allow,RELAYCLIENT=""
127.:allow,RELAYCLIENT=""

aggiungere ogni altro IP di seguito. Per consentire il relay a un dato client è necessario aggiungere una riga come questa a ~vpopmail/etc/tcp.smtp:

IP address of client:allow,RELAYCLIENT=""

Ora generiamo il file tcp.smtp.cdb. Questo comando deve essere lanciato ogni qual volta si modifica tcp.smtp

cd ~vpopmail/etc
tcprules tcp.smtp.cdb tcp.smtp.tmp < tcp.smtp

Ora prepariamo un messaggio di avviso di imminente esaurimento della quota concessa, che verrà inviato agli utenti quando superano il 90% del massimo consentito:

> nano ~vpopmail/domains/quotawarn.msg

From: SomeCompany Postmaster <postmaster@yourdomain.com>
Reply-To: postmaster@yourdomain.com
To: SomeCompany User:;
Subject: Mail quota warning
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 7bit

La tua mailbox nel server è superato il 90% della sua capacità.

Per continuare a ricevere messaggi, 
dovresti cancellare dei messaggi dalla tua mailbox.

Se ti occorre assistenza al riguardo, sei pregato di contattare
l'amministratore qui:

email : support@yourdomain.com
Tel : xx xxxx xx

chmod 600 ~vpopmail/domains/quotawarn.msg
chown vpopmail.vchkpw ~vpopmail/domains/quotawarn.msg

Ora sistemiamo ~vpopmail/etc/vlimits.default. Questa riga limita a 100MB (in bytes) la quota per l'utente di default:

default_quota 104857600

Creazione del database e configurazione della connessione MySQL

Creiamo l'utente vpopmail e il database, assegniamogli tutti i privilegigrant e salviamo l'account nel file vpopmail.mysql:

> /usr/local/mysql/bin/mysql [-h mysql-IP] -u root -p

CREATE USER 'vpopmail'@'mailserver-IP' IDENTIFIED BY 'vpopmailpwd';

GRANT USAGE ON * . * TO 'vpopmail'@'mailserver-IP' IDENTIFIED BY 'vpopmailpwd' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE DATABASE IF NOT EXISTS `vpopmail` ;
GRANT ALL PRIVILEGES ON `vpopmail` . * TO 'vpopmail'@'mailserver-IP';

> echo "mysql-IP|0|vpopmail|vpopmailpwd|vpopmail" > ~vpopmail/etc/vpopmail.mysql

dove mysql-IP è l'indirizzo IP del server dove gira mysql, mentre mailserver-IP è l'indirizzo IP del server della posta. Solitamente questi due IP sono entrambi quelli della macchina locale, ovvero 0.0.0.0.

Creazione dei domini e degli utenti virtuali

cd ~vpopmail/bin/

Per aggiungere/cancellare un dominio virtuale

./vadddomain yourdomain.net [./vdeldomain yourdomain.net]

Per aggiungere/cancellare un utente virtuale

./vadduser user@yourdomain.net [./vdeluser user@yourdomain.net]

Per visualizzare le informazioni su un utente:

./vuserinfo user@yourdomain.net

name: user
passwd: xxxxxxxxxxxx
clear passwd: xxxxxxxxx
comment/gecos: Name Surname
uid: 0
gid: 0
flags: 0
gecos: Name Surname
limits: No user limits set.
dir: /home/vpopmail/domains/yourdomain.net/user
quota: 104857600S

La gestione dei domini e degli account sarà molto più agevole una volta installate le interfacce web vqadmin e qmailadmin.

Potresti essere interessato a questo punto a dare un'occhiata alla pagina di test riguardante vpopmail.

Alias domains con il driver di autenticazione sql di dovecot

Se non si hanno alias domains oppure questa è una nuova installazione si può saltare questa sezione.

Se invece si hanno degli alias domains e sta migrando al driver sql di dovecot è necessario leggere con attenzione la pagina seguente dopo aver terminato l'installazione di dovecot, perchè sarà necessario salvare su database con le coppie alias/domains già esistenti.

In breve, è possibile salvare tutti i propri domain alias su MySQL in questo modo:

vsavealiasdomains -A

Digitare

vsavealiasdomains -h

per vedere tutte le opzioni.

I record del database saranno da ora in poi creati da vpomail quando si creeranno nuovi alias.

Commenti

Installazione vusaged

Buongiorno Roberto,
scusa le molte mail, come avrai capito sto installando un nuovo server dopo l'incendo a strasburgo....

L'installazione di vusaged restituisce l'errore "configure: error: No vauth_getpw in libvpopmail" sono su debian bullseye. Non ho trovato in rete nulla di risolutivo.

Grazie delle risposte e della pazienza.

Gabriele

Rispondi | Permalink

Installazione vusaged

non saprei... come stai configurando vpopmail? hai letto questo https://vchkpw.inter7.narkive.com/ftLwnnZq/vusaged-compile-error?

Rispondi | Permalink

Fail reading vusaged.conf

Puo capitare che digitando i comandi di ./addomain testdomain testpwd risponda cosi:

./vadddomain testdomain testpwd
config: line 2: error: syntax error: invalid label declaration
config: failed reading contents of /home/vpopmail/etc/vusagec.conf
config: line 2: error: syntax error: invalid label declaration
config: failed reading contents of /home/vpopmail/etc/vusagec.conf

il problema sta nella sintassi del file vusagec.conf che è cosi:

Server:Disable=True;

tutto su una riga. e non come riporta il comando  qui sotto :

cat > ~vpopmail/etc/vusagec.conf << __EOF__
Server:
Disable = True;
__EOF__

Rispondi | Permalink

Tabelle MySQL

Innanzitutto complimenti per la guida.

Ho un problema con l'autenticazione a MySQL quando provo ad aggiungere un dominio, la risposta del comando vadddomain è questa:

Error - no authentication database connection. Initial open.

Ho potuto constatare che il DB non ha nessuna tabella.

Sul file di configurazione trovo che se il DB è in locale è necessario utilizzare le connessioni socket invece di TCP/IP, può essere questo? come fare?

Grazie,
Marco

Rispondi | Permalink

Non ho mai usato la

Non ho mai usato la connessione socket, ma so per certo che settando localhost o l'IP locale 127.0.0.1 tutto funziona. Piuttosto, è necessario che in /hosts/etc sia definito localhost.

Nel database le tabelle vengono create alla prima connessione.

Non mi viene in mente niente di particolare se non i problemi più banali, che immagino tu abbia già controllato, ovvero la presenza di ~vpopmail/etc/vpopmail.mysql, se i parametri della connsessione sono giusti, i permessi di lettura di questo file da parte dell'utente vpopmail. Nel tuo caso il settaggio della connessione dovrebbe essere questo:

> /usr/local/mysql/bin/mysql -u root -p

CREATE USER 'vpopmail'@'localhost' IDENTIFIED BY 'vpopmailpwd';

GRANT USAGE ON * . * TO 'vpopmail'@'localhost' IDENTIFIED BY 'vpopmailpwd' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE DATABASE IF NOT EXISTS `vpopmail` ;
GRANT ALL PRIVILEGES ON `vpopmail` . * TO 'vpopmail'@'localhost';

> echo "localhost|0|vpopmail|vpopmailpwd|vpopmail" > ~vpopmail/etc/vpopmail.mysql

Dopodichè proverei a connettermi a mysql dalla linea di comando come utente vpopmail:

> /usr/local/mysql/bin/mysql -u vpopmail -p vpopmailpwd

mysql> USE vpopmail

Se non ci sono errori qui allora il problema è nel file vpopmail.mysql

edit

Vedo ora questa nota a cui tu ti riferivi

# Note:
#   The value of host may be either a hostname or an IP address.
#   If host is 'localhost', then sockets (Unix) or named pipes (Windows)
#   will be used instead of TCP/IP to connect to the server.

Se vuoi evitare di usare localhost usa al suo posto l'indirizzo IP locale 0.0.0.0 così ricadi nel caso generale

Rispondi | Permalink

Risolto, grazie!

Risolto, grazie!

Ho messo 0.0.0.0 al posto di localhost nel file vpopmail.mysql ed è andato.

Complimenti ancora per la guida!

Rispondi | Permalink