POP-before-SMTP con Sendmail

Esistono diversi modi per supportare la tecnica POP-before-SMTP su Sendmail, che permette di usare un server SMTP remoto, che normalmente non permette il relay, dopo che ci si è autenticati via pop3 o imap sul server stesso.

Fra i vari approcci al problema tipicamente il più utilizzato è quello di usare un programma, generalmente eseguito come demone, che controlla i log di posta, identifica i tentitivi di login pop3 o Imap eseguiti con successo e scrive in un database gli indirizzi IP dei client remoti, questo database viene poi controllato da Sendmail (opportunamente configurato) per aprire il relay agli indirizzi ivi contenuti.

Abbiamo trovato particolarmente rapido ed efficace il tool log2db per convertire in un db Berkeley (db 1, 2, 3, 4) le entry di un file di log e la macro popauth fornita direttamente dal sito di Sendmail.
Ecco la procedura utilizzata:

Installare e configurare log2db
Normale procedura, verificare su http://www.bestbits.at/log2db/ se esistono versioni più recenti:
[al@giraffa al]$ wget http://www.bestbits.at/log2db/log2db-0.5.7.tar.gz
[...]
[al@giraffa al]$ tar -zxvf log2db-0.5.7.tar.gz
[...]
[al@giraffa al]$ cd log2db-0.5.7
[al@giraffa log2db-0.5.7]$ ./configure
[...]
[al@giraffa log2db-0.5.7]$ make
gcc -o log2db.o -g -O2 -Wall  -DVERSION=\"0.5.7\" -Iinclude  -c log2db.c
gcc -o regsubst.o -g -O2 -Wall  -DVERSION=\"0.5.7\" -Iinclude  -c regsubst.c
gcc -o log2db log2db.o regsubst.o   -ldb
[al@giraffa log2db-0.5.7]$ su
Password:
[root@giraffa log2db-0.5.7]# make install
/usr/bin/install -c -m 755 --strip log2db /usr/local/sbin
/usr/bin/install -c -m 755 log2db-wrapper /usr/local/sbin


A questo punto editare /usr/local/sbin/log2db-wrapper (uno script shell che invoca il comando log2db e gli passa gli argomenti corretti) per adattarlo al proprio sistema, in particolare verificare la posizione del log del server pop3/imap (su Linux di solito /var/log/maillog e commentare/scommentare le regole di pattern matching relative al proprio server di posta (di default si adatta a Qpopper). Correggere eventualmente il path del file log2db: nella versione utilizzata (0.5.7) è /usr/sbin/log2db ma il comando viene installato in /usr/loacl/sbin/log2db.
Dopo le configurazioni del caso si può lanciare il wrapper in background e aggiungerlo ad uno script di startup: /usr/local/sbin/log2db-wrapper &

Configurare Sendmail
Seconda parte del lavoro è la configurazione di Sendmail. Anche in questo caso le vie possono essere varie, ma la migliore e la più semplice è quella che passa per sendmail.mc. Aggiungere a questo file le righe:
define(`POP_B4_SMTP_TAG', `')
HACK(`popauth')

e scaricare la macro m4 popauth da http://www.sendmail.org/~ca/email/rules/popauth.m4 (evitare copia e incolla, per non rischiare di avere problemi con tab e spazi vari). Questa macro va copiata nella sottodirectory hack all'interno dei file necessari per la configurazione di Sendmail. Su RedHat questi stanno in /usr/share/sendmail-cf/ e sono forniti dal pacchetto sendmail-cf, su altri *nix possono stare altrove, ma in ogni caso se m4 non trova il file lo comunica in stderr:
[root@giraffa log2db-0.5.7]# m4 /etc/mail/sendmail.mc > /dev/null
/etc/mail/sendmail.mc:145: m4: Cannot open /usr/share/sendmail-cf/hack/popauth.m4: No such file or directory

Ecco quindi la procedura usata su una RedHat9 (dopo aver modificato /etc/mail/sendmail.mc), ovviamente sarebbe sempre opportuno eseguire una copia dei file modificati:
[root@giraffa log2db-0.5.7]# wget http://www.sendmail.org/~ca/email/rules/popauth.m4
[...]
[root@giraffa log2db-0.5.7]# mv popauth.m4 /usr/share/sendmail-cf/hack/
[root@giraffa log2db-0.5.7]# m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
[root@giraffa log2db-0.5.7]# /etc/init.d/sendmail stop
[root@giraffa log2db-0.5.7]# /etc/init.d/sendmail stop
[root@giraffa log2db-0.5.7]# /etc/init.d/sendmail start


A questo punto Sendmail è pronto per appoggiarsi ad db /etc/mail/popauth.db per aprire il relay agli indirizzi li presenti. Questo database viene costantemente aggiornato da log2db (eseguito tramite il wrapper e lasciato in background) e può essere monitorato con il comando log2db --db=/etc/mail/popauth.db --dump.
Esiste la possibilità di aggiungere a mano dei indirizzi IP: (es: log2db --db=/etc/mail/popauth.db --add 192.168.0.1), di rimuoverli  ecc.

Per verificare se tutto funziona, tenere sotto controllo il log di posta e provare ad inviare posta da un IP remoto, che normalmente non viene relayato dopo aver eseguito un login pop3 sullo stesso server.

Privacy Policy