Internet Service Provider con Debian: differenze tra le versioni

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>