Una soluzione SQL valias con sieve per qmail. Nuove patch e un plugin per Roundcube
28 agosto 2023 Roberto Puzzanghera 0 commenti
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 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
26 settembre 2023 Roberto Puzzanghera 18 commenti
- Scarica l'ultima versione della patch combinata per netqmail-1.06 v. 2023.09.26 (MD5).
- Changelog
- Readme
Changelog
- 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
5 settembre 2023 Roberto Puzzanghera 6 commenti
- Pagina originale di Inter7
- Maggiori informazioni qui
- README.vdelivermail
- Changelog
- versione vpopmail: 5.4.33
- Patch applicata v. 2023.08.27 (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
- 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. - 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 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)
Plugins per Roundcube
28 agosto 2023 Roberto Puzzanghera 7 commenti
- Repository ufficiale: http://plugins.roundcube.net/
I plugin che ho abilitato sono (al momento):
- Password, per cambiare la password utente
- qmailforward, sostituisce il plugin forward di managesieve al fine di gestire i forward di
qmail
attraversovpopmail/valias
- ManageSieve, che scrive gli script per filtrare le email in arrivo (rigetto, spostamento in una cartella specifica, etc.). Notare che per usare questo è necessario aver abilitato Dovecot managesieve.
Questo plugin contiene delle interfacce per la gestione esplicita del messaggio di "fuori ufficio" e del reindirizzamento della posta. - SpamAssassin User Prefs SQL (sauserprefs),
- che consente all'utente di caricare su database SQL le prefenze su come Spamassassin deve filtrare la sua posta, creando ad esempio una black list.
- Markasjunk, un plugin che consente di aggiungere con un click nel bottone "Marca come spam" l'indirizzo e-mail del mittente alla propria blacklist, o viceversa, o lanciare un comando come sa_learn.
- Context Menu. Aggiunge un menu di dialogo alla lista dei messaggi, attivabile con il tasto destro, che comprende tra le altre cose la lista delle cartelle, la rubrica, il marcamento come letto/non letto, cancella, rispondi e inoltra.
- NewMail_notifier. Può notificare le nuove mail in tre modi: focalizzando la finestra del browser e cambiandone l'icona, riproducendo un suono, oppure mostrando la notifica sul desktop (via webkitNotifications).
- Persistent login, che fornisce la funzionalità "Mantienimi loggato" per Roundcube.
- ZipDownload, che aggiunge una opzione per scaricare tutti gli allegati a un messaggio in un singolo file zip, quando un messaggio ha allegati multipli.
- Enigma, che fornisce il supporto per la visualizzazione e l'invio di messaggi firmati e/o criptati in formato PGP (RFC 2440) e PGP/MIME (RFC 3156).
- swipe, che aggiunge le azioni di trascinamento destra/sinistra/giù alla lista dei messaggi nei dispositivi touch (tablet/cellulari).
- Attachment reminder ricorda all'utente di allegare i file.
Altri plugin che ho usato in passato per i quali la documentazione potrebbe non essere più valida
- rcguard.Questo plugin registra i tentativi di accesso falliti e presenta una verifica reCAPTCHA dopo un certo numero di accessi falliti.
- autologon. Esegue il login da una pagina esterna (CMS)
- logout_redirect. Versione modificata per redirigere alla home page dopo il logout
- carddav. CardDav client. Può sincronizzare la rubrica con un server CardDav server come
owncloud
oSoGO
.
Bloccare gli HELO/EHLO con falso DNS
16 agosto 2023 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 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
.