Una soluzione SQL valias con sieve per qmail. Nuove patch e un plugin per Roundcube
5 novembre 2023 by Roberto Puzzanghera 0 commenti
Changelog
- Nov 5, 2023
-bug fix: vpopmail defaultdelivery patch: it won't create the .qmail file in case control/defaultdelivery already has vdelivermail, in order to prevent a vpopmail loop
-qmailforward RC plugin: it won't create the copy record if $config['qmailforward_defaultdelivery'] contains 'vdelivermail'
Tra i vari problemi che mi ero proposto di affrontare prima o poi credo di averne definitivamente risolto uno: l'impossibilità di avere le sieve
rules e allo stesso tempo gli alias di vpopmail
salvati su database (--enable-valias
).
Ma prima di presentare le soluzioni, facciamo un po’ di chiarezza sul problema da risolvere, che tra l’altro è stato discusso più volte anche nei commenti di questo blog. Non a caso la soluzione da me individuata è stata in parte ispirata dalla (ri)lettura di alcuni post dei visitatori.
Il problema
Normalmente vpopmail
copia il proprio delivery agent (vdelivermail
) nel file .qmail-default file dei domini appena creati. Ciò rende impossibile usare i filtri di Dovecot
basati sulle regole sieve
, dato che questo richiederebbe l’utilizzo di Dovecot-LDA
.
Per contro, se poniamo in .qmail-default il delivery agent di dovecot
al fine di avere le sieve
rules, quando l’utente userà i filtri per generare un reinoltro causerà senza volerlo la violazione delle regole SPF
, perché qmail
, essendo ora fuori causa, non potrà lanciare srsfilter
per riscrivere l’indirizzo del mittente. Per lo stesso motivo, gli alias salvati su MySQL
sono irraggiungibili, quando si opta per Dovecot
che non ha nulla a che fare con essi.
Sono problemi che conosciamo bene a causa delle mail di protesta degli utenti che si vedono rimbalzare indietro i loro messaggi di inotro. Ma ora ci daremo una sistemata una volta per tutte :-)
Rimozione del driver vpopmail-auth di dovecot. Migrating al driver SQL
15 febbraio 2021 by Roberto Puzzanghera 0 commenti
Those who are still using the Dovecot
's vpopmail
auth driver should consider a migration to the sql driver, as on January 4, 2021 dovecot-2.3.13
was released and the vpopmail
auth driver removed (more info here).
Adding vpopmail
's aliasdomains
to MySQL
As some commentators have already pointed out, switching to dovecot
's sql auth can be painful if one have domain aliases. I will show below how to make dovecot
aware of the vpopmail
's aliasdomains
, so that a user who tries to login with a domain alias can pass the authentication.
The idea is to save the pairs alias/domain in a new "aliasdomains" MySQL
table and modify the dovecot
's sql
query in order to select the user's domain from this table in case the domain is an alias or from the vpopmail
table otherwise. For example:
MariaDB [vpopmail]> SELECT * FROM aliasdomains; +----------------------+----------------------+ | alias | domain | +----------------------+----------------------+ | alias.net | domain.net | +----------------------+----------------------+
A vpopmail
sql-aliasdomains patch will transparently do the sql stuff when creating/deleting the alias in the usual way by means of the vaddaliasdomain
/vdeldomain
vpopmail
's programs.
NB: if you are testing this solution, I would be glad if you give me a feedback by means of a comment below, so that I can speed up its introduction in the installation guide.
Changelog
- February 15, 2021
- fix in the configure file. An autoreconf is needed as I modified the configure.in and Makefile.am files - February 10, 2021
- a C programvsavealiasdomains
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. - Feb 5, 2021
- The patch has been improved: the sql-aliasdomains stuff is now done by means of thevpopmail
's C programs and functions. - Feb 3, 2021
- new patch and script released. Justconfigure --enable-sql-aliasdomains
(default) and forget. The dbtable will be created the first time you will create analiasdomain
. - Jan 18, 2021
- now everything is inside a vpopmail patch. The aliasdomain sql records will be created/deleted transparently when using vaddaliasdomain/vdeldomain in the usual way, provided that you have created the aliasdomains dbtable - Jan 17, 2021
- I modified the dovecot's sql query so that a pair real_domain/real_domain is not needed anymore in the dbtable - Jan 13, 2021
- added support for sql aliasdomains
Patch di qmail
20 novembre 2023 by Roberto Puzzanghera 18 commenti
- Scarica l'ultima versione della patch combinata per netqmail-1.06 v. 2023.11.20 (MD5).
- Changelog
- Readme
Changelog
- Nov 20, 2023
-dkim:
* The patch now by default excludes X-Arc-Authentication-Results
* dkim can additionally use the environment variable EXCLUDE_DKIMSIGN to include colon separated list of headers to be excluded from signing (just like qmail-dkim). If -X option is used with dk-filter, it overrides the value of EXCLUDE_DKIMSIGN. - Sep 26, 2023
-surblfilter logs the rejected URL in the qmail-smtpd log. It can now inspect both http and https URLs.
-Improvements in man dkim.9, qmail-dkim.9 and surblfilter.9 - Sep 5, 2023
-DKIM patch upgraded to v. 1.42
*dk-filter.sh: "source $envfn" has been replaced with ". $envfn" in oder to work for pure bourne shells
*minor corrections to the man pages - Aug 20, 2023 (diff)
-install a sample control/smtpplugins file in case it does not exist yet, to avoid "unable to read control" crash. - Jul 5, 2023 (diff)
-vpopmail-dir.sh: now uses getent to gain compatibility with alpine/docker (tx BenV) - Jul 3, 2023
-bug fix in vpopmail-dir.sh: it was not searching the sed binary in /bin/sed as it is at least on Ubuntu systems (tx Mike G) - Jun 30, 2023
-DKIM patch upgraded to v. 1.41
*dknewkey will allow domains in control/domainkey
*Made a few adjustments to the man pages and dkimsign.cpp for DKIMDOMAIN to work with qmail-smtpd (in case some configures qmail-smtpd to sign instead of the usual dk-filter/qmail-remote)
-The broken link based on pobox.com in the default SPF error explanation was changed to https://mxtoolbox.com/SuperTool.aspx?action=spf - Jun 18, 2023 (diff)
-vpopmail uid and gid are determined dinamically instead of assigning 89:89 ids by default
-vpopmail install directory determined dinamically (was /home/vpopmail). Now the variable in the conf-cc file is determined as well.
Feel free to post any issue in the comments as I'm not sure that /bin/sh will work in all Linux. - Feb 19, 2023
- dkim patch upgraded to v. 1.37
* ed25519 support (RFC 8463)
* old yahoo's domainkeys stuff removed (no longer need the libdomainkeys.a library)
Installare e configurare vpopmail
11 novembre 2023 by Roberto Puzzanghera 6 commenti
- Pagina originale di Inter7
- Maggiori informazioni qui
- README.vdelivermail
- Changelog
- versione vpopmail: 5.4.33
- Patch applicata v. 2023.11.11 (dettagli più sotto)
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
- Nov 11, 2023
- defauldelivery patch: vmakedotqmail won't create users' .qmail if control/defaultdelivery already has vdelivermail.
Oct 23, 2023
- defaultdelivery patch: .qmail file won't be created if control/defaultdelivery already has vdelivermail.
Oct 13, 2023
- added "s/qmail cdb" patch, which gets vpopmail to locate correctly the qmail assign.cdb for s/qmail users. s/qmail users should configure vpopmail with--enable-sqmail-cdb
- Sep 5, 2023
- changed configuration option --enable-logging=e (was p). Now failed attempts will be logged with no password shown. - Aug 27, 2023
- new combined patch. More info here
* The logic of the defaultdelivery patch/feature has been revised. if configured with--enable-defauldelivery
vpopmail
will save control/defauldelivery in the user's .qmail andvdelivermail
LDA in the domain's .qmail-default file. This will achieve multiple benefit: you haveqmail
forwards andsieve
together andvalias
available. Thevalias
table scheme was changed as well.
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, copia il delivery agent preferito, salvato in QMAILDIR/control/defauldelivery, nel file .qmail della mailbox, e il delivery agent di
vpopmail
nel file .qmail-default del dominio.
Per informazioni precise leggere qui. Dare anche una occhiata al file doc/README.defaultdelivery nel codice sorgente. - dovecot-sql-procedures 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 le query sql. Con questo aggiustamentovpopmail
installerà in modo autonomo la procedura e le funzioni sql nel database quando si crea un nuovo dominio. La procedura può essere chiamata dadovecot
per fare l'autenticazione.
Il codice sql supporta gli aliasdomains e i mysql limits, e sarà caricato dal file~/vpopmail/etc/disable-many-domains_procedures.sql
che si può ovviamente personalizzare.
E' necessario configurarevpopmail
con--enable-mysql-bin=PATH
poichè dobbiamo installare la procedura chiamandomysql
con un comando shell. - vusaged configure patch
Almeno su Debian 11 sembra chevusaged
si rifiuti di terminare la configurazione (comando configure) a causa di un mancato link alle libreriemysql
(configure: error: No vauth_getpw in libvpopmail). Ovviamente ho spulciato lo script e il link sembra impostato correttamente, e ciò è al momento molto strano. Dopo un po' di prove, ho notato che facendo in modo che il configure superi il problema senza bloccarsi con un messaggio di errore, la compilazione susseguente vada a buon fine linkando corrrettamentelibmysqlclient
e terminando con successo la compilazione.
NB: è necessario dare unautoreconf -f -i
nella directoryvusaged
prima della configurazione, dal momento che il fileconfigure.ac
è stato modificato. - s/qmail cdb patch, che consente a
vpopmail
di localizzare correttamente il file assign.cdb diqmail
per gli utentis/qmail. s/qmail
users should configurevpopmail
with--enable-sqmail-cdb
- recipient check patch. Da usare con s/qmail di Erwin Hoffmann al fine di validare il destinatario della mail. Questa patch non è importante nella presente installazione. Si veda il file doc/README.vrcptcheck per maggiori informazioni.
- vuserinfo-D_newline, una piccola patch che migliora la leggibilità quando si utilizza il comando
vuserinfo -D
, introducendo una nuova linea - la patch gcc-10-compat, con il la quale vpopmail è compatibile con
gcc-10
. - Una patch che risolve i seguenti problemi (Ali Erturk TURKER):
- vdelivermail.c controlla i permessi di spamassassin anzichè di maildrop.
- vopen_smtp_relay() restituisce il valore corretto, di modo che open_smtp_relay() possa rilevare e riportare gli errori di connessione al database (vmysql.c, voracle.pc, vpgsql.c)
- vdel_limits() esegue un core-dump se la connessione al database non è disponibile. (vmysql.c, voracle.pc)
daemontools
3 settembre 2023 by Roberto Puzzanghera 0 commenti
- Info: http://cr.yp.to/daemontools.html
- Scaricare daemontools: http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
- Scaricare netqmail: https://notes.sagredo.eu/files/qmail/tar/netqmail-1.06.tar.gz
daemontools è una collezione di strumenti per gestire servizi UNIX. Monitora i servizi di qmail e salva i messaggi di errore in uno o più logs.
Changelog
- Sep 3, 2023
-Buffer Overflow fixed in timestamp.c (patch multilog-readable_datetime, Ubuntu 22.04). It was causing empty log files everywhere. (thanks Bai Borko and KPC) - Jun 30, 2023
-aggiunta la mia patch multilog-readable_datetime, che sostituisce il timestamp con un formato leggibile nei file log. Non installare questa patch se si preferisce il vecchio timestamp.
-se si installa questa patch è necessario anche riscaricare il programmaconvert-multilog
. Lasciare invece il programma originale se si usa il timestamp . (diff)
Bloccare gli HELO/EHLO con falso DNS
16 agosto 2023 by Roberto Puzzanghera 0 commenti
Changelog
- Aug 17, 2023
- C++ version (testing) - Aug 13, 2023
- v. 8.2.0 bug fix: segfault in case of no result in DNS record
- default action changed to GNLR - 27 luglio 2023
-P
lascia passare il client e ignora tutti i filtri. E' necessario rimuovere o rivedere questa opzione se già si usa il programma.
- aggiunto il filtroG
, ovveroHELO/EHLO
con una sintassi non valida sono bloccati (stringhe casuali ma anche errori di digitazione come sagredo..eu). Compilare con-lpcre
- ampia revisione del codice. Per favore riportare ogni problema nei commenti.
La Sezione 3.5 del documento RFC-821 afferma che
The sender-SMTP MUST ensure that the <domain> parameter in a HELO command is a valid principal host domain name for the client host. As a result, the receiver-SMTP will not have to perform MX resolution on this name in order to validate the HELO parameter.
The HELO receiver MAY verify that the HELO parameter really corresponds to the IP address of the sender. However, the receiver MUST NOT refuse to accept a message, even if the sender's HELO command fails verification.
Ammettere i client con un record DNS
bacato nel proprio HELO/EHLO
può essere sensato non solo perché suggerito dalla RFC di cui sopra, ma anche una cosa conveniente per l'amministratore, che non dovrà perdere il suo tempo ad aggiungere continuamente record alla whitelist per colpa dei client regolari che non hanno settato bene il proprio record DNS
.
Ma d'altra parte, è un dato di fatto che praticamente tutti gli spammers utilizzino nel loro HELO
domini che non appartengono loro -spesso addirittura uno dei nostri stessi domini (cosa ovviamente intollerabile)-, oppure delle stringhe random o domini che non sono riconducibili ad alcun IP.
Per esempio, consideriamo le seguenti righe del mio log (ne ho sempre moltissime):
2022-02-01 10:19:53.142643500 helo-dns-check: HELO [yq3H9cDKgS] from [109.237.103.41] doesn't solve 2022-02-01 09:53:05.772497500 helo-dns-check: HELO [sagredo.eu] is a local domain but IP [183.240.55.119] is not a RELAYCLIENT
Penso che, a prescindere da cosa dica l'RFC sopra menzionato, non si commetta un peccato mortale se si respingono almeno i client che riportano gli errori di cui sopra.
Spiegherò quindi qui sotto come settare un filtro che respinga i seguenti problemi a livello DNS
:
HELO/EHLO
con una sintassi non valida. Stringhe casuali ma anche domini non validi a causa di una errata digitazione come ad esempio sagredo..eu non verranno ammessi.- falsi
HELO/EHLO
contenenti addirittura uno dei nostri domini, riconoscibili dal fatto che il recordDNS
non corrisponde a uno dei nostriIP
mentre la variabileRELAYCLIENT
non è stata definita; HELO/EHLO
contenenti un dominio non riconducibile con alcun recordA
. In questo caso si otterranno alcuni falsi positivi, ad esempio i client il cui amministratore ha dimenticato di creare il recordA
nel proprioDNS
verranno bannati.- client il cui
A
record non corrisponde all'indirizzoIP
remoto. Ciò è palesemente contro laRFC-821
, pertanto la mia configurazione non rifiuterà queste connessioni, che però saranno loggate.
Installare un certificato Let's Encrypt per i server qmail e dovecot
5 agosto 2023 by Roberto Puzzanghera 7 commenti
Changelog
- 5 agosto 2023
L'installzione del certificato è ora basata sudehydrated.
La vecchia documentazione basata sucertbot
si trova in fondo a questa pagina, ma non verrà più aggiornata. - May 18, 2023
added the option--key-type rsa
to thecertbot
command, to avoid thatcertbot
will silently default toECDSA
the private key format, which results not understandable by myopenssl-1.1
. In this way the format of the private key will beRSA
. More info here.
To enable HTTPS on your website, you need to get a certificate (a type of file) from a Certificate Authority (CA). Let’s Encrypt is a CA. In order to get a certificate for your website’s domain from Let’s Encrypt, you have to demonstrate control over the domain. With Let’s Encrypt, you do this using software that uses the ACME protocol which typically runs on your web host.
- Sito Let's Encrypt
- Pagina github dehydrated
- Pagina di AlienBob (per utenti
Slackware
, ma con istruzioni generiche valide per ogni distribuzioneLinux
)
Dehydrated is a client for signing certificates with an ACME-server (e.g. Let's Encrypt) implemented as a relatively simple (zsh-compatible) bash-script. This client supports both ACME v1 and the new ACME v2 including support for wildcard certificates!
Trattandosi di un programma shell, dehydrated
ha il vantaggio di non richiedere dipendenze, a differenza deI programma ufficiale certbot,
che richiede una lunghissima serie di librerie python
. Mantenere tutto questo volume di programmi si è rivelato faticoso nel tempo, ed è questo il motivo per cui mi sono deciso a passare a dehydrated
.
Configurare il Sender Rewriting Scheme (SRS) su qmail
10 luglio 2023 by Roberto Puzzanghera 0 commenti
- open-spf.org
- Sito
libsrs2
- Patch per qmail di Marcelo Coelho
SPF è in conflitto con il reindirizzamento delle email. SRS è un metodo che consente di risolvere questo problema mediante la riscrittura degli indirizzi email.
Configurazione
Configurare srsfilter
in modo tale che il programma sia lanciato ogni qual volta viene ricevuto un messaggio per l'utente srs:
echo "| /var/qmail/bin/srsfilter" > /var/qmail/alias/.qmail-srs-default
Quindi creare e configurare un dominio virtuale da usare esclusivamente per l'SRS
. Si tenga presente questo dominio virtuale non deve essere creato, come siamo abituati a fare, dal programma vadddomain
, poichè esso ha il solo scopo di lanciare srsfilter
attraverso l'account fittizio alias/.qmail-srs-default che abbiamo creato prima. Notare la differente sintassi di questa linea nel file virtualdomains rispetto ai domini virtuali regolari:
echo srs.mydomain.tld:srs >> /var/qmail/control/virtualdomains
Quell'srs
dopo i due punti :
sarà usato da qmail-local
come un prefisso negli indirizzi locali associati a srs.mydomain.tld e sarà gestito da .qmail-srs-default, dal momento che nessun altro utente srs esiste. Per esempio:
2023-06-20 22:55:51.265166500 starting delivery 62: msg 32560286 to local srs-SRS0=jiQ3=CI=gmail.com=sender@srs.mydomain.tld
Fare riferimento alla "bibbia" Life With Qmail
per comprendere meglio la logica sottostante, specialmente per quanto concerne i concetti relativi a virtual domains, aliases, .qmail
e extensions addresses
.
Aggiungere srs.mydomain.tld
a rcpthosts di modo che qmail-smtpd
sappia che deve spedire localmente i messaggi per quel dominio. Non aggiungerlo al file control/locals altrimenti il file virtualdomains sarà ignorato e srsfilter
non verrà lanciato.
echo srs.mydomain.tld >> /var/qmail/control/rcpthosts
Porre srs.mydomain.tld nel file srs_domain
, di modo che srsfilter
lo utilizzi nella riscrittura degli indirizzi per tutti i domini virtuali. Creare anche il file srs_secret
. E' una stringa casuale che serve a generare e controllare gli indirizzi SRS
.
echo srs.mydomain.tld > /var/qmail/control/srs_domain echo "xxxxxxxxxxxxxxxxxxxxxx" > /var/qmail/control/srs_secrets
Queste sono le uniche impostazioni obbligatorie; vedere i link in testa a questa pagina per avere informazioni riguardanti gli altri parametri che è possibile impostare.
Naturalmente è necessario dotare, nel proprio DNS
, il dominio srs_domain
appena creato di un record MX
valido e anche di un record SPF
come il seguente:
srs.mydomain.tld. IN TXT "v=spf1 a mx -all"
Dovremmo aver già creato un analogo record SPF
anche per il dominio che compare in control/me. Se non lo si è ancora fatto, sarà bene farlo ora.
Possiamo ora riavviare qmail
e testare il nostro sistema SRS
.