Configurazione di Postfix con autenticazione Sasl su Debian
Installazione postfix
- Innanzitutto definire le varialibili:
export POST_HOSTNAME=fire.mendrisio.croalliance.com export POST_DOMAIN=croalliance.com
- Poi procedere all'installazione:
apt-get install --purge postfix-tls postfix
NB: Scegliere NO CONFIGURATION
- Fermare immediatamente postfix:
/etc/init.d/postfix stop
Installazione SASL per autenticazione SMTP
- Installazione:
apt-get install libsasl2-modules sasl2-bin
- Togliere il commento da "START=YES" ed aggiungere la righe con PARAMS e PWDIR in /etc/defaults/saslauthd:
# This needs to be uncommented before saslauthd will be run automatically START=yes # You must specify the authentication mechanisms you wish to use. # This defaults to "pam" for PAM support, but may also include # "shadow" or "sasldb", like this: # MECHANISMS="pam shadow" MECHANISMS="pam" PWDIR="/var/spool/postfix/var/run/saslauthd" PARAMS="-m /var/spool/postfix/var/run/saslauthd"
- Creare la cartella per il chroot di postfix e settarne i diritti in dpkg-statoverride:
mkdir -p /var/spool/postfix/var/run/saslauthd dpkg-statoverride --add root sasl 710 /var/spool/postfix/var/run/saslauthd
- Creare il file di configurazione per postfix:
echo "pwcheck_method: saslauthd mech_list: PLAIN LOGIN" > /etc/postfix/sasl/smtpd.conf
- Avviare saslauthd:
/etc/init.d/saslauthd start
- Verificare che funzioni:
ps waux | grep saslauthd
Il risultato deve essere simile a:
root 3018 0.0 0.7 6500 1536 ? Ss 21:24 0:00 /usr/sbin/saslauthd -a pam .....
- lanciare rcconf ed assicurarsi che saslauthd parta all'avvio.
ATTENZIONE: ricordarsi di aggiungere postfix al gruppo sasl prima di testare il tutto !!!! (Vedi di seguito)
Configurazione postfix
- Copiare il file di partenza:
cp /usr/share/postfix/main.cf.debian /etc/postfix/main.cf
- Abilitare il delivery locale in formato Maildir e creare la cartella Maildir in /etc/skel.
NB: maildirmake fa parte dei pacchetti Maildrop e Courier-IMAP. Non fa parte di Postfix. Quindi installare prima Maildrop e Courier-IMAP per poter usere il comando maildirmake
A installazione completa dei due nuovi pacchetti:
postconf -e home_mailbox=Maildir/ maildirmake /etc/skel/Maildir
- Settare il nome che apparirà nel greeting e che possibilmente corrisponderà al cname del record mx del mailserver e il nome presentato negli header:
postconf -e myhostname=$POST_HOSTNAME postconf -e myorigin=\$myhostname
- In caso il server sia dietro una NAT box, occorre specificare l'ip pubblico a.b.c.d.della nat box, soprattutto se il server è anche mx secondario per un dominio, al fine di evitare loop:
postconf -e proxy_interfaces=a.b.c.d
- Abilitare il supporto della alias map 'a la sendmail':
postconf -e alias_maps=hash:/etc/aliases postconf -e alias_database=hash:/etc/aliases
- Settare in /etc/aliases l'eventuale alias locale per root, e poi compilare la tabella:
newaliases
- Impostare le reti di fiducia (che potranno fare relay senza autenticazione); Nel caso ci siano dei mail server interni che usano il mail server senza autenticazione, aggiungerli come a.b.c.d/32. Normalmente aggiungere solo localnet, da usare con l'antivirus:
postconf -e mynetworks=127.0.0.0/8
- Definire i domini per cui il mail server è la destinazione finale:
postconf -e mydestination=$POST_DOMAIN,$POST_HOSTNAME,$(hostname -f),$(hostname),localhost
- Abilitare l'autenticazione obbligatoria per i client smtp basata su sasl 2:
postconf -e smtpd_recipient_restrictions=permit_sasl_authenticated,check_relay_domains postconf -e smtpd_sasl_security_options=noanonymous postconf -e smtpd_sasl_auth_enable=yes postconf -e smtpd_sasl_security_options=noanonymous postconf -e smtpd_sasl_application_name=smtpd postconf -e smtpd_sasl_local_domain='' postconf -e broken_sasl_auth_clients=yes
- Aggiungere l'utente postfix al gruppo sasl:
usermod -G sasl postfix
- Riavviare postfix:
/etc/init.d/postfix stop;/etc/init.d/postfix start
- Per testare l'SMTP-AUTH, assicurarsi di aver installato libmime-per:
apt-get install libmime-perl
- Generare la stringa di autenticazione, sostituendo username e password coi valori di un account valido:
perl -MMIME::Base64 -e 'print encode_base64("username\0username\0password");'
Il cui risultato è una stringa similare a:
dXNlcm5hbWUAdXNlcm5hbWUAcGFzc3dvcmQ=
- Testare ora la corretta autenticazione uasndo la stringa generata:
# telnet localhost 25 Trying 127.0.0.1... Connected to localhost.localdomain. Escape character is '^]'. 220 fire.all-logistics.com ESMTP Postfix (Debian/GNU) ehlo p 250-fire.all-logistics.com 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-AUTH LOGIN PLAIN 250-AUTH=LOGIN PLAIN 250 8BITMIME auth plain dGVzdHVzZXIAdGVzdHVzZXIAbGFwYXNzYQ== 235 Authentication successful quit 221 Bye Connection closed by foreign host.
- Abilitare l'antirelay e l'rbl:
--- /etc/postfix/main.cf # Relay control: # Allow all mail from localhost, autenticated sessions smtpd_recipient_restrictions = permit_mynetworks permit_sasl_authenticated reject_rbl_client relays.ordb.org reject_rbl_client dnsbl.njabl.org reject_rbl_client sbl.spamhaus.org reject_rbl_client cbl.abuseat.org reject_unauth_destination myhostname=gateway.fqdn ---
o manualmente tramite "vi" o con il comando:
postconf -e smtpd_recipient_restrictions=permit_mynetworks,\ permit_sasl_authenticated,\ reject_rbl_client\ relays.ordb.org,\ reject_rbl_client\ dnsbl.njabl.org,\ reject_rbl_client\ sbl.spamhaus.org\ reject_rbl_client\ cbl.abuseat.org,\ reject_unauth_destination
Si possono aggiungere anche: - reject_rbl_client proxies.relays.monkeys.com - reject_rbl_client opm.blitzed.org - reject_rbl_client blackholes.wirehub.net - reject_rbl_client list.dsbl.org
- Abilitare il RELAY solo per posta To: dominio.com
--- /etc/postfix/main.cf relay_domains = dominio.com ---
o manualmente tramite "vi" o con il comando:
postconf -e relay_domains=$POST_DOMAIN
- Testare l'invio della posta:
A. Da dominio a dominio
#telnet mailserver 25 ... helo vittorio ... mail from: mittente@dominio.dom ... rcpt to: destinatario@dominio.dom .... data ... subject: soggetto email testo messaggio testo messaggio testo messaggio . quit #
B. Da esterno a dominio (usare account libero.it o simili)
C. Da dominio a esterno (con autenticazione)
#telnet mailserver 25 Connected to localhost.localdomain. Escape character is '^]'. 220 fire.all-logistics.com ESMTP Postfix (Debian/GNU) ehlo miamacchina 250-fire.all-logistics.com 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-AUTH LOGIN PLAIN 250-AUTH=LOGIN PLAIN 250 8BITMIME auth plain dGVzdHVzZXIAdGVzdHVzZXIAbGFwYXNzYQ== 235 Authentication successful mail from: mittente@dominio.dom ... rcpt to: destinatario@dominioesterno.dom .... data ... subject: soggetto email testo messaggio testo messaggio testo messaggio . quit #