Patch di qmail

Changelog

Il changelog completo è all'interno della patch stessa.

  • 2016-12-19
    -Several new patches and improvements added (thanks to Luca Franceschini)
    More info here http://notes.sagredo.eu/node/178
    -qregex patch
    -brtlimit patch
    -validrcptto patch
    -rbl patch (updates qmail-dnsbl patch)
    -reject-relay-test patch
    -added DISABLETLS environment variable, useful if you want to disable TLS on a desired port
    -added FORCEAUTHMAILFROM environment variable to REQUIRE that authenticated user and 'mail from' are identical
    -fixed little bug in 'mail from' address handling (patch by Andre Opperman at http://qmail.cr.yp.narkive.com/kBry6GJl/bug-in-qmail-smtpd-c-addrparse-function)
    -added SMTPAUTHMETHOD, SMTPAUTHUSER and SMTP_AUTH_USER env variables for external plugins
    -qlog patch
    -reject null senders patch
    -qmail-taps-extended (updates qmail-tap)
  • 2016-12-02
    -fixed BUG in qmail-remote.c: in case of remote server who doesn't allow EHLO the response for an alternative HELO was checked twice, making the connection to die. (Thanks to Luca Franceschini)
    Patch applied: http://notes.sagredo.eu/sites/notes.sagredo.eu/files/qmail/patches/fix_sagredo_remotehelo.patch
  • 2016-09-19
    -qmail-tls patch updated to v. 20160918
      * bug: qmail-remote accepting any dNSName, without checking that is matches (E. Surovegin)
      * bug: documentation regarding RSA and DH keys (K. Peter, G. A. Bofill)
  • 2016-05-15
    force-tls patch improved (a big thanks to Marcel Telka). Now qmail-smtpd avoids to write the auth verb if the
    the STARTTLS command was not sent by the client

Ho creato un pacchetto con le ultime versioni di alcune patch di uso comune. Queste le patch incluse nel pacchetto:

[Vedi i dettagli sulla patch applicata qui]

Altre patch:

Sei invitato a dare un'occhiata alla prossima pagina di questa guida, che si propone di presetare alcuni test di funzionamento di queste patch alla fine.

NB: prima di tutto, è necessario che il dominio del mail server, indicato in /var/qmail/control/me, abbia un valido record MX, altrimenti si otterrà un errore quando si dovrà usare l'alias ~alias/qmail-log (cliccare qui per maggiori informazioni).

Installazione di libdomainkeys

Questa libreria è un prerequisito della patch per DKIM di Manvendra Bhangui, che è inclusa nella mia patch combinata. E' obbligatoria l'installazione, altrimenti la compilazione va in errore.

cd /usr/local/src
wget http://notes.sagredo.eu/sites/notes.sagredo.eu/files/qmail/tar/libdomainkeys-0.69.tar.gz
tar xzf libdomainkeys-0.69.tar.gz
wget http://notes.sagredo.eu/sites/notes.sagredo.eu/files/qmail/patches/libdomainkeys-0.69.diff
ln -s libdomainkeys-0.69 libdomainkeys
cd libdomainkeys
chown -R root.root .
patch < ../libdomainkeys-0.69.diff
make
cp libdomainkeys.a /usr/lib

Installazione della libreria libsrs2

Questa libreria è un prerequisito della patch SRS, che è inclusa nella mia patch combinata. E' obbligatoria l'installazione, altrimenti la compilazione andrà in errore.

wget http://www.libsrs2.org/srs/libsrs2-1.0.18.tar.gz
tar xzf libsrs2-1.0.18.tar.gz
cd libsrs2-1.0.18
./configure
make
make install
ldconfig
cd ../

Accertiamoci che la libreria libsrs2 sia stata effettivamente linkata, altrimenti andremo incontro a un crash e riavvio infinito di qmail-send con una quantità crescente di processi avviati che porterà in breve a un auto-DoS:

> ldconfig -p|grep libsrs2
        libsrs2.so.0 (libc6,x86-64) => /usr/local/lib/libsrs2.so.0
        libsrs2.so (libc6,x86-64) => /usr/local/lib/libsrs2.so

Nel caso si fosse optato per l'installazione delle libsrs2 con un pacchetto fornito dalla propria distribuzione Linux, è possibile che le librerie si trovino in /usr/lib e non su /usr/local/lib. In tal caso controllate l'effettiva esistenza del file /usr/local/include/srs2.h; se non lo trovate modificate manualmente il file srs.c presente nella cartella sorgente di netqmail in questo modo:

#include </usr/local/include/srs2.h>
#include </usr/include/srs2.h>

Applicare la patch

wget http://notes.sagredo.eu/sites/notes.sagredo.eu/files/qmail/patches/roberto-netqmail-1.06.patch-latest.gz
cd netqmail-1.06
gunzip -c ../roberto-netqmail-1.06.patch-latest.gz | patch

Configurazione di chkuser

La patch combinata che hai scaricato e applicato ha chkuser abilitato e configurato come segue; chkuser eseguirà il controllo dell'esistenza del destinatario (recipient verification) e il MAV (Mail From: Address Verification).

E' possibile personalizzare la configurazione modificando ilo file chkuser_settings.h prima della compilazione di qmail. CHKUSER_STARTING_VARIABLE deve essere decommentato per far si che chkuser sia abilitato.

#define CHKUSER_STARTING_VARIABLE "CHKUSER_START"

Decommentando questo si abilita il controllo della validità della sintassi nel nome utente e nel dominio dell'indirizzo del mittente. Con questo abilitato verranno respinti i client fasulli e anche quelli senza alcun dominio nell'envelope (come <nome> ad esempio).

#define CHKUSER_SENDER_FORMAT

Decommentando questo si abilita il controllo dell'esistenza del record MX nel DNS del dominio del destinatario

#define CHKUSER_RCPT_MX

Decommentando questo si abilita il controllo del record MX per l'indirizzo del mittente

#define CHKUSER_SENDER_MX

Questo ammette la presenza dei caratteri "#" e "+" nell'indirizzo email del mittente. E' usato dai prodotti SRS (Sender Rewriting Scheme).

Per quanto rigusarda la mia MTA, questo ha risolto un messaggio di rigetto del tipo "invalid sender address format" innescato da un indirizzo email di una mailing list gestita da mailman.

#define CHKUSER_ALLOW_SENDER_SRS

Configurazione della patch force-tls

Le impostazioni predefinite della pacth prevedono che l'autenticazione sia proibita se non si presenta il comando STARTTLS. Se invece si vuole consentire le connessione non c4riptate con TLS, è sufficiente porre

export FORCETLS=0

nel proprio run file (vedere dopo). Valori diversi da 0 o nessuna dichiarazione forzano il TLS prima dell'atutenticazione.

Configurazione di qmail-auth

Come impostazione predefinita l'autenticazione viene eseguita in modalità LOGIN o PLAIN. Sei invitato a leggere il file README.auth per ulteriori dettagli riguuardanti l'utilizzo della variabile di ambiente SMTPAUTH, specialmente sei interessato a usare CRAM-MD5.

Ricompilazione di qmail

La patch BIG-TODO che è stata applicata può richiedere che la coda venga rigenerata, la prima volta che la si usa. Pertanto è bene essere consapevoli che tutti i messaggi nella coda verranno distrutti quando questa viene cancellata prima dell'installazione di qmail.

Per sapere se vi sono messaggi in coda digitare questo comando:

> qmailctl stat

/service/qmail-send: up (pid 18127) 6 seconds
/service/qmail-send/log: up (pid 18134) 6 seconds
/service/qmail-smtpd: up (pid 18126) 6 seconds
/service/qmail-smtpd/log: up (pid 18135) 6 seconds
/service/qmail-submission: up (pid 18131) 6 seconds
/service/qmail-submission/log: up (pid 18132) 6 seconds
/service/vpopmaild: up (pid 18129) 6 seconds
/service/vpopmaild/log: up (pid 18128) 6 seconds
messages in queue: 0
messages in queue but not yet preprocessed: 0

Comunque, se non si deve gestire un server di grandi dimensioni, si può sempre usare la versione della mia patch combinata che non contiene la patch BIG-EXT-TODO.

In definitiva è necessario lanciare questo comando la prima volta che si installa la patch con la BIG-TODO:

qmailctl stop
rm -r /var/qmail/queue

Ora ricompiliamo qmail:

make

Se qmail è in esecuzione arrestare i servizi prima dell'installazione:

qmailctl stop

Infine installare qmail e poi avviarlo:

make setup check
qmailctl start

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.

La patch in dettaglio

qmail-authentication

Fornisce il supporto per l'autenticazione cram-md5, login e plain via qmail-smtpd (porta 587) e qmail-remote.

Aggiunta la variabile di ambiente FORCEAUTHMAILFROM per richiedere che l'utente autenticato e il campo Froma siano identici.

Aggiunte le variabili di ambiente SMTPAUTHMETHOD, SMTPAUTHUSER e SMTP_AUTH_USER per i plugin esterni (vedere http://qmail-spp.sourceforge.net/doc/)

qmail-tls

  • Autore: Frederik Vermeulen
  • Info: http://inoa.net/qmail-tls/
  • Versione 20180919
  • Aggiunta la variabile di ambiente DISABLETLS, per disabilitare eventualmente il TLS su una data porta

Fornisce il supporto per le connessioni criptate e autenticate con TLS tra MTAs e tra MUA e MTA. Ho leggermente modificato il file update_tmprsadh per dare i file .pem all'utente vpopmail, sotto il quale gira qmail-smtpd.
Il problema di sicurezza "POODLE" è stato sistemato in quest'ultima versione.

Potresti essere interessato a dare un'occhiata alla pagina che concerne i test qui.

force-tls

  • Autore: Marcel Telka
  • Scarica
  • Versione: 2016.05.15

consente di optare per una connessione SMTP che richieda obbilgatoriamente il comando STARTTLS prima dell'autenticazione.
Nel caso non si desideri forzare il comando STARTTLS è necessario dichiarare FORCETLS=0 nel proprio run file.

chkuser

esegue la verifica dell'esistenza della casella del destinatario e la verifica della validità del campo Mail From: (Mail From: Address Verification, MAV).

Avendo abilitato il MAV in chkuser ho deciso di non includere la patch qregex. I commenti sono graditi su questo :-).

Potresti essere interessato a dare un'occhiata alla pagina che concerne il test di chkuser.

qmail-queue-custom-error.patch

Fa sì che simscan e qmail-dkim possano restituire un messaggio appropriato ogni volta che viene rifiutata la consegna del messaggio. Simscan lo rigetta con il nome del virus o lo spam-score; qmail-dkim con il messaggio di fallimento della verifica della firma.

qmail-SPF

  • Autore: Christophe Saout. La patch è stata modificata da Manvendra Bhangui per ottenere una compatibilità rispetto agli indirizzi IPv6 IPv4-mapped.
  • Info: http://www.saout.de/misc/spf/
  • Versione rc5

Controlla le email in arrivo a livello SMTP, aggiunge una riga Received-SPF nell'header del messaggio e opzionalmente blocca i trasferimenti indesiderati.

qmail-SRS

implementa il Sender Rewriting Scheme risolvendo il problema dell'errore nella verifica dell'SPF dopo un forwarding di una mail. Per abilitare l'SRS leggere bene le indicazioni sulla configurazione nel link qui sopra.

Oversize DNS

Mette qmail in condizioni di gestire pacchetti DNS di grandi dimensioni.

Reread concurrency patch

rilegge i file control/concurrencylocal e control/concurrencyremote quando qmail-send riceve un segnale HUP.

Big Concurrency patch

Imposta il limite spawn (conf-spawn) sopra il valore 255.

Big Concurrency fix

Risolve l'errore di compilazione in caso conf-spawn venga impostato al di sopra del valore 509.

maildir++ patch

  • Autore: Bill Shupp
  • Versione: 20050125
  • Scarica la patch originale (copia locale)

agiunge il supporto maildirquota a qmail-pop3d e qmail-local.

Better qmail-smtpd Logging patch

facilita la diagnostica di qmail-smtpd registrando ciò che fa e le sue decisioni (visibile con una linea che inizia con qmail-smtp:). E' utile, per esempio, per trovare gli IP fasulli con un helo irregolare dove tipicamente qmail-smtpd non scrive nulla nel log.

Greeting delay patch

  • Autore: John Simpson (?)
  • Scarica da qui
  • Maggiori informazioni qui

aggiunge un ritardo definibile dall'utente dopo che il client ha iniziato la sessione SMTP, prima che qmail risponsa con un "220 ESMTP". qmail è ora in grado di rigettare connessioni da clients che cercano di inviare comandi prima del greeting del nostro server. Il ritardo del greeting è settabile con la variabile di ambiente SMTPD_GREETDELAY (era  GREETDELAY nella patch originale). Un valore di SMTPD_GREETDELAY=”30” ritarderà la risposta di qmail-smtpd di 30 secondi.

DKIM e SURBL patch

aggiunge il supporto per la firma e la verifica della firma DKIM a qmail sia a livello qmail-smtpd che qmail-remote/local. Aggiunge il supporto SURBL a qmail

EXT-TODO patch

risolve un problema noto come la "silly qmail (queue) syndrome".

BIG-TODO patch

  fa sì che qmail usi un sistema di hashing nella cartella todo simile a quello usato nel resto della coda.

qmail-inject-null-sender patch

evita che qmail-inject riscriva il null sender ("<>"), ponendo rimendio al problema del rigetto del messaggio di vacation generato da una regola sieve.

doublebounce-trim patch

evita che i doublebounces vengano smistati all casella predefinita con il conseguente intasamento della coda, nel caso si ponga la prima riga bianca nel file control/doublebounceto.

esmtp-size patch

fa in modo che qmail-smtpd respinga i messaggi se sono troppo grandi, in accordo con i datyabytes accettabili (file control/databytes) prima che il messaggio sia ricevuto.

qmail-taps-extended

consente a qmail di fare una copia di ogni email che viene gestita dal sistema, sia in base al nome a dominio che al nome utente. E' possibile archiviare solo i messaggi da o verso certi indirizzi email.

qmail-remote CRLF patch

consente a qmail-remote di gestire correttamente il CR (carriage return ovvero il ritorno a capo), inviando sempre le interruzioni di linea come CRLF (\r\n) evitando così di avere doppi CR come solitamente fa qmail-remote. Questo evita dei problemi di intestazioni difettose in certi casi (mi è capitato con mesaggi forwardati con regole sieve).

outgoingip patch

  • Author: Andy Repton (adjusted by Sergio Gelato)
  • Original patch: http://www.qmail.org/outgoingip.patch
  • Robbie Walker ha rilasciato una patch che corregge la chiamata a timeoutconn() di qmail-qmqpc.c, dato hce la patch originale ne modificava la function signature

By default all outgoing emails are sent through the first IP address on the interface. In case of a multiple IP server this patch makes qmail send outgoing emails with the IP eventually stored in control/outgoingip. The ehlo domain is NOT modified by this patch.

qmail-bounce patch

limita le dimensioni dei bounce. Il limite di default è 50000 bytes, ma si può creare un file in crontrol/bouncemaxbytes al fine di personalizzare questo numero.

qmail-smtpd pid, qp log patch

fa in modo che qmail-smtpd scriva una riga simile a questa nel log:

@4000000039b89c95026a89b4 mail recv: pid 8155 from <name@domain.xy> qp 8157

Il pid consente di unire il messaggio con a dato proccesso di tcpserver mentre il qp consente di trovare una delivery particolare delivery.

any-to-cname

evita che qmail ottenga grandi quantità di dati DNS di cui non abbiamo interesse e che possono causare un overflow nel nostro response buffer.

qmail-rfc2821 patch

rende qmail compatibile con l'rfc2821

smtpd-502-to-500 patch

  • Autore: Jonathan de Boyne Pollard
  • Patch originale: local copy
  • Maggiori informazioni qui

rende qmail compatibile con l'rfc2821

qmail-dnsbl patch

  • Autore: Fabio Busatto
  • Scarica: http://qmail-dnsbl.sourceforge.net/ (local copy)
  • Patch modificata da Luca Franceschini per aggiungere il supporto a whitelists, TXT e A queries. E' possibile configurare il codice di errore 451 o 553 e il messaggio di errore stesso.
  • Maggiori informazioni qui

consente di rigettare lo spam e i virus guardando l'indirizzo ip del mittente. Ho aggiunto una riga di codice per far s' che qmail-smtpd registri il motivo del rigetto insieme all'envelope nel log file.

qmail-moreipme patch

risolve un problema causato da un MX o da un'altra direttiva di routing che fa sì che qmail si connetta a sè stesso senza che lo stesso qmail se ne renda conto, risparmiando tempo CPU.

qmail-hide-ip-headers

  • Autore: Alex Nee
  • Scarica da qui

Nasconde il proprio indirizzo ip privato o pubblico negli email Header quando il messaggio viene spedito come Relay Client.

qmail-date-localtime patch

  • Autore: John Saunders
  • Scarica da qui

fa in modo che i vari programmi di qmail generino le date nel timezone locale.

qmail-liberal-lf patch

fa sì che qmail-smtpd accetti i messaggi che sono terminati con un singolo \n invece che con la sequenza \r\n come da protocollo.

qmail-maxrcpt

consente di impostare il limite massimo dei destinatari di un messaggio attraverso il file control/maxrcpt. L'RFC 2821 sezione 4.5.3.1 dice che una MTA DEVE consentire almeno 100 destinatari per ogni messaggio, e questo è uno dei trucchi preferiti dagli spammers.
Ho leggermente modificato la patch anche per consentire il log del suo intervento.

queue-extra

  • Scarica da qui

Ho modificato il file extra.h per registrare nel log di qmail-send il Message-ID come spiegato qui in fondo alla pagina. E' stato necessario crearee anche un alias ~alias/.qmail-log per memorizzare il comando awk con l'espressione regolare che... matcha il Message-ID.
Grazie a Simone per questo e anche per altri suggerimenti.

E' necessario che il FQDN (il dominio che compare nel file /var/log/qmail/control/me) abbia un record MX valido.

Il log di qmail-send ora appare in questo modo:

2014-11-05 12:00:47.930384500 status: local 1/10 remote 1/20
2014-11-05 12:00:47.952694500 delivery 11: success: Received:_(qmail_17359_ invoked_by_uid_89);_5_Nov_2014_12:00:47_+0100/Received:_(qmail_17359_invoked_by_uid_89);_5_Nov_2014_12:00:47_+0100/Received:_from_unknown_(HELO_mx.test.net)_(1.2.3.4)/Received:_from_unknown_(HELO_mx.test.net)_(1.2.3.4)/__by_0_with_ESMTPS_(DHE-RSA-AES256-GCM-SHA384_encrypted);_5_Nov_2014_12:00:47_+0100/Received:_(qmail_17349_invoked_by_uid_89);_5_Nov_2014_12:00:47_+0100/Received:_(qmail_17349_invoked_by_uid_89);_5_Nov_2014_12:00:47_+0100/Received:_from_unknown_(HELO_mail-wg0-f47.google.com)_(74.125.82.47)/Received:_from_unknown_(HELO_mail-wg0-f47.google.com)_(74.125.82.47)/__by_0_with_ESMTPS_(RC4-SHA_encrypted);_5_Nov_2014_12:00:46_+0100/Received:_by_mail-wg0-f47.google.com_with_SMTP_id_a1so597995wgh.6/Received:_by_mail-wg0-f47.google.com_with_SMTP_id_a1so597995wgh.6/Received:_by_mail-wg0-f47.google.com_with_SMTP_id_a1so597995wgh.6/________for_<info@test.net>;_Wed,_05_Nov_2014_03:00:48_-0800_(PST)/X-Received:_by_10.180.23.98_with_SMTP_id_l2mr4797959wif.51.1415185247978;_Wed,/X-Received:_by_10.180.23.98_with_SMTP_id_l2mr4797959wif.51.1415185247978;_Wed,/Received:_by_10.27.203.139_with_HTTP;_Wed,_5_Nov_2014_03:00:47_-0800_(PST)/Received:_by_10.27.203.139_with_HTTP;_Wed,_5_Nov_2014_03:00:47_-0800_(PST)/Date:_Wed,_5_Nov_2014_12:00:47_+0100/Message-ID:_<CAD=Xf-WdCFwED9DiMqRj=bUR5RsRA9mPah1OXgA-tB1ffk-3sw@mail.gmail.com>/Message-ID:_<CAD=Xf-WdCFwED9DiMqRj=bUR5RsRA9mPah1OXgA-tB1ffk-3sw@mail.gmail.com>/Subject:_dasda/From:_xxx_<someone@@gmail.com>/From:_xxx_<someone@gmail.com>/To:_info@test.net/---/did_0+0+2/ 2014-11-05 12:00:47.952726500 status: local 0/10 remote 1/20 2014-11-05 12:00:48.326103500 delivery 12: success: 1.2.3.4_accepted_message./Remote_host_said:_250_ok_1415185248_qp_17366/

qmail-eMPF patch

eMPF segue un insieme di reole definite dall'amministratore attraverso il file control/policy che descrivono chi può messaggiare chi. Con esse è possibile separare le attività relative alle mail dei vari utenti, al fine di garantiredelle misure di sicurezza; ad esempio in caso di un server che è stato violato da esterni è possibile inibire l'invio all'esterno della posta.

La patch aggiunge delle righe come queste al log di qmail-smtpd:

2015-03-30 18:05:54.442596500 policy_check: remote someone@somewhere.xy -> local user@yourdomain.xy (UNAUTHENTICATED SENDER)
2015-03-30 18:05:54.442612500 policy_check: policy allows transmission

qregex

adds the ability to match address evelopes via Regular Expressions (REs) in the qmail-smtpd process.

Added new control file 'badhelonorelay', control/badmailto renamed control/badrcptto (Tx Luca Franceschini).

brtlimit

adds control/brtlimit and BRTLIMIT variable to limit max invalid recipient errors before closing the connection.

validrcptto

It works in conjunction with chkuser with both cdb and mysql accounts. Look here for details

reject-relay-test

It gets qmail to reject relay probes generated by so-called anti-spammers. These relay probes have '!', '%' and '@' in the local (username) part of the address.

bug fixed in smtpd.c addrparse function

Fixed a little bug in 'mail from' address handling (see the patch by Andre Opperman at http://qmail.cr.yp.narkive.com/kBry6GJl/bug-in-qmail-smtpd-c-addrparse-function)

qlog patch

  • Author: Luca Franceschini

smtpd logging with fixed format (note: 'size' field is evaluated only when control/databytes or DATABYTES are set. An entry 'qlogenvelope' is generated after accepting or rejecting every recipients in the envelope phase, example:

​qlogenvelope: result=rejected code=553 reason=rblreject detail=b.barracudacentral.org helo=test.machine.it mailfrom=test@domain.com rcptto=test@pippo.com relay=no rcpthosts=yes size= authuser= authtype= encrypted= sslverified=no localip=15.15.15.15 localport=25 remoteip=14.143.30.83 remoteport=57502 remotehost= qp= id=39156
​qlogenvelope: result=accepted code=250 reason=rcptto detail=chkuser helo=test mailfrom=test@test.com rcptto=test@pippo.com relay=no rcpthosts=yes size= authuser= authtype= encrypted= sslverified=no localip=15.15.15.15 localport=25 remoteip=12.181.218.154 remoteport=57742 remotehost= qp= pid=37357

an entry 'qlogreceived' is generated after DATA (message accepted o rejected by qmail-queue)

qlogreceived: result=accepted code=250 reason=queueaccept detail= helo=test.machine.it mailfrom=test@domain.com rcptto=test@gmail.com relay=yes rcpthosts= size= authuser=pippo@pippo.com,pluto@pippo.com authtype=login encrypted=tls sslverified=no localip=192.168.200.162 localport=25 remoteip=192.168.200.162 remoteport=52602 remotehost= qp=30982 pid=30980

reject null senders patch

  • by Luca Franceschini

useful in special cases if you temporarily need to reject the null sender (although breaks RFC compatibility). You just need to put 1 (actually any number different from 0) in your control/rejectnullsenders to reject the null sender with 421 error message.

Commenti

Ciao ho due problemi, il primo è che gmail non riesce a scaricare dal pop3 sulla 110 riceve connection timeout, se mi loggo da telnet mi autentica senza alcun problema o timeout. Il secondo problema è che l'smtp auth è abilitato il certificato c'è, ma se proprio a inviare mail da outlook non ci riesco mi richiede sempre la password di invio come se fosse sbagliata. Uso vpopmai con maildir ma non autenticazione a db quella normale... sapresti darmi delle indicazioni? Prima di procedere al patch dell'smtp auth, qmail funzionava correttamente...

Ciao, stai usando la mia patch combinata?

E' un po' poco per capire che succede.. se stai usando la mia patch e seguendo la mia guida mandami i log di pop3 e di smtp usando il contatto in alto e ci sentiamo via mail

Ciao Roberto,

Se provo a scriverti dal menu in alto "contact", quando provo a inviare crasha e non riesco a spedirti nulla. Se mi scrivi direttamente all'email facciamo prima!

Nel mio caso però c'è qualcosa che non va..
La mia esigenza è abilitare l'auth sulla stessa porta 25 senza aprirne un'altra. Inoltre utilizzo vpopmail con autenticazione classica e non da db, in pratica ho tutta la struttura su files.

Ho installato la tua patch combinata e sia TLS che l'AUTH vengono abilitati.
Ma ho il seguente problema il POP3 dall'esterno va sempre in timeout (da localhost no) e l'autenticazione provandola da outlook e da telnet non va a buon fine, temo che chkuser si aspetti che le mail esistano su db quando in realtà non ci sono, xkè sono su file.

Inoltre non posso più ricevere posta xkè l'smtp respinge le mail siccome per lui non esistono e quindi le manda indietro con "delivery failed".

Purtroppo dai logs in /var/log/qmail/smtpd e /var/log/qmail/pop3
non emergono errori, nessun denied o auth failed.

Non so come fornirti maggiori dettagli

Grazie!

Ciao Roberto,
complimenti per la guida, utilizzo qmail da anni con meno patch ma era ora che qualcuno ne facesse una combinata. Complimenti ancora per l'assiduo lavoro!!
Mi trovo in difficoltà con l'autenticazione remota: non riesco bene a capire il funzionamento di authsenders. Ho provato anche a vedere sul sito www.fehcom.de ma nulla da fare.
Ecco in sintesi il problema:
In passato utilizzato una patch chiamata qmail-remote-auth reperibile dal sito tomclegg.net. Alla fine modificavi smtproutes aggiungendo username e password.
L'ho sempre utilizzata molto anche per smistare il traffico verso vari server.
Il mio /var/qmail/control/smtproutes poteva essere così
libero.it:smtp.libero.it xx@libero.it password
alice.it:out.alice.it xx@alice.it password
:smtp.miodominio.net xx@miodominio.net password

Mi sembra di capire che authsenders, al contrario di smtproutes, smista le mail in base al mittente, e non al dominio di destinazione. Confermi? Come potrei risolvere il problema?

Ciao Carlo,

sull'uso di authsenders trovi qualche informazione sul man di qmail-remote:

       authsenders
            Authenticated sender.  For  each  sender  included  in  authsenders:  sender:relay:port|user|password
            qmail-remote  will  try  SMTP Authentication of type CRAM-MD5, LOGIN, or PLAIN with the provided user
            name user and password password (the  authentication  information)  and  eventually  relay  the  mail
            through relay on port port.  The use of relay and port follows the same rules as for smtproutes Note:
            In case sender is empty, qmail-remote will try to deliver each outgoing mail SMTP  authenticated.  If
            the authentication information is missing, the mail is delivered none-authenticated.  authsenders can
            be constructed as follows:

               @example.com|generic|passwd
               .subdomain.example.com|other|otherpw
               mail@example.com|test|testpass
               info@example.com:smtp.example.com:26|other|otherpw
               :mailrelay.example.com:587|e=mc2|testpass

dovendoti autenticare in remoto devi specificare l'utente/password, poi il destinatario non è necessario specificarlo, nel senso che spedisci a chi ti pare, una volta superata l'autenticazione

ciao :)

Si infatti ma il problema è proprio quello... io vorrei autenticarmi presso un server esterno in base al dominio di destinazione e non in base al mittente. Mi rifaccio al funzionamento di smtproutes (nella versione originale di qmail), nel quale tu indichi il dominio di destinazione e il server al quale desideri inoltrare le mail.

Come posso fare?

Ho visto che esistono delle patch che fanno questo ma non posso applicarle sopra la tua patch...

http://tomclegg.net/qmail/#qmail-remote-auth (già la uso ma non supporta cram-md5 e tls)

http://www.ingorohloff.de/soft/qmail.html (farebbe esattamente al caso mio ma non riesco ad applicarla sopra la tua patch)

Di nuovo grazie mille per la cortesia e la pazienza....

Carlo

a me pare che authsender funzioni proprio come desideri tu.

For  each  sender  included  in  authsenders:  sender:relay:port|user|password qmail-remote  will  try  SMTP Authentication..

Quindi l'autenticazione non è fatta in base al sender, ma rispetto a user|password relativi ad un dato sender. Hai provato a usare ad esempio

@dominiosender.xyz|userid|password

in questo caso le mail spedite da carlo@dominiosender.xyz a chicchessia saranno inviate dal server remoto previa autenticazione, no?

fammi sapere, ciao :)

Mi sa che non ci siamo capiti bene, faccio un esempio che dovrebbe chiarire il tutto.

Immaginiamo per ipotesi, di lavorare su qmail senza patch. Mando una mail da carlo@miodominio.net a test@libero.it.

In smtproutes ho:
libero.it:smtp.libero.it
:smtp.mioprovider.net

qmail-remote riconosce il destinatario della mail e invierà la mail a smtp.libero.it. Qualsiasi mail diversa da "libero.it" verrà inviata tramite smtp.mioprovider.net

Ora immaginiamo di spedire la stessa mail (da carlo@miodominio.net a test@libero.it) con qmail in versione patchata by Roberto.
smtproutes non lo posso usare perché non mi fa autenticare. Creerò quindi il file authsenders come segue:

libero.it:smtp.libero.it
:smtp.mioprovider.net

qmail-remote patchato analizzerà authsenders. Il mittente è carlo@miodominio.net quindi la mail verrà inviata tramite smtp.mioprovider.net.

Spero di essere riuscito a spiegarmi meglio...
Come posso raggiungere lo stesso risultato dopo aver applicato le patch?

Se hai un minuto per guardare la patch di Tom Clegg vedrai che modifica direttamente il funzionamento di smtproutes senza variare il principio di funzionamento.

Ancora una volta grazie mille per la collaborazione,
Carlo

libero.it:smtp.libero.it
:smtp.mioprovider.net

qmail-remote patchato analizzerà authsenders. Il mittente è carlo@miodominio.net quindi la mail verrà inviata tramite smtp.mioprovider.net.

cosi è chiaro che non va perchè non ti sei autenticato.

Prima di tutto, mi pare di capire dal man che il dominio debba essere preceduto dalla @. Io farei così:

@libero.it:smtp.libero.it|userid|password

in tal modo le mail inviate da un account @libero.it vengono instradate verso il relay remoto smtp.libero.it dove ci si identifica come 'userid' e 'password'

Stasera non ho molto tempo di guardare quella patch, ma appena posso ci do uno sguardo. Aggiungerla alla mia combined non è semplice, prima dovresti levare qmail-auth e magari anche qmail-tls e force-tls.. però vedi se funziona così.. non avrebbe senso un authsenders che non rendesse questo.. deve funzionare cosi

Nella risposta precedente mi ero dimenticato di mettere le credenziali di autenticazione.... nel mio server c'erano.
Infatti il motivo per cui ti ho scritto non è per segnalare un malfunzionamento ma per chiederti un consiglio.

La mia riflessione nasce appunto dalle differenze di funzionamento tra authsenders-smtproutes e dalla necessità di dover utilizzare il primo perché il secondo non mi permette l'autenticazione.
Giustamente authsenders analizza il mittente della mail e in base ad esso decide con quale server inviare, con relative credenziali di accesso.
Smtproutes invece analizza il destinatario e successivamente lo invia tramite il server specificato... unica pecca non potergli dare delle credenziali di autenticazione.

La patch che ti segnalo io invece, fa esattamente quello che mi servirebbe ma dovrei rinunciare alla tua patch per via dei conflitti.. poi comunque non supporta il cram-md5... sarebbe magari più indicata questa
http://www.ingorohloff.de/soft/qmail.html
ma mi rendo conto di volere la botte piena e la moglie ubriaca e sappiamo tutti che non è possibile.

Ad ogni modo se tu riuscissi nella magia sarei l'uomo più contento del mondo, e probabilmente non solo io visto il numero di patch presenti sull'argomento.
Ringraziandoti ancora per la disponibilità ti saluto.

Carlo

ora ho capito cosa vuoi dire...

rilasciare una variante della mia patch combinata? non ne ho il tempo.. come puoi ben capire è già molto impegntivo curarne una :) se proprio sei interessato potrei farlo come consulenza.

