- Maggiori info qui Life with qmail
- README.vdelivermail
qmail
v2025.04.18 e successivi include un nuovo script config-all
che automatizza la configurazione di qmail
. Vari script che prima dovevano essere installati a mano successivamente all'installazione di base di qmail
vengono ora installati automaticamente se si lancia semplicemente il comando './config-all mx.domain.tld
' dopo la compilazione. Ecco cosa sarà installato e configurato con l'installazione rapida:
- control file pricipali come da script originale
config-fast
, - alias,
- RBL
- SPF
- SRS (usa control/me come srs_domain),
- directory log in /var/log/qmail,
- cronjobs
- logrotate
- PATH e MANPATH in /etc/profile.d/qmail.sh
- tcprules (base, solo per poter fare i testi inziali),
- supervise scripts,
qmailctl
script,- DKIM control/filterargs and control/domainkeys directory,
- SURBL,
- overlimit feature,
- moreipme,
- smtpplugins,
helodnscheck
spp plugin,svtools
,qmHandle
,queue-repair
,- SSL key file (opzionale)
Da ora in avanti, lanciando ./config-all mx.mydomain.tld
dopo la compilazione si otterrà una installazione di qmail
pronta per i test. Si dovrà solo aggiungere i propri domini virtuali e le altre funzionalità non menzionate sopra.
Coloro che preferiscono configurare tutto a mano possono continuare a usare lo script config-fast
, che orà copia i miei script supervise nella cartella qmail/doc.
In quanto segue, la sezione "Configurazione Manuale" è ovviamente una lettura caldamente suggerita al fine di avere un quadro di come funziona il tutto, soprattutto se si è principianti di qmail
.
Considerare questa funzionalità ancora come 'test' per il momento. I commenti sono apprezzati.
Changelog
- Apr 15, 2025
- added script config-all.sh - Jul 31, 2024
multilog uses "d" flag as default to gain compatibility with the readable datetime format of multilog in daemontools-0.78. Change it with the "t" flag if you prefer to have timestamps.
Indice
- Configurazione rapida
- Configurazione manuale
- Lanciare qmail all'avvio
Configurazione rapida
Lanciare lo script config-all
nella cartella dei sorgenti per installare e configurare quanto segue:
- principali file control come da script originario
config-fast
, - alias,
- RBL
- SPF
- SRS (usa control/me come srs_domain),
- directory log in /var/log/qmail,
- cronjobs
- logrotate
- PATH e MANPATH in /etc/profile.d/qmail.sh (anche
vpopmail
edovecot
) - tcprules (base, solo per poter fare i test iniziali),
- supervise scripts,
qmailctl
script,- Directory DKIM control/filterargs and control/domainkeys,
- SURBL,
- overlimit feature,
- moreipme,
- smtpplugins,
helodnscheck
spp plugin,svtools
,qmHandle
,queue-repair
,- SSL key file (opzionale)
./config-all mx.mydomain.tld
Il resto di questa pagina è una lettura fortemente suggerita per capire come funziona il tutto, soprattutto per i principianti.
mx.mydomain.tld deve avere un record MX, SPF, DKIM DMARC valido.
Configurazione manuale
Come già detto questa è la configurazione classica. Lascerò qui le vecchie note dal momento che sono materiale utile per capire cosa si è installato se si è scelto di utilizzare l'installazione rapida.
Creazione dei file alias e control
QMAILDIR=/var/qmail echo 3 > $QMAILDIR/control/spfbehavior echo "| ~vpopmail/bin/vdelivermail '' delete" > $QMAILDIR/control/defaultdelivery echo 200 > $QMAILDIR/control/concurrencyincoming echo noreply > $QMAILDIR/control/bouncefrom echo 20000000 > $QMAILDIR/control/databytes echo 272800 > $QMAILDIR/control/queuelifetime echo 30000000 > $QMAILDIR/control/softlimit echo 100 > $QMAILDIR/control/maxrcpt echo 2 > $QMAILDIR/control/brtlimit echo "HIGH:MEDIUM:!MD5:!RC4:!3DES:!LOW:!SSLv2:!SSLv3" > /var/qmail/control/tlsserverciphers cd /usr/local/src/qmail ./config-fast smtp.mydomain.tld
L'ultimo comando riempie i file defaultdomain locals me plusdomain rcpthosts
. smtp.mydomain.tld
sarà il nome della MTA e dovrà necessariamente avere un record MX valido.
defaultdomain
quando si hanno diversi domini nello stesso server (definiti poi nel filevirtualhost
) questo è il dominio di defaultlocals
i domini le cui spedizioni vengono effettuate nel presente server (qmail-send
per mezzo del programmaqmail-lspawn
). I messaggi per gli altri domini sono gestiti dal programmaqmail-rspawn
e spediti ad altre MTA. I domini listati inlocals
non dovrebbero essere confusi con i domini virtuali (virtualdomains). Infatti, nel caso il dominio sia presente nel filelocals
,qmail-send
non andrà ad aprire il filevirtualdomains
e si otterrà un errore di "no mailbox". Questo è il motivo per cui è sconsigliabile usare un dominio virtuale come nome della propria MTA.me
il nome del server. Questo è il nome a dominio che compare nel campofrom
quando si ricevono messaggi di sistema, ad esempio. E' anche il dominio usato nell'HELO
(il saluto all'inizio della conversazioneSMTP
). Esso deve avere un recordMX
valido nelDNS
e anche i recordSPF
eDKIM
, come vedremo in seguito. Inoltre,me
dovrebbe essere il dominio definito nel reverseDNS
, dal momento che vi sono dei provider che bloccano connessione ove l'HELO
domain non è associato all'indirizzoIP
.plusdomain
qmail-inject aggiunge questo dominio a ogni host name che finisce con un segno "+"rcpthost
Domini per i quali accettiamo messaggi. Più tardi vedremo comechkuser
rigetta le email per gli utenti non esistenti.spfbehavior
riguarda la configurazione di SPF.softlimit
imposta il soft resource limits perqmail-smtpd
bouncefrom
è lo username dell'account che invia i bounce. Similmente è possibile definire anchebouncefrom
, il dominio che compare nel bounce, che però ha come defaultme
.databytes
è il numero massimo di bytes in un messaggio (0=nessun limite).queuelifetime
sono il numero di secondi che un messaggio può trascorrere nella coda prima di essere definitivamente cancellato.brtlimit
è il limite massimo di destinatari non trovati consentito dopo il quale la connessione verrà chiusa (vedi la brtlimit patch).maxrcpt
imposta un limite al numero di destinatari di un messaggio (qmail-maxrcpt
patch).defaultdelivery
è il file.qmail
di default. Dice a qmail come recapitare il messaggio. Nel caso non si abbia ancora ben chiaro come funziona il delivery, è meglio leggere il capitolo sul relaying di Life with qmail e soprattutto il file README.vdelivermail che si trova nel pacchetto vpopmail, che spiega come sono usati i file.qmail
.tlsserverciphers
imposta la suite di cifratura (cipher suite, gli algoritmi del protocollo TLS) della connessione TLS. Nella nostra configurazione SSL non è ammesso, mentre TLS versione 1 e 1.1 (deprecato) è consentito. Se si vuole escludere anche il TLS v. 1 e 1.1 aggiungere:!TLSv1
alla fine della linea.
E' possibile trovare una presentazione completa di tutti i file di configurazione sul libro Life with qmail qui http://www.lifewithqmail.org/lwq.html#configuration
Ora facciamo il setup dell'indirizzo email di amministrazione del server. Questo indirizzo riceverà le email per root, postmaster, e mailer-daemon. Sositituire "postmaster@yourdomain.net" con l'indirizzo email dell'amministratore (postmaster):
cd $QMAILDIR/alias echo "postmaster@mydomain.tld" > .qmail-postmaster ln -s .qmail-postmaster .qmail-mailer-daemon ln -s .qmail-postmaster .qmail-root chmod 644 .qmail*
Impostazione delle cartelle log
Le cartelle log appartengono all'utente qmaill.nofiles e non dovrebbero essere accessibili a nessun altro.
mkdir -p /var/log/qmail chown -R qmaill:nofiles /var/log/qmail chgrp root /var/log/qmail chmod -R og-wrx /var/log/qmail chmod g+rx /var/log/qmail
Creazione degli script supervise
- Riferimenti: tcpserver page
Copiare gli script suprvise dalla cartella qmail/doc/example-supervise. Non fare copia&incolla dagli esempi sottostanti perchè non è detto che essi siano aggiornati e anche perchè potrebbero contenere dei caratteri esadecimali nascosti che causerebbero degli errori nell'esecuzione.
Scaricare gli startup scripts da qui e scompattarli
cd $QMAILDIR cp -rp doc/example-supervise/* .
Puoi vedere che ci sono l'eseguibile rc, che lo script di avvio qmail-start, e la cartella supervise:
rc supervise/ | |----clear/ | | | |----run | |----down | |----qmail-smtpd/ | | | |-----run | |-----log/ | | | |---run | |----qmail-smtpsd/ | | | |-----run | |-----log/ | | | |---run/ | |----qmail-submission/ | | | |-----run | |-----log/ | | | |---run | |----qmail-send/ | | | |-----run | |-----log/ | | | |---run | |----vpopmaild/ | | | |-----run | |-----log/ | | | |---run | |----vusaged/ | |-----run |-----log/ | |---run
Quando vengono creati dei link simbolici a una cartella supervise nella directory /service, il comando run ivi presente verrà eseguito all'avvio della macchina, quando il comando /command/svcscanboot viene lanciato
QMAILDIR=/var/qmail ln -s $QMAILDIR/supervise/qmail-smtpd /service ln -s $QMAILDIR/supervise/qmail-smtpsd /service ln -s $QMAILDIR/supervise/qmail-submission /service ln -s $QMAILDIR/supervise/qmail-send /service ln -s $QMAILDIR/supervise/vpopmaild /service ln -s $QMAILDIR/supervise/vusaged /service ln -s $QMAILDIR/supervise/clear /service
Vediamo ora in dettaglio gli script che abbiamo appena scaricato. Molte righe sono ancora commentate, perchè riguardano delle funzionalità che attiveremo in seguito. Per il momento sono attive solo le funzionalità di base.
File qmail/rc
#!/bin/sh QMAILDIR=/var/qmail # Comment out DKIM_ON=1 to disable dkim sign at qmail-remote level # You have to define your variables in control/filterargs (DKIM page for more info) # echo "*:remote:/var/qmail/bin/qmail-dkim:DKIMQUEUE=/bin/cat,DKIMSIGN=/var/qmail/control/domainkeys/%/default,DKIMSIGNOPTIONS=-z 2" > /var/qmail/control/filterargs DKIM_ON=1 if [ -r ${QMAILDIR}/control/filterargs ] && [ -n "$DKIM_ON" ]; then # DKIM sign at qmail-remote level exec env - PATH="$QMAILDIR/bin:$PATH" \ QMAILREMOTE=$QMAILDIR/bin/spawn-filter \ qmail-start "`cat $QMAILDIR/control/defaultdelivery`" else exec env - PATH="$QMAILDIR/bin:$PATH" \ qmail-start "`cat $QMAILDIR/control/defaultdelivery`" fi
Per il momento ignorare le righe che riguardano la firma DKIM (anche nei run file successivi). Vedremo queste cose dopo. E' infatti possibile testare il server sin da subito anche con queste righe presenti.
Servizio clear
Il servizio "clear" può comodamente ripulire la riga readproctitle service errors
(qmailctl clear
):
#!/bin/sh yes '' | head -4000 | tr '\n' .
Creare il file 'down':
touch /var/qmail/supervise/clear/down
File qmail/supervise/qmail-smtpd/run
#!/bin/sh QMAILDIR=/var/qmail QMAILDUID=`id -u vpopmail` NOFILESGID=`id -g vpopmail` MAXSMTPD=`cat $QMAILDIR/control/concurrencyincoming` SOFTLIMIT=`cat $QMAILDIR/control/softlimit` LOCAL=`head -1 $QMAILDIR/control/me` TCPRULES_DIR=/var/qmail/control #export REJECTNULLSENDERS=0 #export SMTPAUTH="!cram" # qmail-spp plugins #export ENABLE_SPP=1 #export HELO_DNS_CHECK=PLRIV # enable greetdelay for qmail-smtpd export SMTPD_GREETDELAY=20 export DROP_PRE_GREET=1 # greylisting #export JGREYLIST_DIR="$QMAILDIR/jgreylist" #export JGREYLIST_LOG_SMTP=1 # enable chkuser export CHKUSER_START=ALWAYS ################### DKIM - SURBL configuration ################################# # DKIMQUEUE and SURBLQUEUE are front-ends of qmail-queue export SURBL=1 # enable SURBL filtering # If simscan is not installed yet, do not assign QMAILQUEUE # so that the installation works at the beginning stage as well if [ -x $QMAILDIR/bin/simscan ]; then export QMAILQUEUE=$QMAILDIR/bin/surblqueue # executes surblfilter export SURBLQUEUE=$QMAILDIR/bin/simscan # executes simscan after SURBL #export QMAILQUEUE=$QMAILDIR/bin/simscan # do not execute SURBL nor DKIM filtering #### qmail-dkim disabled => no dkim verification #### to have verification active export SURBLQUEUE=$QMAILDIR/bin/qmail-dkim. Othewise the following will be ignored #export SURBLQUEUE=$QMAILDIR/bin/qmail-dkim # executes qmail-dkim after surblfilter export DKIMQUEUE=$QMAILDIR/bin/simscan # simscan is executed after qmail-dkim # DKIM verification. Use carefully export DKIMVERIFY="FGHKLMNOQRTVWp" # allow msg without "subject" in the h= list export UNSIGNED_SUBJECT=1 # avoid verification of outgoing messages export RELAYCLIENT_NODKIMVERIFY=1 fi ################################################################################ # turn off TLS on port 25 #export DISABLETLS="1" # rcptcheck-overlimit. Limits the number of emails sent by relayclients if [ -x $QMAILDIR/bin/rcptcheck-overlimit ]; then export RCPTCHECK=$QMAILDIR/bin/rcptcheck-overlimit export RCPTCHECKRELAYCLIENT="1" fi # enable simscan debug #export SIMSCAN_DEBUG=4 #export SIMSCAN_DEBUG_FILES=2 exec /usr/local/bin/softlimit -m "$SOFTLIMIT" \ /usr/local/bin/tcpserver -v -R -l "$LOCAL" \ -x $TCPRULES_DIR/tcp.smtp.cdb -c "$MAXSMTPD" \ -u "$QMAILDUID" -g "$NOFILESGID" 0 25 \ $QMAILDIR/bin/qmail-smtpd /bin/true 2>&1
Notare come il servizio smtpd
standard (porta 25) non consente l'autenticazione.
Bisogna adattare alle proprie esigenze il "resource limit" (softlimit in bytes). Ogni sistema è diverso e ha requisiti differenti. Life with qmail suggerisce appena 2MB. Dovresti trovare il tuo valore giusto aumentando il softlimit
a passi di 1MB, specialmente una volta che avrai caricato spamassassin, clamAV
e simscan
(il mail scanner).
Vedremo le caratteristiche di GREETDELAY
e DKIM
in seguito.
Considerazioni dull'uso del programma multilog
- Programma
multilog
Come già accennato nella pagina su daemontools, si può fare in modo che multilog
stampi le linee del log precedute da un timestamp, come già faceva il programma originale, oppure optare per un formato in cui data e ora sono stampati in modo intelligibile (che chiamerò datetime in quanto segue). La modalità di utilizzo varia leggermente per quanto riguarda il primo parametro da passare a multilog
, dato che il timestamp va con il flag t
mentre datetime va con una d
.
Pertanto questo sarà l'utilizzo di datetime:
multilog d <other-arguments> <script>
che stamperà qualcosa come
2024-07-31 18:06:03.823254532 tcpserver: status: 0/200/0
mentre questo è per il vecchio timestamp this is for timestamps
multilog t <other-arguments> <script>
che produrrà delle righe nel log simili a questa
@4000000066aa062d281ba97c tcpserver: status: 0/200/0
Questa guida utilizzerà datetime come impstazione di default.
File qmail/supervise/qmail-smtpd/log/run
#!/bin/sh LOGUSER="qmaill" LOGDIR="/var/log/qmail/smtpd" LOGDIRQLOG="/var/log/qmail/smtpd/qlog" NLOGS=50 exec /usr/local/bin/setuidgid $LOGUSER /usr/local/bin/multilog d n5 s16777215 $LOGDIR \ n$NLOGS s16777215 '-*' '+*qlog*' $LOGDIRQLOG
In questo modo avremo il file /var/log/qmail/smtpd/qmail-smtpd.log con le sole righe di qlog e con la data e l'ora scritte in modo leggibile:
2016-01-29 13:15:17.677946500 qlogenvelope: result=accepted code=250 reason=rcptto detail=chkuser helo=smtp.senderdomain.com mailfrom=sender@senderdomain.com rcptto=user@rcptdomain.com relay=no rcpthosts=yes size= authuser= authtype= encrypted= sslverified=no localip=10.0.0.4 localport=25 remoteip=83.103.72.231 remoteport=43618 remotehost= qp= pid=11928 2016-01-29 13:15:17.677946500 qlogreceived: result=accepted code=250 reason=queueaccept detail= helo=smtp.senderdomain.com mailfrom=sender@senderdomain.com rcptto=user@rcptdomain.com relay=no rcpthosts= size=2689 authuser= authtype= encrypted= sslverified=no localip=10.0.0.4 localport=25 remoteip=83.103.72.231 remoteport=43618 remotehost= qp=11934 pid=11928
File /var/qmail/supervise/qmail-smtpsd/run
#!/bin/sh QMAILDIR=/var/qmail QMAILDUID=`id -u vpopmail` NOFILESGID=`id -g vpopmail` MAXSMTPD=`cat $QMAILDIR/control/concurrencyincoming` SOFTLIMIT=`cat $QMAILDIR/control/softlimit` LOCAL=`head -1 $QMAILDIR/control/me` TCPRULES_DIR=/var/qmail/control SSL_DIR="$QMAILDIR/control" SSL_CHROOT="$SSL_DIR" SSL_UID=$QMAILDUID SSL_GID=$NOFILESGID CERTFILE="$SSL_DIR/servercert.pem" KEYFILE="$SSL_DIR/servercert.pem" DHFILE="$SSL_DIR/dh4096.pem" export SSL_UID SSL_GID SSL_CHROOT export CERTFILE KEYFILE DHFILE #export REJECTNULLSENDERS=1 export SMTPAUTH="!" # qmail-spp plugins export ENABLE_SPP=1 export HELO_DNS_CHECK=PLRIV # This enables greetdelay for qmail-smtpd export SMTPD_GREETDELAY=20 export DROP_PRE_GREET=1 # greylisting #export JGREYLIST_DIR="$QMAILDIR/jgreylist" #export JGREYLIST_LOG_SMTP=1 # enable chkuser export CHKUSER_START=ALWAYS ################### DKIM - SURBL configuration ################################# # DKIMQUEUE and SURBLQUEUE are front-ends of qmail-queue export SURBL=1 # Comment out to enable SURBL filtering # If simscan is not installed yet, do not assign QMAILQUEUE # so that the installation works at the beginning stage as well if [ -x $QMAILDIR/bin/simscan ]; then export QMAILQUEUE=$QMAILDIR/bin/surblqueue # executes surblfilter export SURBLQUEUE=$QMAILDIR/bin/simscan # executes simscan after SURBL #export QMAILQUEUE=$QMAILDIR/bin/simscan # do not execute SURBL nor DKIM filtering #### qmail-dkim disabled => no dkim verification #### to have verification active export SURBLQUEUE=$QMAILDIR/bin/qmail-dkim. Othewise the following will be ignored #export SURBLQUEUE=$QMAILDIR/bin/qmail-dkim # executes qmail-dkim after surblfilter export DKIMQUEUE=$QMAILDIR/bin/simscan # simscan is executed after qmail-dkim # DKIM verification. Use carefully export DKIMVERIFY="FGHKLMNOQRTVWp" # allow msg without "subject" in the h= list export UNSIGNED_SUBJECT=1 # avoid verification of outgoing messages export RELAYCLIENT_NODKIMVERIFY=1 fi ################################################################################ # turn off TLS on port 465 export DISABLETLS=1 export FORCETLS=0 # require that authenticated user and 'mail from' are identical export FORCEAUTHMAILFROM="1" # rcptcheck-overlimit. Limits the number of emails sent by relayclients if [ -x $QMAILDIR/bin/rcptcheck-overlimit ]; then export RCPTCHECK=$QMAILDIR/bin/rcptcheck-overlimit export RCPTCHECKRELAYCLIENT="1" fi # enable simscan debug #export SIMSCAN_DEBUG=4 #export SIMSCAN_DEBUG_FILES=2 exec /usr/local/bin/softlimit -m "$SOFTLIMIT" \ /usr/local/bin/sslserver -seV -Rp -l "$LOCAL" \ -Xx $TCPRULES_DIR/tcp.smtp.cdb -c "$MAXSMTPD" \ -u "$QMAILDUID" -g "$NOFILESGID" 0 smtps \ $QMAILDIR/bin/qmail-smtpd ~vpopmail/bin/vchkpw /bin/true 2>&1
File qmail/supervise/qmail-smtpsd/log/run
#!/bin/sh LOGUSER="qmaill" LOGDIR="/var/log/qmail/smtpsd" exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog d s16777215 /var/log/qmail/smtpsd
File qmail/supervise/qmail-submission/run
Questo servizio fa sì che la nostra MTA possa agire anche da outgoing relay (la posta può essere anche inviata quando ci connette da un IP remoto che imposta il suo smtp server sulla nostra MTA), a condizione che l'utente si identifichi (in connessione sicura criptata con TLS!).
#!/bin/sh QMAILDIR=/var/qmail QMAILDUID=`id -u vpopmail` NOFILESGID=`id -g vpopmail` MAXSMTPD=`cat $QMAILDIR/control/concurrencyincoming` SOFTLIMIT=`cat $QMAILDIR/control/softlimit` LOCAL=`head -1 $QMAILDIR/control/me` TCPRULES_DIR=/var/qmail/control # You MUST export this, otherwise you'd get a 30 sec timeout # "!" if you want the submission feature (auth required) export SMTPAUTH="!" # This enables greetdelay for qmail-smtpd. export SMTPD_GREETDELAY=3 export DROP_PRE_GREET=1 # This enables chkuser export CHKUSER_START=ALWAYS # This makes qmail to allow connections without TLS (default 1) #export FORCETLS=0 # This turns off TLS on port 587 (default 0) #export DISABLETLS=1 # Requires that authenticated user and 'mail from' are identical (default 0) export FORCEAUTHMAILFROM=1 # rcptcheck-overlimit. Limits the number of emails sent by relayclients #export RCPTCHECK=$QMAILDIR/bin/rcptcheck-overlimit #export RCPTCHECKRELAYCLIENT=1 exec /usr/local/bin/softlimit -m "$SOFTLIMIT" \ /usr/local/bin/tcpserver -v -R -l "$LOCAL" \ -x $TCPRULES_DIR/tcp.submission.cdb -c "$MAXSMTPD" \ -u "$QMAILDUID" -g "$NOFILESGID" 0 587 \ $QMAILDIR/bin/qmail-smtpd \ ~vpopmail/bin/vchkpw /bin/true 2>&1
Notare l'uso vchkpw
in unione con qmail-smtpd
per assicurare che l'utente si identifichi. La connessione richiede che TLS sia abilitato. Questa è ragione per la quale abbiamo aperto una porta apposita 587: per consentire anche agli utenti remoti di usare la nostra MTA come un relay.
La variabile SMTPAUTH
è relativa alla patch per l'autenticazione. Sei invitato a leggere il file README.auth per ulteriori dettagli.
Vedremo le caratteristiche di GREETDELAY
in seguito.
File qmail/supervise/qmail-submission/log/run
#!/bin/sh exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog d s16000000 n200 /var/log/qmail/submission
File qmail/supervise/qmail-send/run
#!/bin/sh exec /var/qmail/rc
File qmail/supervise/qmail-send/log/run
#!/bin/sh exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog d s16000000 n200 /var/log/qmail/send.
File qmail/supervise/vpopmaild/run
#!/bin/sh QMAILDUID=`id -u root` NOFILESGID=`id -g root` VPOPMAILID=`id -g vpopmail` exec /usr/local/bin/softlimit -m 30000000 \ /usr/local/bin/tcpserver -v -H -R -l 0 \ -u $QMAILDUID -g $NOFILESGID 0 $VPOPMAILID \ ~vpopmail/bin/vpopmaild 2>&1
vpopmaild è importante quando ci si connette a vpopmail attraverso la webmail per cambiare la password, ad esempio.
File qmail/supervise/vpopmaild/log/run
#!/bin/sh exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog d /var/log/qmail/vpopmaild
File qmail/supervise/vusaged/run
#!/bin/sh exec ~vpopmail/bin/vusaged 2>&1
File qmail/supervise/vusaged/log/run
#!/bin/sh exec setuidgid qmaill /usr/local/bin/multilog d /var/log/qmail/vusaged
cronjobs
Per ruotare i log file di qmail
useremo lo script convert-multilog di John Simpson (un grazie all'autore e a Marc per il suggerimento), che ne descrive così il funzionamento:
convert-multilog is a script which searches "/service/*/log/main" for any "@4*" files (the automatic cut-off files generated by multilog), converts their timestamps from tai64n to human-readable format, and writes them to /var/log/{service}.{date}. Once the lines from a given "@4*" file have been converted, the file is deleted.
In sostanza i file vengono archiviati con un file separato per data, ad esempio
-rw-r--r-- 1 root root 259558 Aug 24 12:21 qmail-smtpd.2014-08-20 -rw-r--r-- 1 root root 806917 Aug 24 12:21 qmail-smtpd.2014-08-21 -rw-r--r-- 1 root root 1523116 Aug 24 12:21 qmail-smtpd.2014-08-22 -rw-r--r-- 1 root root 364022 Aug 24 12:21 qmail-smtpd.2014-08-23
all'interno dei quali la data è convertita dal timestamp al formato normale, ad esempio
2014-08-23 00:31:49.503947500 tcpserver: status: 1/20
Questo facilita molto eventuali ricerche future.
Installare come segue:
mkdir -p /var/log/qmail/backup wget -O /usr/local/bin/convert-multilog https://notes.sagredo.eu/files/qmail/convert-multilog chmod +x /usr/local/bin/convert-multilog ln -s /var/log/qmail/send /service/qmail-send/log/main ln -s /var/log/qmail/smtpd /service/qmail-smtpd/log/main ln -s /var/log/qmail/smtpsd /service/qmail-smtpsd/log/main ln -s /var/log/qmail/submission /service/qmail-submission/log/main
NB: lo script che abbiamo scaricato è la versione da me modificata per funzionare con le formato datetime nei log ( patch multilog_readable-datetime
per daemontools
). Se invece si è scelto di usare il timestamp scaricare il programma convert-multilog
originale.
Ora impostare un cronjob una volta al giorno. E dal momento che vogliamo convertire il log in formato leggibile una volta al giorno è necessario ruotarlo su base giornaliera. Perciò è necessario aggiungere qualcosa come questo al nostro crontab:
cat > /etc/cron.d/qmail << EOF # convert-multilog 59 2 * * * /usr/local/bin/convert-multilog 1> /dev/null # qmail log 0 0 * * * /usr/local/bin/svc -a /service/qmail-submission/log 0 0 * * * /usr/local/bin/svc -a /service/qmail-smtpd/log 0 0 * * * /usr/local/bin/svc -a /service/qmail-smtpsd/log 0 0 * * * /usr/local/bin/svc -a /service/qmail-send/log 0 0 * * * /usr/local/bin/svc -a /service/vpopmaild/log 0 0 * * * /usr/local/bin/svc -a /service/vusaged/log EOF
Notare che almeno nelle dstribuzione derivate da RedHat il cronjob deve contenere l'utente che deve lanciare il comando, perciò la sintassi da utilizzare è la seguente:
cat > /etc/cron.d/qmail << EOF # convert-multilog 59 2 * * * root /usr/local/bin/convert-multilog 1> /dev/null # qmail log 0 0 * * * root /usr/local/bin/svc -a /service/qmail-submission/log 0 0 * * * root /usr/local/bin/svc -a /service/qmail-smtpd/log 0 0 * * * root /usr/local/bin/svc -a /service/qmail-smtpsd/log 0 0 * * * root /usr/local/bin/svc -a /service/qmail-send/log 0 0 * * * root /usr/local/bin/svc -a /service/vpopmaild/log 0 0 * * * root /usr/local/bin/svc -a /service/vusaged/log EOF
Impostazione PATH
e MANPATH
Agiungere la cartella bin di qmail
al PATH
e la cartella man al MANPATH
cat > /etc/profile.d/qmail.sh << __EOF__ PATH=\$PATH:/var/qmail/bin:/home/vpopmail/bin:/usr/local/dovecot/bin:/usr/local/dovecot-pigeonhole/bin export PATH MANPATH=\$MANPATH:/var/qmail/man:/usr/local/dovecot/share/man export MANPATH __EOF__
Abbiamo aggiunto in anticipo il PATH di vpopmail
, dovecot
e dovecot-pigeonhole PATH
. Correggere se si è pensato di installarli altrove.
Creare la SSL key
SE non hai intenzione di costruire un un open relay (che consente l'invio di email connettendosi da remoto con accesso smtp/tls) puoi saltare questo punto.
Per mettere in sicurezza l'autenticazione smtp bisogna creare un certificato SSL. Il certificato deve essere di proprietà dell'utente sotto il quale viene eseguito qmail-smtpd, nel nostro caso vpopmail.
# make cert Generating a 1024 bit RSA private key ..................++++++ .......++++++ writing new private key to '/var/qmail/control/servercert.pem' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:IT State or Province Name (full name) [Some-State]:Italy Locality Name (eg, city) []:Cagliari Organization Name (eg, company) [Internet Widgits Pty Ltd]:Your Name Organizational Unit Name (eg, section) []: Common Name (eg, YOUR name) []:smtp.yourdomain.net Email Address []:postmaster@yourdomain.net # make tmprsadh # chown vpopmail:vchkpw /var/qmail/control/*.pem
E' importante che il "Common Name" corrisponda al nome a dominio del server che viene usato come relay.
Ora creiamo un cronjob che aggiorni giornalmente il certificato:
# crontab -e 03 05 * * * /var/qmail/bin/update_tmprsadh > /dev/null 2>&1
Importante: se si sta usando la mia patch e nella vostra installazione qmail-submission
viene lanciato sotto un utente diverso da vpopmail
(diversamente da quanto suggerito in questa guida), è necessario modificare di conseguenza il file update_tmprsadh
, altrimenti è possibile eccedere il timeout della connessione a causa della mancanza dei privilegi di lettura del certificato.
Installazione di un certificato SSL valido
Non appena il server è funzionante sarà il caso di ritornare qui per installare un certificato valido fornito da Let's Encrypt. Si veda questa pagina al proposito.
qmailctl
script
- Referimenti: Life with qmail
- Scarica (grazie a Sam Tang per il contributo)
wget -O /var/qmail/bin/qmailctl https://raw.githubusercontent.com/sagredo-dev/qmail/refs/heads/main/scripts/qmailctl chmod +x qmailctl
Lo script qui sotto avvia e arresta i servizi, chiama tcprules per ricaricare tcp.smtp.cdb e tcp.submission.cdb, mostra lo stato dei servizi e della coda (queue). Notare come esso avvii e arresti pure vpopmaild, e avvii sia il normale servizio smtpd sulla porta 25 che il servizio submission sulla porta 587. In ogni caso i servizi da avviare con questo script vanno indicati nella quarta riga.
qmailctl
is a pure bash
script. Unix BSD users should install bash
, edit the script and point the bash executable correctly in the very first line:
#!/usr/local/bin/bash
Modalità di utilizzo
# qmailctl help stop -- stops mail service (smtp connections refused, nothing goes out) start -- starts mail service (smtp connection accepted, mail can go out) pause -- temporarily stops mail service (connections accepted, nothing leaves) cont -- continues paused mail service stat -- displays status of mail service cdb -- rebuild the tcpserver cdb file for smtp restart -- stops and restarts smtp, sends qmail-send a TERM & restarts it doqueue -- sends qmail-send ALRM, scheduling queued messages for delivery reload -- sends qmail-send HUP, rereading locals and virtualdomains queue -- shows status of queue alrm -- same as doqueue flush -- same as doqueue hup -- same as reload clear -- clears the readproctitle service errors with ..................... kill -- svc -d processes in svclist, then do 'killall -g svscanboot' boot -- Boots qmail and all services in /service running /command/svscanboot reboot -- kill & boot commands in sequence
qmailctl può anche essere usato per uccidere (kill) tutti i processidi qmail e per fare un reboot del server. Personalmente uso questa opzione dentro il file rc.6 del mio server virtuale Slackware per evitare messaggi di errore quando arresto o riavvio il server virtuale.
Si può anche chiamare il servizio clear.
Compiling the tcprules
Creare un file tcprules
per qmail-smtpd
cat > /var/qmail/control/tcp.smtp << EOF 0.0.0.0:allow,RELAYCLIENT="",SMTPD_GREETDELAY="0" 127.:allow,RELAYCLIENT="",SMTPD_GREETDELAY="0" :allow,CHKUSER_WRONGRCPTLIMIT="3" EOF
e per qmail-submission
cat > QMAIL/control/tcp.submission << EOF :allow EOF
Compilare le tcprules
:
> qmailctl cdb Updated tcp.smtp.cdb. Updated tcp.submission.cdb.
Sarà necessario ricompilare le tcprules
ogni volta che si modifica tcp.smtp o tcp.submission. Non c'è bisogno di riavviare qmail
.
svtools
- More info: https://github.com/kayahr/svtools
- Author: Klaus Reimer
Questa è una interessante collezione di script per gestire i servizi di qmail
che val la pena installare. In particolare è molto utile mlcat
che senza nessuna fatica consente di visualizzare il log associato a un dato servizio di daemontool
con un comando come:
mlcat qmail-smtpd
L'ho leggermente modificato per evitare di digitare sempre il prefisso "qmail-" davanti al nome del servizio:
mlcat smtpd
Installazione
git clone https://github.com/sagredo-dev/svtools.git cd svtools make make install
Lanciare qmail
all'avvio
Il comando /command/svcscanboot è già stato inserito nel file /etc/inittab al momento dell'installazione di daemontools.
Nei sistemi basati su systemd
abbiamo invece installato un apposito servizio per l'avvio automatico di daemontools
, come spiegato qui.
Commenti
Messaggio nei log
Webmaster 17 maggio 2021 14:58 CET
Salve Roberto,
non riesco a capire questo messaggio nei log /var/log/qmail/smtpd/current, l'ip anonimizzato è il mio
Grazie
Gabriele
Rispondi | Permalink
Messaggio nei log
Roberto Puzzanghera Webmaster 17 maggio 2021 19:10 CET
Credo che significhi che il client abbia chiuso la conversazione prima del comando quit del server. Il messaggio di errore esplicito l'avevo aggiunto io tempo fa al posto di un generico "read failed", ma non ricordo più molto... In ogni caso il messaggio viene correttamente ricevuto
Rispondi | Permalink
Messaggio nei log
Webmaster Roberto Puzzanghera 17 maggio 2021 19:20 CET
Grazie del chiarimento.
A presto
G
Rispondi | Permalink
Received-SPF: unknown (0: Multiple SPF records returned)
Gabriele 12 ottobre 2018 13:12 CET
Buongiorno Roberto,
Per bloccare le mail in ingresso con Received-SPF: unknown (0: Multiple SPF records returned) come devo modifcare i file della patch qmail-SPF.
Grazie mille
Rispondi | Permalink
Received-SPF: unknown (0: Multiple SPF records returned)
Roberto Puzzanghera Gabriele 13 ottobre 2018 09:35 CET
da quello che vedo nella patch lo stato di unknown viene lasciato passare sempre quando spfbehaviour<6... un po' brutto effettivamente. Occorrerebbe in effetti metterci le mani, avendo tempo :-)
Rispondi | Permalink
Cambio dominio di default
Gabriele 30 luglio 2018 11:30 CET
Buongiorno Roberto, in un server in produzione dovrei cambiare il dominio di default, quello che si imposta con ./config-fast yourdomain.net per intenderci. Se cambio tutte le ricorrenze del vecchio dominio nei vari file in qmail/control e riavvio qmail continua a funzionare tutto?
Grazie
Gabriele
Rispondi | Permalink
Cambio dominio di default
Roberto Puzzanghera Gabriele 30 luglio 2018 11:34 CET
si, non mi viene in mente nessun effetto collaterale, ed io l'ho fatto più di una volta... per esempio quando installo un nuovo server clono un virtual server in produzione e poi faccio un config-fast
Rispondi | Permalink
impostazione bouncefrom
Gabriele 6 giugno 2018 19:55 CET
Ciao Roberto, c'è l'impostazione del bouncefrom che se settata come da te indicata, echo postmaster@yourdomain.net > /var/qmail/control/bouncefrom, mi genera le mail di mailer-daemon con mittente postmaster@yourdomain.net"@yourdomain.net".
Ho cambiato in echo postmaster > /var/qmail/control/bouncefrom, è ugualmente corretto?
Grazie ancora
Rispondi | Permalink
impostazione bouncefrom
Roberto Puzzanghera Gabriele 6 giugno 2018 20:48 CET
Mi sa che hai ragione... hai fatto un test con la nuova impostazione?
Rispondi | Permalink
impostazione bouncefrom
Gabriele Roberto Puzzanghera 7 giugno 2018 10:00 CET
Grazie della risposta.
Si con la nuova impostazione.
Grazie
Rispondi | Permalink