Postfix per ISP: differenze tra le versioni

Riga 148: Riga 148:
''(ossia come configurare virtual_domains, virtual_users e virtual_alias)''
''(ossia come configurare virtual_domains, virtual_users e virtual_alias)''


Supponendo di avere già popolato il database come da esempio precedente [[Postfix_per_ISP#Popolamento_di_Mysql]], configuriamo la mappatura di postfix verso mysql e testiamola.
Supponendo di avere già popolato il database come da [[Postfix_per_ISP#Popolamento_di_Mysql| esempio precedente]], configuriamo la mappatura di postfix verso mysql e testiamola.
 
Creiamo i seguenti file:
; /etc/postfix/mysql-virtual-mailbox-domains.cf
<pre>user = mailuser
password = mailuser
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 1 FROM virtual_domains WHERE name='%s'</pre>
; /etc/postfix/mysql-virtual-mailbox-maps.cf
<pre>user = mailuser
password = mailuser
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 1 FROM virtual_users WHERE email='%s'</pre>
; /etc/postfix/mysql-virtual-alias-maps.cf
<pre>user = mailuser
password = mailuser
hosts = 127.0.0.1
dbname = mailserver
query = SELECT destination FROM virtual_aliases WHERE source='%s'</pre>
 
 
{{Box|NOTA|Potrebbe venirvi la tentazione di scrivere "localhost" al posto di "127.0.0.1" nel file precedente. Non va fatto!! "localhost" farà sì che Postfix cerchi il file socket MySQL, non trovandolo perchè gira in una chroot hail. Al contrario "127.0.0.1" utilizzerà una connessione TCP sulla porta 3306, che risponderà anche se Postfix funziona all'interno di una gabbia chroot}}
 
Configuriamo postfix affinché utilizzi i parametri appena specificati per collegarsi a mysql:
<pre># postconf -e virtual_mailbox_domains=mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
# postconf -e virtual_mailbox_maps=mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
# postconf -e virtual_alias_maps=mysql:/etc/postfix/mysql-virtual-alias-maps.cf</pre>
 
Effettuiamo un test della configurazione:
<pre># postmap -q example.com mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
# postmap -q john@example.com mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
# postmap -q john@example.com mysql:/etc/postfix/mysql-virtual-alias-maps.cf</pre>
 
=== email-to-email mapping===
Prima di configurare Postfix per la mappatura '''virtual_alias_maps''' c'è ancora una cosa di cui dobbiamo preoccuparci. C'è uno particolare tipo di email forward chiamato ''catchall alias''. Il ''catchall alias'' cattura tutte le email di un dominio per le quali non è definito un account.
<br/>
Creiamo l'ultimo file di mappatura necessario:
<pre>
# nano /etc/postfix/mysql-email2email.cf
</pre>
e diamogli come contenuto:
<pre>
user = mailuser
password = mailuser2009
hosts = 127.0.0.1
dbname = mailserver
query = SELECT email FROM virtual_users WHERE email='%s'
</pre>
Verifichiamo che gli utenti con un account valido non vedano le loro email trattate come ''catchall alias'':
<pre>
# postmap -q john@example.com mysql:/etc/postfix/mysql-email2email.cf
</pre>
Il risultato dovrebbe essere lo stesso indirizzo email: <code>john@example.com</code>
<br/>
A questo punto possiamo istruire Postfix a utilizzare le ultime mappature definite:
<pre>
# postconf -e virtual_alias_maps=mysql:/etc/postfix/mysql-virtual-alias-maps.cf,mysql:/etc/postfix/mysql-email2email.cf
</pre>
Perfetto!
<br/>
Tutte le mappature sono state definite e il database è pronto per essere riempito con domini e utenti.
 
=== Proibire l'invio di email con mittenti arbitrari ===
Nella configurazione impostata fino ad adesso ogni utente autenticato sul server SMTP può spedire email da qualsiasi indirizzo. Pur essendo una configurazione perfettamente funzionante, le impostazioni necessitano a mio avviso di qualche miglioramento.<br/>
Iniziamo con l'aggiungere le seguenti linee al file:
<pre>
# nano /etc/postfix/main.cf
</pre>
<pre>
smtpd_sender_login_maps = mysql:/etc/postfix/mysql-sender-login-maps.cf
smtpd_sender_restrictions = reject_unknown_sender_domain,reject_non_fqdn_sender,reject_sender_login_mismatch
</pre>
Quindi creiamo un nuovo file:
<pre>
# nano /etc/postfix/mysql-sender-login-maps.cf
</pre>
con contenuto:
<pre>
user = mailuser
password = mailuser2009
hosts = 127.0.0.1
dbname = mailserver
query = ( SELECT GROUP_CONCAT( a.`destination` ) FROM `virtual_aliases` a, `virtual_domains` d WHERE a.`source`='%s' AND a.`domain_id`=d.`id` AND d.`name`='%d' ) UNION ( SELECT `email` FROM `virtual_users` WHERE `email`='%s' )
</pre>
A questo punto possiamo testare la configurazione aggiunta:
<pre>
# postmap -q email@domian.tld mysql:/etc/postfix/mysql-sender-login-maps.cf
</pre>
Dovremmo ottenere come risultato il nostro indirizzo email o i nostri alias, a seconda di come abbiamo configurato l'utente.<br/>
Da questo momento in poi ogni utente potrà inviare email utilzzando il proprio indirizzo email o uno dei propri alias come mittente e non potrà più inviare email con mittenti arbitrari.
909

contributi