806
contributi
mNessun oggetto della modifica |
mNessun oggetto della modifica |
||
Riga 1: | Riga 1: | ||
=Introduzione= | |||
In questo HowTo verr� Postfix-mysql, il pacchetto Debian che fornisce Postfix con il supporto per interfacciarsi con un database | |||
[http://www.mysql.com MySql]. | |||
Questo permetter� di avere un controllo dinamico e flessibile sui domini e mailbox, astraendo il tutto dagli utenti di sistema. | |||
''' | =Installazione= | ||
I pacchetti necessari sono: | |||
* '''postfix-mysql''': Il server di posta Postfix con il supporto per il database MySql; | |||
* '''courier-authmysql, courier-imap''' per la gestione del servizio IMAP, utile per il controllo della posta; | |||
* '''mysql-server''': il server MySql; | |||
* '''maildrop, mailfilter''' che andr� a sostituire procmail (che ha il difetto di non poter essere utilizzato in caso di account virtuali. | |||
Per installare questi pacchetti, quindi, � sufficiente un semplice: | |||
<pre> | |||
# apt-get install postfix-mysql courier-authmysql courier-imap mysql-server maildrop mailfilter | |||
</pre> | |||
=Configurazione= | |||
La configurazione pu� essere divisa in tre parti: nella prima verr� configurato | |||
il Server MySql, creando le tabelle e gli utenti, nella seconda verr� | |||
configurato Postifx (con degli approfondimenti sul significato dei vari | |||
file di configurazione), nella terza verr� installato PostfixAdmin, un ottimo | |||
tool per la gestione di utenti e domini. | |||
==Mysql== | |||
La configurazione di MySql � semplice, ma richiede alcuni accorgimenti per quanto rigaurda la sicurezza: l'installazione di default, infatti, prevede un utente root senza password, cosa per niente sicura. | |||
===Installazione=== | |||
L'installazione di MySql � semplice ed immediata: | |||
<pre> | |||
# apt-get install mysql-server mysql-client | |||
</pre> | |||
Il primo pacchetto � il server, mentre il secondo � il client, che verr� usato in seguito per interagire col server. | |||
===Configurazione=== | |||
Se questa � la prima installazione di MySql, � cosnigliabile modificare la password di root, che di default � impostata ad una stringa vuata. | |||
Per cambiare la password di root, � sufficiente modificare la query sottoriportata, modificando opportunamente la stringa ''nuova_password'' con la nuova password di root che si vuole usare. | |||
Se non si usano tool come PhpMyAdmin o MySqlCC, � necessario usare il comando | |||
<pre> | |||
$ mysql -u root | |||
</pre> | |||
per accedere come utente root; una volta specificata la password, inoltre, sar� necessario usare il comando | |||
<pre> | |||
$ mysql -u root -p | |||
</pre> | |||
che, a differenza dell'altro, richiede la password di root per accedere al database (altrimenti non sarebbe possibile eseguire l'accesso. | |||
La query per il cambio di password dell'utente root � la seguente: | |||
<pre> | |||
USE mysql; | |||
UPDATE user SET Password = password('nuova_password') WHERE User = 'root'); | |||
</pre> | |||
� necessario, per il proseguimento, creare un utente che sar� in grado di accedere al database per leggere i dati. In questo esempio lo chiameremo ''postfix'', ed avr� la password ''passwd''. | |||
La seguente query creer� l'utente e dar� ad esso i permessi necessari. | |||
<pre> | |||
USE mysql; | |||
INSERT INTO user (Host, User, Password) VALUES ('localhost','postfix',password('passwd')); | |||
INSERT INTO db (Host, Db, User, Select_priv) VALUES ('localhost','postfix','postfix','Y'); | |||
FLUSH PRIVILEGES; | |||
GRANT USAGE ON postfix.* TO postfix@localhost; | |||
GRANT SELECT, INSERT, DELETE, UPDATE ON postfix.* TO postfix@localhost; | |||
CREATE DATABASE postfix; | |||
</pre> | |||
==Creazione delle Tabelle== | |||
La creazione delle tabelle richiede l'esecuzione delle seguenti query: | |||
<pre> | |||
# | |||
# Table structure for table alias | |||
# | |||
USE postfix; | |||
CREATE TABLE alias ( | |||
address varchar(255) NOT NULL default '', | |||
goto text NOT NULL, | |||
domain varchar(255) NOT NULL default '', | |||
created datetime NOT NULL default '0000-00-00 00:00:00', | |||
modified datetime NOT NULL default '0000-00-00 00:00:00', | |||
active tinyint(1) NOT NULL default '1', | |||
PRIMARY KEY (address) | |||
) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Aliases'; | |||
# | |||
# Table structure for table domain | |||
# | |||
USE postfix; | |||
CREATE TABLE domain ( | |||
domain varchar(255) NOT NULL default '', | |||
description varchar(255) NOT NULL default '', | |||
aliases int(10) NOT NULL default '0', | |||
mailboxes int(10) NOT NULL default '0', | |||
maxquota int(10) NOT NULL default '0', | |||
transport varchar(255) default NULL, | |||
backupmx tinyint(1) NOT NULL default '0', | |||
created datetime NOT NULL default '0000-00-00 00:00:00', | |||
modified datetime NOT NULL default '0000-00-00 00:00:00', | |||
active tinyint(1) NOT NULL default '1', | |||
PRIMARY KEY (domain) | |||
) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Domains'; | |||
# | |||
# Table structure for table mailbox | |||
# | |||
USE postfix; | |||
CREATE TABLE mailbox ( | |||
username varchar(255) NOT NULL default '', | |||
password varchar(255) NOT NULL default '', | |||
name varchar(255) NOT NULL default '', | |||
maildir varchar(255) NOT NULL default '', | |||
quota int(10) NOT NULL default '0', | |||
domain varchar(255) NOT NULL default '', | |||
created datetime NOT NULL default '0000-00-00 00:00:00', | |||
modified datetime NOT NULL default '0000-00-00 00:00:00', | |||
active tinyint(1) NOT NULL default '1', | |||
PRIMARY KEY (username) | |||
) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Mailboxes'; | |||
</pre> | |||
Inserimento dei primi dati | |||
Con la seguente query verr� inserito un primo utente ed un dominio (ovviamente fittizzi). | |||
<pre> | |||
USE postfix; | |||
INSERT INTO domain (domain,description) VALUES ('fakedomain.lan','Dominio di Prova'); | |||
INSERT INTO alias (address,goto) VALUES ('alias@fakedomain.lan', 'user@fakedomain.lan'); | |||
INSERT INTO mailbox (username,password,name,maildir) \ | |||
VALUES ('user@fakedomain.lan',password('password') \ | |||
,'Utente di Prova','user@fakedomain.lan/'); | |||
</pre> | |||
===Possibili problemi con MySql=== | |||
Potrebbe sorgere, in seguito, un problema di dialogo tra MySql e Postfix. La cosa � dovuta al fatto che Postfix gira in un ambiente chroot, quindi non ha possibilit� di interagire con MySql tramite il socket (come avviene di default). Un modo per ovviare a questo inconveniente � di modificare il file ''/etc/mysql/my.conf'' modificando la riga | |||
<pre> | |||
skip-network | |||
</pre> | |||
in | |||
<pre> | |||
bind-address = 127.0.0.1 | |||
</pre> | |||
per fare in modo che mysql sia in ascolto solo all'IP 127.0.0.1 (e quindi non accessibile dall'esterno). | |||
Se per caso � necessario che MySql possa essere interrogato anche da altri IP, � sufficiente commentare entrambe le righe. | |||
==Postfix== | |||
La configurazione di Postfix richiede la modifica del file principare di configurazione '''/etc/postfix/main.cf''' nel modo seguente: | |||
===main.cf=== | |||
<pre> | |||
virtual_alias_maps = mysql:/usr/local/etc/postfix/mysql_virtual_alias_maps.cf | |||
# vengono assegnate all'utente che gestir� le mailbox un uid e gid statici | |||
# cos� da evitare di dover creare un utente reale per ogni utente virutale | |||
virtual_gid_maps = static:1001 | |||
virtual_uid_maps = static:1001 | |||
# questa direttiva indica dove verranno collocate le mailbox virtuali | |||
virtual_mailbox_base = /usr/local/virtual | |||
# indica con quale backend (mysql) e dove trovare la lista dei domini gestiti | |||
# dal server | |||
virtual_mailbox_domains = mysql:/usr/local/etc/postfix/mysql_virtual_domains_maps.cf | |||
virtual_mailbox_limit = 51200000 | |||
# indica in quale file di configurazione sono presenti i parametri per ottenere la | |||
# lista delle mailbox presenti nel sistema | |||
virtual_mailbox_maps = mysql:/usr/local/etc/postfix/mysql_virtual_mailbox_maps.cf | |||
virtual_minimum_uid = 1001 | |||
virtual_transport = virtual | |||
# Per la gestione delle quote delle mailbox | |||
virtual_create_maildirsize = yes | |||
virtual_mailbox_extended = yes | |||
# dove trovare i limiti di dimensione della mailbox e come comportarsi | |||
virtual_mailbox_limit_maps = mysql:/usr/local/etc/postfix/ \ | |||
mysql_virtual_mailbox_limit_maps.cf | |||
virtual_mailbox_limit_override = yes | |||
virtual_maildir_limit_message = Sorry, the user's maildir has overdrawn his diskspace \ | |||
quota, please try again later. | |||
virtual_overquota_bounce = yes | |||
# indica i domini per cui il server deve accettare la posta in ingresso | |||
relay_domains = proxy:mysql:/usr/local/etc/postfix/mysql_relay_domains_maps.cf | |||
</pre> | |||
A questo punto rimane solo da scrivere i file che verranno usati dal backend di MySql per l'autenticazione. | |||
Come � possibile vedere, i parametri sono molto intuitivi, perci� verr� commentato solo il primo file. | |||
===mysql_virtual_alias_maps.cf=== | |||
<pre> | |||
# l'utente da usare per collegarsi a mysql | |||
user = postfix | |||
# la password dell'utente | |||
password = postfix | |||
# l'host a cui collegarsi | |||
hosts = localhost | |||
# il nome del database | |||
dbname = postfix | |||
# il nome della tabella | |||
table = alias | |||
# il campo da cui attingere il dato | |||
select_field = goto | |||
# il campo su cui viene fatta la query (in questo | |||
# caso verr� cercato il record in cui il campo 'address' | |||
# corrisponde all'email del destinatario. L'indirizzo a cui | |||
# questa email dovr� essere inviato sar� indicato dal campo 'goto' | |||
where_field = address | |||
</pre> | |||
===mysql_virtual_domains_maps.cf=== | |||
Questo file conterr� i dettagli per la connessione e la consultazione della tabella dei domini. | |||
In questa tabella saranno elencati i domini per i quali postfix potr� accettare la posta. | |||
<pre> | |||
user = postfix | |||
password = postfix | |||
hosts = localhost | |||
dbname = postfix | |||
table = domain | |||
select_field = description | |||
where_field = domain | |||
# la direttiva 'additional_conditions' permette di aggiungere delle clausole | |||
# alla ricerca all'interno del database, nel caso seguente (che consiglio di non | |||
# decommentare, richiede che la il dominio non sia di backup e che sia attivo. | |||
#additional_conditions = and backupmx = '0' and active = '1' | |||
</pre> | |||
===mysql_virtual_mailbox_maps.cf=== | |||
<pre> | |||
user = postfix | |||
password = postfix | |||
hosts = localhost | |||
dbname = postfix | |||
table = mailbox | |||
select_field = maildir | |||
where_field = username | |||
#additional_conditions = and active = '1' | |||
</pre> | |||
===mysql_virtual_mailbox_limit_maps.cf=== | |||
Questo file contiene i parametri per l'interrogazione di MySql al fine di ottenere le quote disponibili degli utenti. | |||
Le quote servono per gestire la dimensione massima di ogni singola casella di posta, impedendo cos� che una sola casella occupi tutto lo spazio a disposizione. | |||
<pre> | |||
user = postfix | |||
password = postfix | |||
hosts = localhost | |||
dbname = postfix | |||
table = mailbox | |||
select_field = quota | |||
where_field = username | |||
#additional_conditions = and active = '1' | |||
</pre> | |||
===mysql_relay_domains_maps.cf=== | |||
Questo file contiene i parametri di connessione per ottenere la lista dei domini per i quali postfix fa da releay (quindi accetta la posta dall'esterno (ovviamente per gli utenti autenticati le cose saranno diverse). | |||
Questo per evitare che il nostro server venga usato come ''Open Relay'', e quindi inserito in blacklist o usato da spammer. | |||
<pre> | |||
user = postfix | |||
password = postfix | |||
hosts = localhost | |||
dbname = postfix | |||
table = domain | |||
select_field = domain | |||
where_field = domain | |||
additional_conditions = and backupmx = '1' | |||
</pre> | |||
===Applicazione delle modifiche=== | |||
La configurazione di Postfix per l'interazione con MySql si pu� ritenere conclusa. | |||
Per applicare le modifiche apportate � necessario riavviare Postfix: | |||
<pre> | |||
# /etc/init.d/postfix restart | |||
</pre> | |||
===mail.cf=== | |||
<pre> | |||
broken_sasl_auth_clients = yes | |||
smtpd_recipient_restrictions = | |||
permit_mynetworks, | |||
permit_sasl_authenticated, | |||
reject_non_fqdn_hostname, | |||
reject_non_fqdn_sender, | |||
reject_non_fqdn_recipient, | |||
reject_unauth_destination, | |||
reject_unauth_pipelining, | |||
reject_invalid_hostname, | |||
reject_rbl_client opm.blitzed.org, | |||
reject_rbl_client list.dsbl.org, | |||
reject_rbl_client bl.spamcop.net, | |||
reject_rbl_client sbl-xbl.spamhaus.org | |||
smtpd_sasl_auth_enable = yes | |||
smtpd_sasl_local_domain = $myhostname | |||
smtpd_sasl_security_options = noanonymous | |||
</pre> | |||
===snmtp.conf=== | |||
<pre> | |||
pwcheck_method: authdaemond | |||
log_level: 3 | |||
mech_list: PLAIN LOGIN | |||
authdaemond_path:/usr/local/var/spool/authdaemon/socket | |||
</pre> | |||
=Maildrop: filtraggio della posta= | |||
==Installazione== | |||
L'installazione � molto semplice: | |||
<pre> | |||
# apt-get install courier-maildrop | |||
</pre> | |||
Alcuni accorgimenti sono richiesti, per la corretta gestione della posta e delle home degli utenti: | |||
<pre> | |||
# adduser --uid 5000 vmail | |||
</pre> | |||
il numero 5000 � usato arbitrariamente, � possibile usare un qualsiasi uid, comunque maggiore di 1000, per evitare conflitti con gli altri utenti. | |||
L'aggiunta di questo utente � necessaria, in quanto sar� attraverso lui che maildrop agir�. | |||
[[Categoria:Server]][[Categoria:Networking]] |
contributi