Postfix per ISP

Da Guide@Debianizzati.Org.

(Differenze fra le revisioni)
(Popolamento di Mysql)
(Introduzione)
Riga 5: Riga 5:
* con un backend Mysql per la gestione dei domini, alias e account email
* con un backend Mysql per la gestione dei domini, alias e account email
* dovecot per lo smistamento delle email
* dovecot per lo smistamento delle email
-
 
-
== Domini locali e virtuali ==
 
-
Normalmente Postfix lavora con i cosiddetti ''Domini Locali'', configurati nella direttiva <code>mydestination</code> del suo file di configurazione, e con gli utenti di sistema, elencati nel file <code>/etc/passwd</code>.
 
-
<br/>
 
-
Questo comporta che ogni utente possa ricevere la posta di tutti i domini. Supponiamo di avere la direttiva:
 
-
<pre>
 
-
mydestination = example1.com, example2.com, example3.com
 
-
</pre>
 
-
Questo semplice setup fa sì che l'utente di sistema <code>johndoe</code> riceva le email indirizzate a:
 
-
<pre>
 
-
johndoe@example1.com
 
-
johndoe@example2.com
 
-
johndoe@example3.com
 
-
</pre>
 
-
Non è possibile impedire la ricezione della posta indirizzata a un singolo dominio e questo, unitamente al fatto che gestire molti utenti in questa maniera è inefficiente, rende il sistema poco pratico.
 
-
<br/><br/>
 
-
Questi problemi possono essere evitati facendo uso dei cosiddetti ''Domini Virtuali'', che a loro volta gestiranno ''utenti virtuali'' e ''alias virtuali'' di posta. Nel corso della guida vedremo come questa tecnica sarà implementata attraverso alcune direttive Postfix e con il supporto di un database MySQL.
 
-
 
-
== Preparazione del sistema ==
 
-
Controlliamo che il nostro <code>/etc/hosts</code> sia impostato correttamente:
 
-
* '''Sbagliato''':
 
-
<pre>
 
-
20.30.40.50  mailserver42 mailserver42.example.com
 
-
</pre>
 
-
* '''Corretto''':
 
-
<pre>
 
-
20.30.40.50  mailserver42.example.com mailserver42
 
-
</pre>
 
==Prerequisiti==
==Prerequisiti==

Versione delle 18:50, 6 apr 2014

Internet Service Provider con Debian Wheezy

Prerequisiti

Server email

Sconfiggere lo SPAM

Integrazione con altro software



Indice

Introduzione

In questo caso abbiamo deciso di configurare Postfix:

Prerequisiti

Per procedere è necessario avere installato mysql e apache.

Installazione

Incominciamo con l'installare il server Postfix con la sua estensione per il supporto a MySQL:

# aptitude install postfix postfix-mysql

Configurazione Mysql

L'obiettivo è avere in mysql la gestione di:

Pertanto creeremo tali tre tabelle in modo tale da avere in un sistema in funzione le seguenti tabelle e contenuti:

-----------------
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

Database e utenti

L'obiettivo è ottenere la seguente configurazione:

Creiamo il database:

mysqladmin -u root -p create mailserver

Creiamo l'utente per postfix (con permessi limitati):

# mysql -u root -p

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

Creazione Tabelle

# mysql -p mailserver

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;

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;

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;

Sono state impostate alcune foreign keys: servono per collegare i record delle tabelle virtual_aliases e virtual_users con i record nella tabella virtual_domains. 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.
Il suffisso ON DELETE CASCADE 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.

Popolamento di Mysql

Creiamo e popoliamo in mysql le tre tabelle di cui sopra.

# mysql -p mailserver
mysql> INSERT INTO virtual_domains (id, name) VALUES (1, 'example.com');
mysql> INSERT INTO virtual_users (id, domain_id, email, password)
VALUES (1, 1, 'john@example.com', MD5('summersun'));
mysql> INSERT INTO virtual_aliases (id, domain_id, source, destination)
VALUES (1, 1, 'john@example.com', 'john@example.com'),
       (2, 1, 'devnull@example.com', 'john@workaround.org');

Configurazione POSTFIX

Strumenti personali
Namespace
Varianti
Azioni
Navigazione
Risorse
Strumenti