Postfix per ISP: differenze tra le versioni

Vai alla navigazione Vai alla ricerca
da cancellare
(da cancellare)
 
(6 versioni intermedie di un altro utente non mostrate)
Riga 1: Riga 1:
{{Template:Internet Service Provider con Wheezy}}
{{Da cancellare|Abbandonata, non completa, e la parte trattata è duplicato di [[Internet_Service_Provider_con_Debian]]}}{{Template:Internet Service Provider con Wheezy}}


=Introduzione=
=Introduzione=
Riga 135: Riga 135:


== Preparazione del sistema ==
== Preparazione del sistema ==
Controlliamo che il nostro <code>/etc/hosts</code> sia impostato correttamente:
Controlliamo che il nostro <code>/etc/hosts</code> sia impostato correttamente, ossia che permetta la risoluzione corretta del proprio IP dell'interfaccia di rete tramite il file ''/etc/hosts'' e non un DNS esterno:
* '''Sbagliato''':
* '''Sbagliato''':
<pre>
<pre>
Riga 146: Riga 146:


==Mappatura di Postfix verso MySQL==
==Mappatura di Postfix verso MySQL==
''(ossia come configurare virtual_domains, virtual_users e virtual_alias)''
''(ossia come configurare i virtual domains)''


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.
===virtual_domains, virtual_users e virtual_alias===
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. Fatto questo avremo postfix configurato con i virtual domains e gestito nella configurazione via mysql.
 
Creiamo i seguenti file:
; /etc/postfix/mysql-virtual-mailbox-domains.cf
<pre>user = mailuser
password = mailuser2009
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 = mailuser2009
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 = mailuser2009
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>
====Test====
Effettuiamo su una shell il seguente test per verificare la correttezza 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>
Se tutto è andato a buon fine, con i comandi di cui sopra, otterremo:
<pre>1
1
john@example.com</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.
3 581

contributi

Menu di navigazione