1
0
forked from BgLUG/bglug.it
bglug.it/content/posts/2008-08-05-postfix-nirvana-parte-ii.md

604 lines
25 KiB
Markdown
Raw Normal View History

2024-04-09 20:10:09 +00:00
---
title: Postfix nirvana Parte II
author: jimmi
type: post
date: 2008-08-05T11:27:46+00:00
url: /2008/08/05/postfix-nirvana-parte-ii/
categories:
- Documentazione
- Software
tags:
- amavis
- clamav
- dovecot
- fetchmail
- horde
- mailserver
- postfix
- postfixadmin
- postgrey
- spamassassin
---
2024-04-16 19:40:19 +00:00
_Ecco la seconda parte della guida al buon server mail. Come preannunciato nella <a title="BgLUG" href="http://bglug.it/2008/07/24/postfix-nirvana-parte-i/" target="_blank">prima parte</a>, qui parleremo dei programmi accessori che permettono di creare facilmente mailbox virtuali e di rendere la posta (e non solo) disponibile all'utente tramite una interfaccia web avanzata. Voglio anche qui ringraziare Manuel per il decisivo contributo alla realizzazione della guida._
2024-04-09 20:10:09 +00:00
<!--more-->
### Sommario
* [Postfixadmin][1]
* [Postfix: domini e mailbox virtuali][2]
* [Dovecot][3]
* [Dovecot LDA][4]
* [Horde][5]
* [Fetchmail e Gmail server relay][6]
### <a name="htoc1">Postfixadmin</a>
2024-04-16 19:40:19 +00:00
È giunto il momento di installare Postfixadmin, che permette di gestire domini virtuali, mailboxes e alias tramite una interfaccia web costruita in PHP. Postifxadmin è pacchettizzato in Debian Etch, quindi l'installazione dei file avviene con un semplice "`apt-get install postfixadmin`".
2024-04-09 20:10:09 +00:00
2024-04-16 19:40:19 +00:00
L'operazione successiva è la creazione del database e dell'utente amministratore. È possibile farlo semplicemente con <a title="phpMyAdmin" href="http://www.phpmyadmin.net" target="_blank">phpMyAdmin</a>, oppure direttamente tramite il prompt di MySQL con i comandi:
2024-04-09 20:10:09 +00:00
2024-04-16 19:40:19 +00:00
<pre>CREATE DATABASE postfix;
CREATE USER 'postfix'@'localhost' IDENTIFIED BY 'choose_a_password';
2024-04-09 20:10:09 +00:00
GRANT ALL PRIVILEGES ON `postfix` . * TO 'postfix'@'localhost';</pre>
2024-04-16 19:40:19 +00:00
sostituendo gli opportuni valori, ed inserendo poi gli stessi valori nel file di configurazione `/etc/postfixadmin/config.inc.php`. Nello stesso file, oltre ai dati del database, è necessario cambiare il valore di `$CONF['configured']` da _false_ a _true_ per poter inizializzare l'applicazione. Io preferisco avere le varie maidir degli utenti suddivise in directory separate per dominio, per cui imposto:
2024-04-09 20:10:09 +00:00
<pre>$CONF['domain_path'] = 'YES';</pre>
2024-04-16 19:40:19 +00:00
A questo punto imposto un VirtualHost sul server web che punti alla directory del programma, nel caso di Debian `/usr/share/postfixadmin/`, dirigo il browser su `http://INDIRIZZO_DI_POSTFIXADMIN/setup.php` e, dopo la creazione delle tabelle, mi appare una lista di 'OK' e il form per la creazione dell'utente amministratore. Lo inserisco e posso eseguire il login.
2024-04-09 20:10:09 +00:00
2024-04-16 19:40:19 +00:00
Postfixadmin offre all'utente la possibilità di impostare gli inoltri automatici dei messaggi e un autorisponditore (Vacation). Mentre il primo è già abilitato, per abilitare il secondo dobbiamo effettuare alcune modifiche.
2024-04-09 20:10:09 +00:00
Creo innanzitutto un utente ed un gruppo _vacation_, aggiungendo a `/etc/passwd` la riga:
<pre>vacation:*:65501:65501::0:0:Virtual Vacation:/nonexistent:/usr/sbin/nologin</pre>
ed a /etc/group la riga:
<pre>vacation:*:65501:</pre>
2024-04-16 19:40:19 +00:00
Quindi creo una directory di base per l'autorisponditore, vi copio il file `vacation.pl`, che in Debian si trova in `/usr/share/doc/postfixadmin/VIRTUAL_VACATION/`, e cambio i permessi di tutto:
2024-04-09 20:10:09 +00:00
2024-04-16 19:40:19 +00:00
<pre># mkdir /var/spool/vacation
# cd /usr/share/doc/postfixadmin/VIRTUAL_VACATION/
# cp vacation.pl /var/spool/vacation/
2024-04-09 20:10:09 +00:00
# chown vacation:vacation -R /var/spool/vacation</pre>
Nel file `vacation.pl` devo inserire gli estremi del database modificando le righe:
2024-04-16 19:40:19 +00:00
<pre>my $db_type = 'mysql';
my $db_username = 'postfix';
my $db_password = 'password';
2024-04-09 20:10:09 +00:00
my $db_name = 'postfix';</pre>
ed infine abilitare il modulo modificando nel file
`/etc/postfixadmin/config.inc.php` le righe:
2024-04-16 19:40:19 +00:00
<pre>$CONF['vacation'] = 'YES';
2024-04-09 20:10:09 +00:00
$CONF['vacation_domain'] = 'vacation.nomedominio';</pre>
2024-04-16 19:40:19 +00:00
Per far funzionare l'autorisponditore sono necessari tre moduli Perl. Due di questi li posso installare con:
2024-04-09 20:10:09 +00:00
<pre>apt-get install libemail-valid-perl libmail-sendmail-perl</pre>
mentre il terzo non è incluso nei repository di _Debian Etch_. È però possibile scaricare il pachetto dai repository di _Debian Lenny_ (testing) ed installarlo senza incontrare problemi di dipendenze con:
2024-04-16 19:40:19 +00:00
<pre># wget http://ftp.it.debian.org/debian/pool/main/libm/libmime-encwords-perl/libmime-encwords-perl_1.010.101-1_all.deb
2024-04-09 20:10:09 +00:00
# dpkg -i libmime-encwords-perl_1.010.101-1_all.deb</pre>
In ultimo dobbiamo definire il servizio _vacation_ e fare in modo che i messaggi indirizzari al domino _vacation.nomedominio_ vi siano girati. Per fare questo aggiungo al file `/etc/postfix/master.cf` le righe:
2024-04-16 19:40:19 +00:00
<pre>vacation unix - n n - - pipe
2024-04-09 20:10:09 +00:00
flags=Rq user=vacation argv=/var/spool/vacation/vacation.pl -f ${sender} -- ${recipient}</pre>
creo poi un file `/etc/postfix/transport` contenente la riga:
<pre>vacation.nomedominio vacation:</pre>
compilo il database con:
<pre>#postmap /etc/postfix/transport</pre>
ed aggiungo a `/etc/postfix/main.cf` la riga:
<pre>transport_maps = hash:/etc/postfix/transport</pre>
Il tutto è ora pronto a funzionare, ma per utilizzarlo devo modificare la configurazione di Postfix.
### <a name="htoc2">Postfix: domini e mailbox virtuali</a>
Per fare in modo che Postfix veda i domini virtuali creati da Postfixadmin devo aggiungere le seguenti righe in `/etc/postfix/main.cf`:
2024-04-16 19:40:19 +00:00
<pre>virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_mailbox_base = /home/mail
virtual_uid_maps = static:6000
2024-04-09 20:10:09 +00:00
virtual_gid_maps = static:6000</pre>
2024-04-16 19:40:19 +00:00
che indicano rispettivamente gli indirizzi delle mappe del database, l'indirizzo della directory dove verrannno create le mailbox virtuali, e l'utente e gruppo proprietari delle mailbox. L'utente e il gruppo devono esistere nel file /etc/passwd:
2024-04-09 20:10:09 +00:00
<pre>vmail:x:6000:6000::/home/mail:/bin/sh</pre>
e in /etc/group:
<pre>vmail:x:6000:</pre>
e devo creare la directory con i giusti permessi
2024-04-16 19:40:19 +00:00
<pre># mkdir /home/mail
2024-04-09 20:10:09 +00:00
# chown vmail:vmail /home/mail</pre>
Le mappe sono file di testo composti come segue:
mysql\_virtual\_alias_maps.cf:
2024-04-16 19:40:19 +00:00
<pre>user = postfix
password = password
hosts = 127.0.0.1
dbname = postfix
table = alias
select_field = goto
2024-04-09 20:10:09 +00:00
where_field = address</pre>
mysql\_virtual\_domains_maps.cf:
2024-04-16 19:40:19 +00:00
<pre>user = postfix
password = password
hosts = 127.0.0.1
dbname = postfix
table = domain
select_field = description
2024-04-09 20:10:09 +00:00
where_field = domain</pre>
mysql\_virtual\_mailbox_maps.cf:
2024-04-16 19:40:19 +00:00
<pre>user = postfix
password = password
hosts = 127.0.0.1
dbname = postfix
table = mailbox
select_field = maildir
2024-04-09 20:10:09 +00:00
where_field = username</pre>
2024-04-16 19:40:19 +00:00
Ora sono pronto a inserire, tramite l'interfaccia di Postfixadmin, il mio primo dominio virtuale e i relativi alias e mailboxes. Dopo averlo riavviato Postfix è pronto a ricevere mail per gli account impostati. Posso testare il tutto in locale con telnet:
<pre># telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 nomemacchina.nomedominio ESMTP Postfix (Debian/GNU)
ehlo nomemacchina.nomedominio
250-nomemacchina.nomedominio
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
mail from:&lt;jimmi@server.com&gt;
250 2.1.0 Ok
rcpt to:&lt;jimmi@nomedominio&gt;
250 2.1.5 Ok
data
354 End data with &lt;CR&gt;&lt;LF&gt;.&lt;CR&gt;&lt;LF&gt;
prova mail
.
250 2.0.0 Ok: queued as 718BE15DF78
quit
221 2.0.0 Bye
2024-04-09 20:10:09 +00:00
Connection closed by foreign host.</pre>
2024-04-16 19:40:19 +00:00
Se tutto è a posto troverò la mail nell'Inbox dell'utente.
2024-04-09 20:10:09 +00:00
### <a name="htoc3">Dovecot</a>
Passo ad occuparmi ora del server IMAP. Anche Dovecot è pacchettizato da Debian, e si installa con:
<pre>apt-get install dovecot-imapd dovecot-pop3d</pre>
È possibile attivare facilmente i server imap, imaps, pop3 e pop3s aggiungendo a `/etc/dovecot/dovecot.conf`:
<pre>protocols = imap imaps pop3 pop3s</pre>
ed eventualmente modificando le sezioni dedicate nello stesso file. Per fare in modo che Dovecot utilizzi le mailbox virtuali modifico seguenti righe di
`/etc/dovecot/dovecot.conf`:
2024-04-16 19:40:19 +00:00
<pre>mail_location = maildir:/home/mail/%d/%n
auth default {
mechanisms = plain login
passdb sql {
args = /etc/dovecot/dovecot-mysql.conf
}
userdb sql {
args = /etc/dovecot/dovecot-mysql.conf
}
user = postfix
client {
path = /var/spool/postfix/private/auth
mode = 0660
user = postfix
group = postfix
}
2024-04-09 20:10:09 +00:00
}</pre>
2024-04-16 19:40:19 +00:00
La sezione "`client`" serve per abilitare l'autenticazione SASL in postfix, che si attiva aggiungendo le seguenti righe in `/etc/postfix/main.cf`:
2024-04-09 20:10:09 +00:00
2024-04-16 19:40:19 +00:00
<pre>smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_type = dovecot
2024-04-09 20:10:09 +00:00
smtpd_sasl_path = private/auth</pre>
2024-04-16 19:40:19 +00:00
Per ottenere i dati dell'utente dal database aggiungo poi il file
2024-04-09 20:10:09 +00:00
`/etc/dovecot/dovecot-mysql.conf`:
2024-04-16 19:40:19 +00:00
<pre>driver = mysql
password_query = SELECT password FROM mailbox WHERE username = '%u'
user_query = SELECT maildir, 6000 AS uid, 6000 AS gid FROM mailbox WHERE username = '%u'
2024-04-09 20:10:09 +00:00
connect = host=127.0.0.1 port=3306 dbname=postfix user=postfix password=password default_pass_scheme = CRYPT</pre>
Al riavvio di Dovecot se tutto funziona posso leggere le seguenti righe nei log:
2024-04-16 19:40:19 +00:00
<pre>dovecot: 2008-07-13 19:40:42 Info: Dovecot v1.0.rc15 starting up
2024-04-09 20:10:09 +00:00
dovecot: 2008-07-13 19:40:43 Info: auth-worker(default): mysql: Connected to 127.0.0.1 (postfix)</pre>
### <a name="htoc4">Dovecot LDA</a>
2024-04-16 19:40:19 +00:00
Dovecot fornisce anche un programma per la consegna dei messaggi agli utenti virtuali, chiamato Dovecot **L**ocal **D**elivery **A**gent, che può sostituire _virtual_ fornito dal Postfix, con alcune funzionalità aggiuntive, come l'indicizzazione delle mailbox, l'utilizzo di quote utente e di Sieve tramite appositi plugin. Per abilitarlo devo aggiungere al file `/etc/dovecot/dovecot.conf` le righe:
<pre>protocol lda {
..
# UNIX socket path to master authentication server to find users.
#auth_socket_path = /var/run/dovecot/auth-master
}
auth default {
..
socket listen {
# Note that we're setting a master socket. SMTP AUTH for Postfix uses client sockets.
master {
path = /var/run/dovecot/auth-master
# Auth master socket can be used to look up userdb information for
# given usernames. This probably isn't very sensitive information
# for most systems, but still try to restrict the socket access if possible.
mode = 0600
user = vmail # User running deliver
group = vmail # Or alternatively mode 0660 + deliver user in this group
}
}
..
2024-04-09 20:10:09 +00:00
}</pre>
Posso ora aggiungere il servizio in Postfix, aggiungendo a
`/etc/postfix/master.cf`:
2024-04-16 19:40:19 +00:00
<pre>dovecot unix - n n - - pipe
2024-04-09 20:10:09 +00:00
flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${recipient}</pre>
e indicargli di utilizzarlo inserendo in `/etc/postfix/main.cf` le righe:
2024-04-16 19:40:19 +00:00
<pre>virtual_transport = dovecot
2024-04-09 20:10:09 +00:00
dovecot_destination_recipient_limit = 1</pre>
Con queste impostazioni _deliver_, che funziona da utente non privilegiato, genera un errore. Per evitarlo nella <a title="Dovecot MarkMail" href="http://dovecot.markmail.org/" target="_blank">mailing list</a> di Dovecot consigliano di impostare _deliver_ a SUID con il comando:
<pre># chmod u+s /usr/lib/dovecot/deliver</pre>
Riavvio Dovecot e Postfix, e alla prima ricezione posso trovare nei log qualcosa di simile a questo:
<pre>server postfix/pipe[23496]: 23FD715DF87: to=&lt;utente@nomedominio&gt;, relay=dovecot, delay=0.4, delays=0.07/0.02/0/0.31, dsn=2.0.0, status=sent (delivered via dovecot service)</pre>
### <a name="htoc5">Horde</a>
2024-04-16 19:40:19 +00:00
Manca ora l'ultimo pezzo, l'interfaccia web per gli utenti tramite Horde, un framework con numerosi moduli in PHP. Anche questa applicazione è pacchettizzata da Debian, e l'installazione è banale se si seguono le indicazioni del <a title="Debian" href="http://wiki.debian.org/Horde" target="_blank">Wiki</a>.
2024-04-09 20:10:09 +00:00
Installo per primo il framework con:
<pre># apt-get install horde3</pre>
abilito un VirtualHost che punti alla sua directory, aggiungendo ad esempio in `/etc/apache2/sites-available/default`:
2024-04-16 19:40:19 +00:00
<pre>Alias /horde3 /usr/share/horde3
Options FollowSymLinks
AllowOverride Limit
deny from all
2024-04-09 20:10:09 +00:00
allow from TUO_IP</pre>
2024-04-16 19:40:19 +00:00
che mi permetterà di accedere localmente, e inizializzo il database. Quest'ultima operazione può avvenire da riga di comando con:
2024-04-09 20:10:09 +00:00
<pre>#gunzip &lt; /usr/share/doc/horde3/examples/scripts/sql/create.mysql.sql.gz | mysql -u MYSQL_ADMIN -p</pre>
2024-04-16 19:40:19 +00:00
Avendo cura di modificare in `create.mysql.sql.gz` i dati di accesso dell'amministratore di Horde. Fatto ciò puntando il browser su `http://nomemacchina.nomedominio/horde3` compare la maschera iniziale di Horde. Per il debug di eventuali problemi posso puntare il browser su: `http://nomemacchina.nomedominio/horde3/test.php`
2024-04-09 20:10:09 +00:00
La configurazione di Horde3 avviene creando nelle directory sotto `/etc/horde/horde3` i file config.php e config.php.bak con maschera dei permessi 777, configurando poi tramite intefaccia web le opzioni nella maschera in `Amministrazione-->Impostazione-->Horde`, salvando e riportando i permessi dei due file a 644 e 700 rispettivamente.
Per un corretto funzionamento è indispensabile impostare correttamente i parametri nelle maschere _Database_, _Authentication_ e _Preference System_
Horde mette a disposizione, tra gli altri, i seguenti moduli:
2024-04-16 19:40:19 +00:00
* **IMP** - Cliente Webmail
* **Ingo** - Filtro per le mail
* **Turba** - Gestione rubrica
* **Kronolith** - Calendario
* **Nag** - Gestione attività
* **Mnemo** - Gestione note
* **Passwd** - Gestione password
* **MIMP** - Interfaccia per dispositivi mobili
2024-04-09 20:10:09 +00:00
Tutti questi moduli sono presenti nei repository Debian ad eccezione di MIMP, che può essere facilmente installato per Debian con le seguenti operazioni:
2024-04-16 19:40:19 +00:00
<pre># wget http://ftp.horde.org/pub/mimp/mimp-h3-1.1.tar.gz
# tar -xvzf mimp-h3-1.1.tar.gz
# mv mimp-h3-1.1/config /etc/horde/mimp
# mv mimp-h3-1.1 /usr/share/horde3/mimp
# cd /usr/share/horde3/mimp
2024-04-09 20:10:09 +00:00
# ln -s /etc/horde/mimp config</pre>
La configurazione dei vari moduli avviene, analogalmente a quella del framework, in tre operazioni:
* Creo nelle directory sotto `/etc/horde/[nomemodulo]` i file config.php e config.php.bak con maschera dei permessi 777
* Configuro e salvo tramite intefaccia web le opzioni nella maschera in `Amministrazione-->Impostazione-->[nomemodulo]`
* Cambio i permessi dei due file a 644 e 700 rispettivamente.
Ovviamente le operazioni dovranno essere ripetute per ogni modulo.
Oltre alle impostazioni più _banali_ possono essere importanti le seguenti impostazioni per i vari moduli:
**Horde**
Maschera _General_:
2024-04-16 19:40:19 +00:00
- _Determines how we generate full URLs (for location headers and such)_
2024-04-09 20:10:09 +00:00
<pre>Assume that we are using SSL and always generate https URLs</pre>
2024-04-16 19:40:19 +00:00
- _What port number is the webserver running on?_
2024-04-09 20:10:09 +00:00
<pre>443</pre>
Questo mi serve perchè la mia webmail è disponibile su una connessione criptata _https_
Maschera _Authentication_:
2024-04-16 19:40:19 +00:00
- _What backend should we use for authenticating users to Horde?_
2024-04-09 20:10:09 +00:00
<pre>Let a Horde application handle authentication</pre>
2024-04-16 19:40:19 +00:00
- _The application which is providing authentication_
2024-04-09 20:10:09 +00:00
<pre>imp</pre>
Queste due scelte permettono di autenticarsi con le credenziali create in _Postfixadmin_ ed effettualre il _Login_ una sola volta anzichè dover inserire due volte i dati per leggere la posta. In questo caso è importante creare un utente amministratore e inserire il suo nome nella prima casella.
**IMP**
Modifico il file `/etc/horde/imp4/servers.php` inserendo i dati del o dei server mail. Nel file originale sono contenuti diversi esempi, ricordatevi di commentare o cancellare quelli non necessari.
Nel file `/etc/horde/imp4/mime_drivers.php` modifico la linea:
<pre>$mime_drivers['imp']['html']['inline'] = true;</pre>
Questo mi permette di vedere in linea le mail composte in HTML, anche se non meriterebbero 😉 È una scelta giustamente sconsigliata, ma altrimenti le mail HTML vengono formattate in modo impossibile da leggere.
**Ingo**
Nel file `/etc/horde/ingo1/backends.php` specifico quale backend utilizzare per i filtri. Le scelte possibili sono _null_ (applica le regole su richiesta), o regole per _Maildrop_, _Procmail_ o _Sieve_. La scelta più semplice è:
2024-04-16 19:40:19 +00:00
<pre>/* IMAP Example */
$backends['imap'] = array(
'driver' =&gt; 'null',
'preferred' =&gt; 'example.com',
'hordeauth' =&gt; true,
'params' =&gt; array(),
'script' =&gt; 'imap',
'scriptparams' =&gt; array()
2024-04-09 20:10:09 +00:00
);</pre>
Anche in questo caso le altre scelte vanno commentate o cancellate.
**Turba**
Nel file `/etc/horde/turba2/sources.php` specifico quale backend utilizzare. Per utilizzare MySQL la configurazione tipica è:
2024-04-16 19:40:19 +00:00
<pre>$cfgSources['localsql'] = array(
'title' =&gt; _("My Address Book"),
'type' =&gt; 'sql',
'params' =&gt; array_merge($conf['sql'], array('table' =&gt; 'turba_objects')),
'map' =&gt; array(
'__key' =&gt; 'object_id',
'__owner' =&gt; 'owner_id',
'__type' =&gt; 'object_type',
'__members' =&gt; 'object_members',
'__uid' =&gt; 'object_uid',
'name' =&gt; 'object_name',
'email' =&gt; 'object_email',
'alias' =&gt; 'object_alias',
'homeAddress' =&gt; 'object_homeaddress',
'workAddress' =&gt; 'object_workaddress',
'homePhone' =&gt; 'object_homephone',
'workPhone' =&gt; 'object_workphone',
'cellPhone' =&gt; 'object_cellphone',
'fax' =&gt; 'object_fax',
'title' =&gt; 'object_title',
'company' =&gt; 'object_company',
'notes' =&gt; 'object_notes',
'pgpPublicKey' =&gt; 'object_pgppublickey',
'smimePublicKey' =&gt; 'object_smimepublickey',
'freebusyUrl' =&gt; 'object_freebusyurl'
),
'search' =&gt; array(
'alias',
'email'
),
'strict' =&gt; array(
'object_id',
'owner_id',
'object_type',
),
'export' =&gt; true,
'browse' =&gt; true,
'use_shares' =&gt; true,
2024-04-09 20:10:09 +00:00
);</pre>
ed è inoltre necessario creare la tabella in MySQL, utilizzando il comando:
<pre># mysql -u MYSQL_ADMIN -p DATABASE &lt; /usr/share/doc/turba2/examples/scripts/sql/turba_objects.mysql.sql</pre>
**Kronolith**
Se si sceglie il driver SQL è necessario creare la tabella con il comando:
<pre># mysql -u MYSQL_ADMIN -p DATABASE &lt; /usr/share/doc/kronolith2/examples/scripts/sql/kronolith.mysql.sql</pre>
**Nag**
Se si sceglie il driver SQL è necessario creare la tabella con il comando:
<pre># mysql -u MYSQL_ADMIN -p DATABASE &lt; /usr/share/doc/nag2/examples/scripts/sql/nag.sql</pre>
**Passwd**
Nel file `/etc/horde/passwd3/backends.php` ho modificato le linee:
2024-04-16 19:40:19 +00:00
<pre>driver' =&gt; 'sql',
'params' =&gt; array(
'phptype' =&gt; 'mysql',
'hostspec' =&gt; '127.0.0.1',
'port' =&gt; '3306',
'protocol' =&gt; 'tcp',
'username' =&gt; 'postfix',
'password' =&gt; 'password',
'encryption' =&gt; 'crypt-md5',
'database' =&gt; 'postfix',
'table' =&gt; 'mailbox',
'user_col' =&gt; 'username',
'pass_col' =&gt; 'password',
2024-04-09 20:10:09 +00:00
'show_encryption' =&gt; false)</pre>
Per poter modificare la password nel database creato da Postfixadmin.
### <a name="htoc6">Fetchmail e Gmail server relay</a>
Vi sono altri due add-ons non strettamente collegati alla configurazione di un server mail ma molto utili specialmente per server fatti in casa.
**Fetchmail**
2024-04-16 19:40:19 +00:00
È un ottimo programma per ritirare mail da server POP3 o IMAP e consegnarla al server locale. Sia Postfixadmin che Horde hanno dei plugin che gestiscono fetchmail in modi leggermente diversi. Con Horde l'utente inserisce i dettagli del server remoto e scarica la posta mentre è collegato, mentre con Postfixadmin in base ai dati inseriti dall'amministratore nel database vengono creati dei file `~/.fetchmailrc` al volo che possono essere usati inserendo in crontab lo script `fetchmail.pl`.
2024-04-09 20:10:09 +00:00
2024-04-16 19:40:19 +00:00
Purtroppo entrambi hanno due limitazioni che me ne impediscono l'utilizzo: non implementano [Freepops][7] e non permettono l'uso di autenticazioni SSL. Freepops è un programmino che permette di scaricare le mail diretamente dalla webmail, aggirando la limitazione all'uso del server POP per gli abbonamenti free adottato, ad esempio, da Libero e Inwind. L'uso del protocollo SSL è indispensabile invece per scaricare mail dai server di Gmail o Autistici/Inventati.
2024-04-09 20:10:09 +00:00
La versione di Fetchmail pacchettizzata da Debian ci permette di avviare il programma in modalità demone con il tipico script `/etc/init.t/fetchmail`. Il pacchetto di Freepops purtroppo fa riferimento ad una versione troppo datata e non più funzionante, e bisogna quindi installare la versione offerta dai [Backports][8]. Una volta installati entrambi avremo il demone _freepopsd_ in ascolto alla porta 2000 (di default), e possiamo modificare il file `/etc/fetchmailrc` aggiungendo le sezioni relative ai vari server. Alcuni utilizzi tipici sono:
Server POP3
2024-04-16 19:40:19 +00:00
<pre>poll SERVER_POP with proto pop3 auth password
user "NOMEUTENTE.REMOTO" there
with password "password"
2024-04-09 20:10:09 +00:00
is NOMEUTENTE.LOCALE here options fetchall</pre>
Server che richiedono Freepops
2024-04-16 19:40:19 +00:00
<pre>poll SERVER_POP with proto pop3 port 2000
user "NOMEUTENTE.REMOTO" there
with password "password"
2024-04-09 20:10:09 +00:00
is NOMEUTENTE.LOCALE here options fetchall</pre>
Server Gmail
2024-04-16 19:40:19 +00:00
<pre>poll SERVER_POP with proto pop3 port 995
user "NOMEUTENTE.REMOTO" there
with password "password"
2024-04-09 20:10:09 +00:00
is NOMEUTENTE.LOCALE here options ssl sslcertck fetchall</pre>
**Gmail Server Relay**
2024-04-16 19:40:19 +00:00
Normalmente le mail spedite da un server casalingo con IP dinamico vengono rifiutate per motivi di sicurezza, e si è quindi costretti ad usare un server che vi faccia da _relay_, che vi permetta cioè di spedire mail attraverso il suo servizio. Vi dovesse capitare di non avere a disposizione un relay, o di volerne utilizzare uno alternativo, potete usufruire del servizio offerto da Gmail, il quale però richiede un'autenticazione sicura via SSL. Per implementarla aggiungo o modifico le seguenti righe di `/etc/postfix/main.cf`:
<pre>smtpd_tls_CAfile = /etc/postfix/cacert.pem
smtpd_tls_cert_file=/etc/postfix/gmail.pem
smtpd_tls_key_file=/etc/postfix/gmail.key
smtpd_sasl_application_name = smtpd
smtp_tls_per_site = hash:/etc/postfix/smtp_tls_per_site
smtp_use_tls=yes
smtp_tls_CAfile = /etc/postfix/cacert.pem
smtp_tls_cert_file=/etc/postfix/gmail.pem
smtp_tls_key_file=/etc/postfix/gmail.key
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
2024-04-09 20:10:09 +00:00
relayhost = [smtp.gmail.com]:587</pre>
creo il file `/etc/postfix/sasl_passwd`, vi aggiungo le righe:
2024-04-16 19:40:19 +00:00
<pre># Contents of sasl_passwd
#
2024-04-09 20:10:09 +00:00
[smtp.gmail.com] NOMEUTENTE@gmail.com:PASSWORD</pre>
e lo compilo con:
<pre># postmap /etc/postfix/sasl_passwd</pre>
Infine, se non li possiedo già, creo il mio certificato auto firmato con i seguenti passaggi:
2024-04-16 19:40:19 +00:00
<pre># /usr/local/ssl/misc/CA.pl -newca
CA certificate filename (or enter to create)
Making CA certificate ...
Generating a 1024 bit RSA private key
.......++++++
...................++++++
writing new private key to './demoCA/private/cakey.pem'
Enter PEM pass phrase: <strong>password</strong>
Verifying - Enter PEM pass phrase: <strong>password</strong>
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [US]:<strong>IT</strong>
State or Province Name (full name) [Pennsylvania]:<strong>Italia</strong>
Locality Name (eg, city) []:<strong>Bergamo</strong>
Organization Name (eg, company) [Internet Widgits Pty Ltd]:<strong>Casa</strong>
Organizational Unit Name (eg, section) []:<strong>Server</strong>
Common Name (eg, YOUR name) []:<strong>nomemacchina.nomedominio</strong>
Email Address []:<strong>mioindirizzoposta</strong>
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /usr/lib/ssl/openssl.cnf
Enter pass phrase for ./demoCA/private/cakey.pem:<strong>password</strong>
...
# openssl req -new -nodes -subj '/CN=nomemacchina.nomedominio/O=Casa/C=IT/ST=Italia/L=Bergamo/emailAddress=mioindirizzoposta' -keyout gmail.key -out gmail.req -days 3650
# openssl ca -out gmail.pem -infiles gmail.req
Using configuration from /usr/lib/ssl/openssl.cnf
Enter pass phrase for ./demoCA/private/cakey.pem:<strong>password</strong>
2024-04-09 20:10:09 +00:00
...</pre>
Al riavvio di Postfix dovrei poter inviare messaggi tramite Gmail, che risulterà dai log con un messaggio di questo tipo:
<pre>Jul 25 11:36:52 server postfix/smtp[28745]: 8C31415DF79: to=&lt;pippo@pippo.com&gt;, relay=smtp.gmail.com[64.233.183.109]:587, delay=6.5, delays=0.0 5/0.05/3.8/2.7, dsn=2.0.0, status=sent (250 2.0.0 OK 1216978613 i4sm31861110nfh.1)</pre>
[1]: #htoc1
[2]: #htoc2
[3]: #htoc3
[4]: #htoc4
[5]: #htoc5
[6]: #htoc6
[7]: http://www.freepops.org/it/ "Freepops"
[8]: http://backports.org/ "Backports"