Progetto

Generale

Profilo

EnPostfixAdminInst » Cronologia » Versione 1

Amministratore Truelite, 01-10-2009 11:52

1 1 Amministratore Truelite
[[TracNav(EnTOC)]]
2
3
== A mail server with Postfixadmin, Postfix and Dovecot on Debian Lenny ==
4
5
This HOWTO will explain the installation and the configuration of a full featured mail server using Postfix as SMTP server, Dovecot as POP/IMAP server and Postfixadmin as management interface. As Postfixadmin need a database to maintain account and domain informations we will use MySQL (but also PostgresSQL or SQLite can be used). All the following instruction refers to a Debian Lenny. 
6
7
=== Postfixadmin Installation ===
8
9
Postfixadmin is distributed as a Debian package directly by the maintainer, you just need to download the {{{.deb}}} file from [http://sourceforge.net/project/showfiles.php?group_id=191583&package_id=225300 here] because there in no repository. Before installing it you will need to install some dependencies (a web server, and because we want to use it on a standalone server also a database server). We choose Apache as web server and MySQL as database server, so you will need to install these and the other Postfixadmin dependencies the Debian way with the command:
10
{{{
11
aptitude install dbconfig-common wwwconfig-common  \
12
      libapache2-mod-php5 php5 php5-imap php5-mysql \
13
      mysql-client mysql-server postfix-mysql
14
}}}
15
(and we assume here that you can answer to the ordinary setup questions made by ''debconf'', mainly about the setup for the {{{root}}} user for MySQL).
16
17
Before installing the {{{.deb}}} file you will also need to create a dedicated database and a database user owning it for Postfixadmin; you can do this with the folowing commands:
18
{{{
19
mysqladmin -u root -p create postfixadmin
20
mysql -u root -p
21
mysql> grant create, select, insert, update, delete, lock, index, alter, drop 
22
             on postfixadmin.* to 'postfixadmin'@'localhost' 
23
             identified by 'secretandcomplexpassword';
24
mysql> flush privileges;
25
mysql> \q
26
}}}
27
then you can install the {{{.deb}}} file with:
28
{{{
29
dpkg -i postfixadmin_*.deb 
30
}}}
31
32
You have two choices for Postfixadmin, you can download the 2.2 stable version or the new 2.3 release candidate that supports more features and is almost production ready. If you use the 2.2 stable version you will need to modify the following lines of the {{{/etc/postfixadmin/config.inc.php}}} file to setup the access to the previously created database:
33
{{{
34
$CONF['configured'] = true;
35
...
36
$CONF['database_type'] = 'mysql';
37
$CONF['database_host'] = 'localhost';
38
$CONF['database_user'] = 'postfixadmin';
39
$CONF['database_password'] = 'secretandcomplexpassword';
40
$CONF['database_name'] = 'postfixadmin';
41
}}}
42
43
If instead you use the 2.3 development version, having {{{dbconfig-common}}} e {{{wwwconfig-common}}} installed,  the previous step of the database creation is managed by the package itself and it is no more needed. Also the database access configuration inside {{{/etc/postfixadmin/config.inc.php}}} is automatically done by ''debconf'', so all you will need is to give to ''debconf'' the password of the MySQL {{{root}}} user that you setup at the beginning, and then answer to the ''debconf'' questions about the password used for the Postfixadmin dedicated database user.
44
45
After this you can proceed to populate the database, this should be done using Postfixadmin itself, using the following link in your browser (you can use the same link for database upgrade or to reset the Postfixadmin superuser password):
46
{{{
47
http://MY.POSTFIXADMIN.SERVER.IP/postfixadmin/setup.php
48
}}}
49
up to 2.2 version this PHP script should be run once, and the removed after its use; with the 2.3 version when using it for the first time it would ask you for a setup password, then printing an hashed value that you will need to put inside the {{{/etc/postfixadmin/config.inc.php}}} file, modifying the following line:
50
{{{
51
$CONF['setup_password'] = 'changeme';
52
}}}
53
with this modification done you will need to re-execute the script going back to {{{http://MY.POSTFIXADMIN.SERVER.IP/postfixadmin/setup.php}}}; this time you can give the setup password to create the superuser Postfixadmin account having full access to all management functions: take note that like all Postfixadmin account this also should be given in the form of an email address (something like {{{admin@mydomain.it}}}).
54
55
To check that this initial setup has been completed successfully you can see if everything is working fine going to the {{{http://MY.POSTFIXADMIN.SERVER.IP/postfixadmin}}} address, logging in using the superuser account you just created.  After this check you can pass to the following steps; the first one is to put proper references to your main domain in the web interface; this can be done with:
56
{{{
57
cd /etc/postfixadmin/
58
mv config.inc.php config.inc.php.orig
59
sed -e 's/change-this-to-your.domain.tld/mydomain.it/g' config.inc.php.orig > config.inc.php
60
}}}
61
then you can check the file to be sure that all link on web page are correct (they will be always something like 
62
{{{http://mydomain.it}}}).
63
64
The second step is to configure the mailbox pathname, we choose to map an email account like {{{username@mydomain.it}}}) to a mailbox like {{{mydomain.it/username}}}, to do this we have to put the following configuration values in the {{{/etc/postfixadmin/config.inc.php}}} file:
65
{{{
66
$CONF['domain_path'] = 'YES';
67
$CONF['domain_in_mailbox'] = 'NO';
68
}}}
69
70
71
Then if want to enable quotas you need to modify also the following line:
72
{{{
73
$CONF['quota'] = 'YES';
74
}}}
75
and if you want to enable the {{{vacation}}} support you will need the following lines:
76
{{{
77
$CONF['vacation'] = 'YES';
78
$CONF['vacation_domain'] = 'autoreply.mydomain.it'
79
}}}
80
where {{{autoreplay.mydomain.it}}} is the domain used by Postfix to manage {{{vacation}}} email (we'll look at this in the following).  Other configuration that can be modified are the following:
81
{{{
82
$CONF['default_language'] = 'it';
83
$CONF['min_password_length'] = 6;
84
$CONF['aliases'] = '50';
85
$CONF['mailboxes'] = '50';
86
$CONF['maxquota'] = '50';
87
}}}
88
to setup the web interface language, a minimum length for the accounts password, and the default limit on number of alias, mailbox and quota given to each domain (0 means no limit).
89
90
If you install the 2.3 version there is a new simplified management for to have the same aliases on more domains; this need more database queries and a modified Postfix configuration, so is better to disable it with:
91
{{{
92
$CONF['alias_domain'] = 'NO';
93
}}}
94
95
96
=== Postfix configuration ===
97
98
We need now to tell Postfix to use Postfixadmin data for email account and domains
99
100
101
Il passo successivo è configurare Postfix per fare uso degli utenti e delle mailbox definite su PostfixAdmin, installando il pacchetto {{{postfix}}} si abbia cura di rispondere alla configurazione automatica di utilizzare il profilo per il sito internet, specificando il proprio dominio principale. Per lo stoccaggio della posta si dovrà usare una directory apposita, la cui proprietà sarà di un utente dedicato; una volta che si sia scelto un filesystem con adeguato spazio, la si potrà creare con i comandi:
102
{{{
103
mkdir /var/mail/vmail
104
useradd -d /var/mail/vmail vmail
105
chown vmail:vmail /var/mail/vmail/
106
chmod o-xr /var/mail/vmail/
107
}}}
108
109
Poi si dovrà indicare a Postfix di usare i dati mantenuti su MySQL per le mailbox virtuali, per questo anzitutto si deve installare il pacchetto {{{postfix-mysql}}}, dopo di che si dovranno aggiungere le seguenti linee di configurazione al {{{main.cf}}}:
110
{{{
111
virtual_alias_maps = proxy:mysql:/etc/postfix/mysql_virtual_alias_maps.cf
112
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql_virtual_domains_maps.cf
113
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
114
virtual_mailbox_base = /var/mail/vmail
115
virtual_minimum_uid = 106
116
virtual_transport = virtual
117
virtual_uid_maps = static:106
118
virtual_gid_maps = static:61
119
}}}
120
(dove 106 e 61 sono rispettivamente uid e gid dell'utente {{{vmail}}}).
121
122
Si dovranno inoltre creare il vari file {{{mysql_*}}} con le configurazioni per l'uso del database, il primo file è quello che consente di utilizzare gli alias definiti nel database, e deve essere qualcosa del tipo:
123
{{{
124
user = postfixadmin
125
password = passsegretaedifficile
126
hosts = localhost
127
dbname = postfixadmin
128
query = SELECT goto FROM alias WHERE address='%s' AND active = 1
129
}}}
130
il secondo consente di ottenere l'elenco dei domini mantenuti nel database, e deve essere qualcosa del tipo:
131
{{{
132
user = postfixadmin
133
password = passsegretaedifficile
134
hosts = localhost
135
dbname = postfixadmin
136
query = SELECT domain FROM domain WHERE domain='%s' and backupmx = '0' and active = '1'
137
}}}
138
il terzo consente di ottenere le directory con le mailbox che saranno create a partire dalla directory di base, e deve essere qualcosa del tipo:
139
{{{
140
user = postfixadmin
141
password = passsegretaedifficile
142
hosts = localhost
143
dbname = postfixadmin
144
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = 1
145
}}}
146
147
Se poi si vogliono gestire con [http://postfixadmin.sourceforge.net/ PostfixAdmin] anche eventuali secondari di posta, si potrà aggiungere al {{{main.cf}}} di Postfix la riga:
148
{{{
149
relay_domains = $mydestination, proxy:mysql:/etc/postfix/mysql_relay_domains_maps.cf
150
}}}
151
dove in {{{mysql_relay_domains_maps.cf}}} dovrà essere qualcosa del tipo:
152
{{{
153
user = postfixadmin
154
password = passsegretaedifficile
155
hosts = localhost
156
dbname = postfixadmin
157
query = SELECT domain FROM domain WHERE domain='%s' and backupmx = '1' and active = '1'
158
}}}
159
160
=== Uso di vacation ===
161
162
Se si è scelto di usare {{{vacation}}} la configurazione diventa leggermente più complessa, anzitutto si deve creare un utente apposito per la gestione dei delle risposte automatiche, questo lo si può fare con i seguenti comandi che assicurano che l'utente abbia i minimi privilegi:
163
{{{
164
groupadd -g 65501 vacation
165
useradd -g 65501 -u 65501 -c Vacation -s /sbin/nologin -d /nonexistent vacation
166
}}}
167
dopo di che si dovrà creare una directory ad accesso esclusivo di questo utente dove saranno mantenuti anche i suoi file temporanei, questo si fa con i comandi:
168
{{{
169
mkdir /var/spool/vacation
170
chown -R vacation.vacation /var/spool/vacation
171
chmod o-xr /var/spool/vacation 
172
}}}
173
infine si dovrà copiare lo script perl fornito con [http://postfixadmin.sourceforge.net/ PostfixAdmin] nella suddetta directory e renderlo eseguibile:
174
{{{
175
cd /usr/share/doc/postfixadmin/examples/VIRTUAL_VACATION/
176
zcat vacation.pl.gz > /var/spool/vacation/vacation.pl
177
chmod 700 /var/spool/vacation/vacation.pl
178
}}}
179
per farlo funzionare sono però necessari una serie di moduli per il perl, che si dovranno installare con:
180
{{{
181
aptitude install libemail-valid-perl libmime-encwords-perl libmime-perl \
182
         libmail-sender-perl liblog-log4perl-perl
183
}}}
184
inoltre si dovranno modificare le prime righe dello script dove sono impostate le credenziali di accesso al database, con qualcosa del genere:
185
{{{
186
our $db_type = 'mysql';
187
our $db_host = 'localhost';
188
our $db_username = 'postfixadmin';
189
our $db_password = 'passsegretaedifficile';
190
our $db_name     = 'postfixadmin';
191
192
our $vacation_domain = 'autoreply.miodominio.it';
193
}}}
194
195
Occorre poi eseguire una configurazione ulteriore di Postfix, anzitutto occorre definire un nuovo tipo di trasporto ad uso di vacation, aggiungendo le righe seguenti a {{{/etc/postfix/master.cf}}}:
196
{{{
197
vacation    unix  -       n       n       -       -       pipe
198
  flags=Rq user=vacation argv=/var/spool/vacation/vacation.pl -f ${sender} -- ${recipient}
199
}}}
200
dopo di che si dovrà utilizzarlo per il trasporto delle email indirizzate ad {{{autoreply.miodominio.it}}}, definendo dentro {{{/etc/postfix/transport}}}:
201
{{{
202
autoreply.miodominio.it       vacation:
203
}}}
204
ed infine aggiungere a {{{/etc/postfix/main.cf}}}:
205
{{{
206
transport_maps = hash:/etc/postfix/transport
207
}}}
208
fatto questo si dovrà fare usare a Postfix la nuova configurazione con:
209
{{{
210
postmap /etc/postfix/transport
211
postfix reload
212
}}}
213
214
215
=== Configurare Dovecot per Postfixadmin ===
216
217
Per l'accesso alla posta mantenuta da Postfixadmin è necessario un server IMAP, vedremo allora come configurare Dovecot che fornisce comunque anche l'accesso con POP, ed il tutto sia in chiaro che con cifratura sotto SSL.  Si inizi anzitutto con l'installare le varie componenti di Dovecot, questo si fa al solito con:
218
{{{
219
aptitude install dovecot-imapd dovecot-pop3d
220
}}}
221
la configurazione di base dovrà essere modificata anzitutto per il fatto che la posta deve essere trovate in delle maildir a partire dalla directory {{{/var/mail/vmail}}} ed acceduta con l'utente  {{{vmail}}} creato in precedenza, nel nostro caso questo comporta la modifica delle seguenti righe de file di configurazione principale che è {{{/etc/dovecot/dovecot.conf}}}:
222
{{{
223
mail_location = maildir:/var/mail/vmail/%d/%n
224
mail_privileged_group = vmail
225
first_valid_uid = 106
226
}}}
227
(dove 106 è l'uid dell'utente {{{vmail}}}). 
228
229
Occorre poi disabilitare l'autenticazione sugli utenti locali (via PAM) ed utilizzare i dati di MySQL, questo comporta la sostituzione delle direttive {{{userdb}}} e {{{passdb}}} che fan riferimento a PAM con le seguenti che indicano il file da usare per i parametri di accesso al database:
230
{{{
231
  passdb sql {
232
    args = /etc/dovecot/dovecot-mysql.conf
233
  }
234
  userdb sql {
235
    args = /etc/dovecot/dovecot-mysql.conf
236
  }
237
}}}
238
ed infine dovremo inserire nel file {{{/etc/dovecot/dovecot-mysql.conf}}} le necessarie configurazioni per l'accesso al database ed ai relativi dati, con un contenuto del tipo di:
239
{{{
240
driver = mysql
241
connect = host=localhost dbname=postfixadmin user=postfixadmin password=passsegretaedifficile client_flags=0
242
default_pass_scheme = MD5
243
user_query = SELECT maildir, 106 AS uid, 61 AS gid FROM mailbox WHERE username = '%u'
244
password_query = SELECT password FROM mailbox WHERE username = '%u' AND active = '1' 
245
}}}
246
(dove 106 e 61 sono uid e gid dell'utente {{{vmail}}}).
247