4 069
contributi
Riga 116: | Riga 116: | ||
<pre> | <pre> | ||
# aptitude install squirrelmail | # aptitude install squirrelmail | ||
</pre> | |||
Infine installiamo il client mail Pop3 / Imap <code>mutt</code>, che funziona da console e che può essere utile per testare la nostra configurazione strada facendo | |||
<pre> | |||
# aptitude install mutt | |||
</pre> | |||
Ora che tutti i pacchetti base sono stati installati, è tempo di preparare il database di appoggio. | |||
=== Preparazione del database === | |||
==== Creazione del database ==== | |||
Come prima cosa creeremo un nuovo database MySQL, che chiameremo <code>mailserver</code>: | |||
<pre> | |||
# mysqladmin -p create mailserver | |||
</pre> | |||
Ci verrà chiesta la passord dell'utente ''root'' di MySQL e poi sarà creato il nuovo database. | |||
==== Aggiunta di un utente MySQL con privilegi limitati ==== | |||
Per ragioni di sicurezza creiamo un nuovo utente mySQL con privilegi limitati verso il database <code>mailserve</code>: | |||
<pre> | |||
# mysql -p | |||
</pre> | |||
Vedremo il prompt trasformarsi in <code>mysql></code>, la shell di MySQL, e saremo pronti per creare l'utente <code>mailuser</code> con password <code>mailuser2009</code>: | |||
<pre> | |||
mysql> GRANT SELECT ON mailserver.* | |||
TO 'mailuser'@'127.0.0.1' | |||
IDENTIFIED BY 'mailuser2009'; | |||
Query OK, 0 rows affected (0.00 sec) | |||
mysql> flush privileges; | |||
Query OK, 0 rows affected (0.00 sec) | |||
mysql> exit | |||
Bye | |||
</pre> | |||
====Creazione delle tabelle del database==== | |||
A questo punto dobbiamo creare all'interno del database le tabelle per archiviare le informazioni sui domini, sugli alias, i forwarding e le mailbox degli utenti. | |||
<br/> | |||
Connettiamoci di nuovo a MySQL e scegliamo il database <code>mailserver</code> e creiamo la prima tabella, per registrare i domini virtuali: | |||
<pre> | |||
# mysql -p mailserver | |||
</pre> | |||
<pre> | |||
mysql> | |||
CREATE TABLE `virtual_domains` ( | |||
`id` int(11) NOT NULL auto_increment, | |||
`name` varchar(50) NOT NULL, | |||
PRIMARY KEY (`id`) | |||
) ENGINE=InnoDB DEFAULT CHARSET=utf8; | |||
</pre> | |||
la tabella successiva conterrà le informazioni sugli utenti virtuali di Postfix; sarà utilizzata per autenticare le richieste POP3, SMTP, IMAP e Webmail. L'indirizzo email dell'utente sarà utilizzato anche come username per il login: | |||
<pre> | |||
mysql> | |||
CREATE TABLE `virtual_users` ( | |||
`id` int(11) NOT NULL auto_increment, | |||
`domain_id` int(11) NOT NULL, | |||
`password` varchar(32) NOT NULL, | |||
`email` varchar(100) NOT NULL, | |||
PRIMARY KEY (`id`), | |||
UNIQUE KEY `email` (`email`), | |||
FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE | |||
) ENGINE=InnoDB DEFAULT CHARSET=utf8; | |||
</pre> | |||
Il campo <code>email</code> conterrà l'indirizzo mail/username; il campo <code>password</code> conterrà un hash MD5 della password degli utenti. L'attributo <code>unique key</code> sul campo <code>email</code> ci eviterà di creare per errore due indirizzi email identici. | |||
<br/> | |||
Come ultima cosa creiamo una tabella per gli alias, necessaria per forwardare le email da un indirizzo a un altro: | |||
<pre> | |||
mysql> | |||
CREATE TABLE IF NOT EXISTS `virtual_aliases` ( | |||
`id` int(11) NOT NULL auto_increment, | |||
`domain_id` int(11) NOT NULL, | |||
`source` varchar(100) NOT NULL, | |||
`destination` varchar(100) NOT NULL, | |||
PRIMARY KEY (`id`), | |||
FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE | |||
) ENGINE=InnoDB DEFAULT CHARSET=utf8; | |||
</pre> | |||
Sono state impostate alcune ''foreign keys'': servono per collegare i record delle tabelle <code>virtual_aliases</code> e <code>virtual_users</code> con i record nella tabella <code>virtual_domains</code>. Questo ci permetterà di mantenere consistenti i dati nel database, perchè non potremo creare utenti virtuali o alias virtuali non collegati ad alcun dominio virtuale.<br/> | |||
Il suffisso <code>ON DELETE CASCADE</code> significa che rimuovendo un dominio virtuale saranno cancellate anche tutti gli utenti virtuali e gli alias collegati al dominio, evitando di lasciare nel database dei record orfani. | |||
==== Esempio di contenuto delle tabelle ==== | |||
<pre> | |||
----------------- | |||
virtual_domains | |||
----------------- | |||
id | name | |||
----------------- | |||
1 | example.com | |||
2 | foobar.org | |||
--------------------------------- | |||
virtual_users | |||
--------------------------------- | |||
id | domain_id | email | password | |||
1 | 1 | john@example.com | 14cbfb845af1f030e372b1cb9275e6dd | |||
2 | 1 | steve@example.com | a57d8c77e922bf756ed80141fc77a658 | |||
3 | 2 | kerstin@foobar.org | 5d6423c4ccddcbbdf0fcfaf9234a72d0 | |||
----------------------------------- | |||
virtual_aliases | |||
----------------------------------- | |||
id | domain_id | source | destination | |||
1 | 1 | steve@example.com | devnull@workaround.org | |||
2 | 2 | kerstin@foobar.org | kerstin42@yahoo.com | |||
3 | 2 | kerstin@foobar.org | kerstin@mycompany.com | |||
</pre> | </pre> |