Internet Service Provider con Debian: differenze tra le versioni

Riga 226: Riga 226:
2 | 2 | kerstin@foobar.org | kerstin42@yahoo.com
2 | 2 | kerstin@foobar.org | kerstin42@yahoo.com
3 | 2 | kerstin@foobar.org | kerstin@mycompany.com
3 | 2 | kerstin@foobar.org | kerstin@mycompany.com
</pre>
=== Mappatura di Postfix verso MySQL ===
Il database è ora pronto per essere riempito con informazioni sugli account utente, ma dobbiamo ancora istruire Postfix affinché possa recuperare le informazioni archiviate nel database.
====virtual_mailbox_domains====
Incominciamo con il dire a Postfix quali domini virtuali stiamo gestendo. Per fare in modo che Postfix utilizzi MySQL per definire una mappatura abbiamo bisogno di un file di configurazione, quindi per prima cosa ne creeremo uno:
<pre>
# nano/etc/postfix/mysql-virtual-mailbox-domains.cf
</pre>
con contenuto pari al seguente:
<pre>
user = mailuser
password = mailuser2009
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 1 FROM virtual_domains WHERE name='%s'
</pre>
Adesso dobbiamo fare in modo che Postfix utilizzi questa mappatura:
<pre>
# postconf -e virtual_mailbox_domains=mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
</pre>
Il comando <code>postconf -e</code> aggiunge la riga specificata al file di configurazione di Postfix <code>/etc/postfix/main.cf</code> e attiva istantaneamente la nuova impostazione, senza richiedere il riavvio di Postfix.
<br/>
Da adesso Postfix cercherà le informazioni sui domini virtuali all'interno del database.
<br/>
Verifichiamo che tutto funzioni, creando il nostro primo dominio virtuale:
<pre>
# mysql -p mailserver
mysql> INSERT INTO virtual_domains (id, name) VALUES (1, 'example.com');
exit
</pre>
e interrogando Postfix:
<pre>
# postmap -q example.com mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
</pre>
Dovremmo ottenere come risultato <code>1</code>.
<br/><br/>
'''Note'''
* Se otteniamo l'errore <code>postmap: warning: connect to mysql server 127.0.0.1: Access denied...</code> significa che abbiamo dei problemi con l'account <code>mailuser</code> che utilizziamo per la connessione a MySQL. Occorre verificare i privilegi di questo utente in MySQL.
* Se otteniamo l'errore <code>postmap: warning: connect to mysql server 127.0.0.1: Can't connect to MySQL server on '127.0.0.1'</code> significa che il demone MySQL non è in funzione o che non è in ascolto su 127.0.0.1. Occorre verificare la configurazione aprendo il file <code>/etc/mysql/my.cnf</code>
====virtual_mailbox_maps====
Ora dobbiamo definire la mappatura tra l'indirizzo email dell'utente e il percorso sull'hard disk della corrispondente mailbox dell'utente.
<br/>
Poichè la consegna delle email sarà compito del demone Dovecot, a Postfix occorre solo controllare se un certo indirizzo email è valido.
<br/>
Incominciamo con il creare il primo record nella tabella <code>virtual_users</code>:
<pre>
mysql>
INSERT INTO virtual_users (id, domain_id, email, password)
VALUES (1, 1, 'john@example.com', MD5('summersun'));
</pre>
Il percorso della mailbox sarà fisso, nella forma <code>/var/vmail/$DOMAIN/$USER</code> e non è perciò importante archiviare o recuperare questa informazione dal database.
<br/>
Creiamo il file di configurazione per questa mappatura:
<pre>
# nano /etc/postfix/mysql-virtual-mailbox-maps.cf
</pre>
e diamogli come contenuto:
<pre>
user = mailuser
password = mailuser2009
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 1 FROM virtual_users WHERE email='%s'
</pre>
Istruiamo Postfix a tenere in conto la nuova mappatura:
<pre>
# postconf -e virtual_mailbox_maps=mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
</pre>
e verifichiamo che tutto funzioni correttamente:
<pre>
# postmap -q john@example.com mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
</pre>
Come prima, dovremmo ottenere come risultato <code>1</code>.
====virtual_alias_maps====
La mappatura <code>virtual_alias_maps</code> è usata per forwardare le email da un indirizzo ad un altro.
<br/>
Aggiungiamo come prima cosa alcuni forward al nostro database:
<pre>
mysql>
INSERT INTO virtual_aliases (id, domain_id, source, destination)
VALUES (1, 1, 'john@example.com', 'john@example.com'),
      (2, 1, 'john@example.com', 'devnull@workaround.org');
</pre>
Quindi creiamo un altro file di configurazione:
<pre>
# nano /etc/postfix/mysql-virtual-alias-maps.cf
</pre>
con contenuto:
<pre>
user = mailuser
password = mailuser2009
hosts = 127.0.0.1
dbname = mailserver
query = SELECT destination FROM virtual_aliases WHERE source='%s'
e verifichiamo che tutto funzioni correttamente:
<pre>
# postmap -q john@example.com mysql:/etc/postfix/mysql-virtual-alias-maps.cf
</pre>
Dovremmo ottenere i due indirizzi di forward <code>john@example.com,devnull@workaround.org</code>
==== 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.
==== Protezione dei file di configurazione ====
Poichè la password di connessione al database è archiviata nei file di configurazione appena creati, facciamo in modo che solo l'utente ''root'' possa leggerli:
<pre>
# chgrp postfix /etc/postfix/mysql-*.cf
# chmod u=rw,g=r,o= /etc/postfix/mysql-*.cf
</pre>
</pre>