ti consiglio però di provare a cassare la parte qmail-remote della qmail-auth di e. hoffmann e inserire quell'altra. Toglierla tutta non mi pare una buona idea perchè non ti consentiebbe di usare l'autenticazione su qmail.smtpd

ciao :)

Carlo, leggendo il README della nuova patch qmail-auth di e. hoffmann http://www.fehcom.de/qmail/smtpauth.html mi è tornata in mente la tua richiesta. Sembra che vi sia il supporto per l'autenticazione in base al dominio di destinazione in qmail-remote.

Io però non so se/quando avrò il tempo di aggiornare la mia patch combinata..

***

EDIT: la giornata di pasqua era così noiosa.. così ho aggiornato la mia patch combinata :)

Ciao Roberto,

ottimo lavoro, ma come mai non hai incluso la patch qregex? Usi un altro modo per avere le funzionalità di badmailfrom badmailto badrdns etc, ?

In realtà la qregex è presente nella mia combined, perchè prerequisito della dkim e se non ricordo male anche della qmail-tap. La dkim patch però l'ha talmente devastata che credo non funzioni più secondo lo scopo originario. Se ci vuoi giocare e vedere se funziona mi farebbe piacere saperlo cmq

Detto questo riesco benissimo a farne a meno settando a dovere chkuser, che controlla la correttezza sia del sender che del rcpt, anche se non fa il check del reverse dns.