un mailserver con i cosiddetti

installare QMail e tutti i condimenti

Questi gli appunti alla installazione di un server di posta:
installeremo QMail con supporto per pop3,smtp e imap nonché interfaccia web, antispam, antivirus e notifica delle email su cellulare...
Chi pi u' ne ha pi u' ne metta. La scelta di qmail è stata travagliata, ma seppur vada compilato dai sorgenti (cosa tutto sommato insolita in Debian, perlomeno perché per qualche ragione a me sconosciuta non è compreso nella pacchettizzazione ufficiale), presenta indubbi pregi dal punto di vista della stabilità, velocità e, come vedremo, delle feature.
La strada che seguiremo è quella indicata da qmailrocks, eccellente (se avete una minima dimestichezza con Linux) ed esaustiva guida.

Attenzione che questa non è propriamente una guida, è pensata come un riassunto della guida che potete trovare su qmailrocks Debian dove troverete le spiegazione al perché di certi passaggi.
E' utile se vi trovate a reinstallare qmail e non volete perderci una settimana, o se provate per la prima volta, fatemi sapere se con voi ha funzionato (contatta il Dariosky).

Requisiti

Ricordatevi di installare:
Apache, perl, php e gcc DOVRESTE già averli, inoltre servono
OpenSSL, libssl-dev e MySQL.
Dovreste inoltre togliete ogni altro programma di posta, e lasciare (questo è quello che fa la guida) sendmail.

Download

Scaricate in "/downloads" il pacchetto con tutto il necessario e scompattatelo. ATTENZIONE: E' cosa buona e giusta mantenere tutte le cartelle indicate qui e su qmailrocks perché gli script confidano che siano queste. Se cambiate cartelle, dovete cambiare gli script, siete avvisati!

Installazione

Fate partire (per preparare l'installazione)
/downloads/qmailrocks/scripts/install/qmr_install_linux-s1.script

e (per applicare un sacco di patch)
/downloads/qmailrocks/scripts/util/qmail_big_patches.script

Compiliamo qmail:

cd /usr/src/qmail/qmail-1.03
make man && make setup check
./config-fast your_fqdn_hostname
make cert
dove "your_fqdn_hostname" è il vostro nome completo se siete registrati come DNS (es. dariosky.it) oppure il nome completo nella vostra rete locale (solitamente con il suffisso .local) (es. computerozzo.local).
Con "make cert" verrà creato un certificato e vi verranno chiesti un po' di dati... al certificato assegnamo i giusti permessi:
chown -R vpopmail:qmail \
 /var/qmail/control/clientcert.pem /var/qmail/control/servercert.pem
(è tutto in una sola riga, fate pure copia-incolla)

Compiliamo ucspi-tcp

cd /usr/src/qmail/ucspi-tcp-0.88/
make && make setup check

Compiliamo i daemon-tools

cd /package/admin/daemontools-0.76
package/install
ora dovrebbe esserci il demone svscan in esecuzione (potete controllare con ps aux.

Mailing list con EZmlm

EZmlm serve appunto per creare mailing list che poi saranno incluse in QmailAdmin... installiamolo dunque:
cd /downloads/qmailrocks/
tar zxvf ezmlm-0.53-idx-0.41.tar.gz
cd ezmlm-0.53-idx-0.41
make && make setup

Autoresponder

Tocca ora a autoresponder (che permette di creare dei "risponditori" automatici):
cd /downloads/qmailrocks
tar zxvf autorespond-2.0.5.tar.gz
cd autorespond-2.0.5
make && make install

Vpopmail senza MySQL

Qmailrocks ci propone due scelte per vpopmail: con MySQL o senza!
Io sceglierò la seconda, pi u' comoda per volumi di mail non enormi (anche se qmr dice che va bene in ogni circostanza)... ad ogni modo, per una scelta pi u' consapevole date un occhio a questa pagina.

Vpopmail serve sostanzialmente per creare domini virtuali, ma ha molto comandi integrati che rendono la sua installazione fortemente consigliata in ogni circostanza!
cd /downloads/qmailrocks
tar zxvf vpopmail-5.4.9.tar.gz
cd vpopmail-5.4.9
./configure --enable-logging=p
make && make install-strip
Se ottenete un errore qui, del tipo:
In file included from vconvert.c:35:
vmysql.h:53:22: missing terminating " character
vmysql.h:60:35: missing terminating " character
make[2]: *** [vconvert.o] Error 1

allora dovete applicare la patch a vpopmail:
patch < /downloads/qmailrocks/patches/vmysql.patch

Vqadmin

Vqadmin è un'interfaccia per vpopmail che permette di gestirlo in lungo e in largo da un browser.
Chiaro che poter accedere a vqadmin dovete avere installato un web server come Apache.
Di default apache (in Debian) si installa in var/www/ ma nel sito di default la cartella cgi-bin che contiene gli script avviabili è linkata in /usr/lib/cgi-bin (come potete notare andando a vedere /etc/apache2/sites-available/default)
(Questo passaggio è per Debian, altre distribuzioni dovranno cambiare un po' i comandi ma sostanzialmente questo è il sistema)
Mettiamo li dentro vqadmin:
cd /downloads/qmailrocks
tar zxvf vqadmin-2.3.6.tar.gz
cd vqadmin-2.3.6
./configure \
    --enable-cgibindir=/usr/lib/cgi-bin
make && make install-strip
In questo modo vqadmin si troverà in /usr/lib/cgi-bin/vqadmin.
Ora dobbiamo abilitare l'esecuzione dei cgi in questa cartella, andiamo ad aggiungere nel file /etc/apache2/sites-available/default (che è il sito che risponde normalemente su localhost:
<Directory "/usr/lib/cgi-bin/vqadmin">
 deny from all
 Options ExecCGI
 AllowOverride AuthConfig
 Order deny,allow
</Directory>
abbiamo specificato che gli script possono essere eseguiti ma che per accedervi è necessario autenticarsi.
Modifichiamo allora il file /usr/lib/cgi-bin/vqadmin/.htaccess
AuthType Basic
AuthUserFile /etc/apache2/vqadmin.passwd
AuthName vQadmin
require valid-user
satisfy any
e cambiamone i permessi rendendolo di www-data (che è l'utente di apache2): chown www-data /usr/lib/cgi-bin/vqadmin/.htaccess.
Creiamo il file /etc/apache2/vqadmin.passwd che conterrà lo username (admin) e la password criptata:
htpasswd -c /etc/apache2/vqadmin.passwd admin
(inseriamo la password due volte)
chmod 644 /etc/apache2/vqadmin.passwd
Bene, riavviamo apache con apache2ctl restart e ora possiamo accedere a vqadmin su http://localhost/cgi-bin/vqadmin/vqadmin.cgi (dove localhost siete voi) (il nome utente è "admin" e la password quella che avete scelto poc'anzi).

Se tutto è andato bene ora avete la schermatina di vqadmin davanti, procedete creando un nuovo dominio ("Aggiungi dominio") inserendo il nome di dominio ("qualcosa.lan" se non avete un dominio reale) la password di postmaster (l'amministratore di questo dominio). Ignorate pure i parametri dopo per ora, date ok e il dominio è creato!

Maidrop

Maildrop è un filtro per la posta, a detta di qmailrocks non è così indispensabile ma è meglio averlo...
Non obbiettiamo visto che installarlo è lineare :-) :
cd /downloads/qmailrocks
tar zxvf maildrop-1.6.3.tar.gz
cd maildrop-1.6.3
./configure --prefix=/usr/local --exec-prefix=/usr/local \
  --enable-maildrop-uid=root --enable-maildrop-gid=vchkpw \
   --enable-maildirquota
make && make install-strip && make install-man

Qmailadmin

Qmailadmin è un'altro (come vqadmin) script accessibile tramite il nostro webserver. Mentre vqadmin permette di creare domini, qmailadmin è d'uso solo ai vari postmaster e consente di creare caselle di posta, alias, forward, mailing list.
cd /downloads/qmailrocks
tar zxvf qmailadmin-1.2.3.tar.gz
cd qmailadmin-1.2.3
./configure --enable-cgibindir=/usr/lib/cgi-bin --enable-htmldir=/var/www
make && make install-strip
(nella htmldir verrà creata una sottocartella images/qmailadmin che conterrà le immagini che mostra lo script).
Ecco, ora dovreste già accedere a qmailadmin da qui:
http://localhost/cgi-bin/qmailadmin
Inserite il dominio e la password che avete di prima (quando avete creato il dominio con vqadmin) per entrare.

Finire i lavori su qmail

E' tempo di rifinire l'installazione di Qmail, prima di avviarla (tra un po'):
Qmailrocks ancora ci dona simpaticamente uno script che fa un po' di cosuzze, lanciamolo (e lui ci spiegherà pure quello che fa):
/downloads/qmailrocks/scripts/finalize/linux/finalize_linux.script
ora però dovremo modificare alcune cosuzze:
  1. Modifichiamo:
    vim /var/qmail/supervise/qmail-pop3d/run
    e sostituiamo a "mail.example.com", l'indirizzo che avrà nostro server di posta in arrivo (per esempio, in rete locale, mail.topolinia.lan)
  2. Lo stesso con
    vim /var/qmail/supervise/qmail-smtpd/run
    mettendo questa volta il nome che avrà il server di posta in uscita (che può anche essere uguale): mail.topolinia.lan
Ora assicuriamoci che qmail non sia in esecuzione con
qmailctl stop.

Dobbiamo definire (come si faceva durante l'installazione di Debian) dove spedire i messaggi che arrivano a qmail-root, qmail-postmaster, qmail-mailer-daemon e qmail-anonymous... Creiamo quindi degli alias a delle caselle che leggiamo spesso (pi u' avanti potremo rieseguire questi comandi per cambiare gli alias). Supponiamo di voler dirottare quindi tutti i nostri messaggi sulla casella pippo@mail.it:
cd /var/qmail/alias/
echo pippo@mail.it > .qmail-root
echo pippo@mail.it > .qmail-postmaster
echo pippo@mail.it > .qmail-mailer-daemon
ln -s .qmail-root .qmail-anonymous
chmod 644 .qmail*
Ed ora abilitiamo il relay per localhost con
echo '127.:allow,RELAYCLIENT=""' >> /etc/tcp.smtp qmailctl cdb

Disinstallare sendmail

Ora che qmail è pronto a partire dobbiamo bloccare l'attuale server di posta (sendmail o exim che sia) sostituire il /usr/sbin/sendmail e /usr/lib/sendmail (questi link ci sono anche con exim, perché sendmail è così diffuso che i server di posta in genere creano link a suo nome) con un link a qmail.
Questo passo lo facciamo in modo diverso da Qmailrocks, pi u' alla Debian-way. Vediamo con
netstat -lanp |grep :25
e
netstat -lanp |grep :110
se c'è qualche server in uso (c'è!) e facciamo in modo che non si ricarichi all'avvio:

Cominciamo fermando sendmail e togliendo i link in /etc/rc.*
/etc/init.d/sendmail stop update-rc.d -f sendmail remove
i link che dicevamo non puntano direttamente a sendmail, ma usano il sistema di alternative di Debian (che si distingue ancora una volta per le sue scelte saggie). Anziché sovrascrivere i link allora, sfruttiamo il sistema di alternative:
update-alternatives --install qmail sendmail \
   /var/qmail/bin/sendmail 9
update-alternatives --set sendmail /var/qmail/bin/sendmail
Infine Qmailrocks ci suggerisce di disinstallare postfix... ma è probabilmente meglio toglierlo solo dall'avvio (come per sendmail).

Avviare Qmail

E' giunto il momento tanto atteso (ma siamo ben lungi dall'aver finito la nostra missione, mancano i "cosiddetti" del titolo).
Avviamo lo script
/downloads/qmailrocks/scripts/util/qmr_inst_check
che controlla l'esistenza di script e i permessi, se avete fatto tutto bene qui (condizione sufficiente ma non necessaria, ovvero: potreste aver sbagliato qualcosa e lo script non se ne accorgerebbe) riceverete le sue congratulazioni.
Bene, è giunto il momento di avviare (riavviare) qmail:
qmailctl stop
qmailctl start
qmailctl stat
L'ultimo server per vedere lo stato di qmail (tra cui l'uptime e i messaggi nelle code).
Qmail è attivo, e già da ora dovremmo essere in grado di usarlo per mandare e ricevere messaggi... proviamoci!
Usiamo telnet per per collegarci al nostro SMTP, mandiamo un messaggio usando l'account postmaster creato prima:
telnet localhost 25
Trying 127.0.0.1...
Connected to computername.
Escape character is '^]'.
220 computername.local ESMTP
Salutiamo il server
HELO
250 computername.local
Indichiamo il mittente (anche fasullo) del messaggio che vogliamo inviare:
MAIL FROM: nome@local.lan
250 ok
Scegliamo di mandare il messaggio al postmaster della nostra rete (l'unico utente presente al momento)
RCPT TO: postmaster@topolinia.lan
250 ok
E infine inseriamo il testo del messaggio
DATA
354 go ahead
Bene cotesto e' il testo del messaggio di prova...
.
Il punto finale (in una nuova riga) indica la fine del messaggio.
250 ok 1111790373 qp 14803
quit
221 computername.local
Connection closed by foreign host.
Il messaggio è inviato... colleghiamoci ora al server di posta in arrivo POP3 e riceviamolo... indicherò questa volta solo i comandi che dovete digitare voi:
telnet localhost 110
user postmaster@topolinia.lan
pass quivalavostrapassword
list
retr 1
+OK
Return-Path: <nome@local.lan>
Delivered-To: postmaster@topolinia.lan
Received: (qmail 14803 invoked by uid 1008); 25 Mar 2005 23:38:58 +0100
Received: from localhost (HELO ) (127.0.0.1)
by computername.local with SMTP; 25 Mar 2005 23:38:58 +0100
Bene cotesto e' il testo del messaggio di prova...
quit
Se tutto funziona procediamo con ...

Courier IMAP e IMAP SSL

Il server IMAP è un requisito per installare webmail come imp e squirrelmail (che installeremo dopo).
In Debian l'installazione va fatta dai pacchetti con i sorgenti e non da quelli binari se vogliamo l'autenticazione di vpopmail, poichè vpopmail è nel ramo "contrib", peccato!
Installiamo prima questi pacchetti:
apt-get install libgdbm-dev expect-dev libperl-dev
Scarichiamo allora courier-authlib e courier-imap.
Quindi compiliamoli così:
Prima authlib.
tar xjvf courier-authlib-0.55.tar.bz2
cd courier-authlib-0.55/
./configure --sysconfdir="/etc"
make
make install
make install-migrate
make install-configure
Poi imap.
tar xvjf courier-imap-4.0.2.tar.bz2
cd courier-imap-4.0.2/

./configure \
 --without-authcram \
 --without-authldap \
 --without-authmysql \
 --without-authpgsql \
 --without-authcustom \
 --with-authvchkpw \
 --disable-root-check \
 --without-authpwd \
 --without-authpam \
 --without-authshadow \
 --without-authuserdb \
 --with-authdaemon \
 --with-ssl \
 --sysconfdir="/etc"

make
make install
make install-configure
In questo modo tutto è finito in /usr/local/lib e /usr/lib, ma i file di configurazione sono in /etc...
Creiamo ora dei symlink in /etc/init.d
ln -s /usr/local/sbin/authdaemond \
 /etc/init.d/courier-authdaemon
ln -s /usr/lib/courier-imap/libexec/imapd.rc \
 /etc/init.d/courier-imap
E andiamo a cambiare qualche impostazione per l'autenticazione di imap:
L'autenticazione che vogliamo (quella di vpopmail) viene fornita da un modulo chiamato "autovchkpw" andiamo a modificare il file di configurazione di courier-auth (in modo da far comparire per primo autovchkpw):
vim /etc/authlib/authdaemonrc
e cambiamo la riga
authmodulelist="authuserdb authpwd authshadow authmysql authcustom authvchkpw"
in
authmodulelist="authvchkpw authuserdb authpwd authshadow authmysql authcustom"
e
authmodulelistorig="authuserdb authpwd authshadow authmysql authcustom authvchkpw"
in
authmodulelistorig="authvchkpw authuserdb authpwd authshadow authmysql authcustom"
Bene, ora proviamo a vedere se tutto funziona:
Avviamo Courier con
/etc/init.d/courier-authdaemon start
/etc/init.d/courier-imap start
quindi proviamo a collegarci a noi stessi con telnet (solito nomeutente e password):
telnet localhost 143
a login postmaster@topolinia.lan quivalapassword
a OK LOGIN Ok.
a logout
Se tutto è andato bene, facciamoli partire all'avvio
update-rc.d courier-authdaemon defaults
update-rc.d courier-imap defaults

Squirrelmail

Ora che abbiamo il nostro server funzionante con IMAP possiamo installare una vera webmail.
La scelta di Qmailrocks è Squirrelmail, ci sono naturalmente altre valide possibilità (come Horde). Squirrelmail, ci va bene e quindi... INSTALLIAMOLO!
Come dicevamo all'inizio c'è bisogno che PHP sia installato. Quindi scarichiamo l'ultima versione stabile di Squirrelmail da questo indirizzo.
Accederemo alla webmail con un indirizzo del tipo mail.topolinia.lan dal nostro browser, quindi alla porta web di quell'indirizzo Apache dovrà presentarci Squirrelmail.
Scompattiamo Squirrelmail in /var/www/webmail (ovvero, lo scompattiamo in /var/www e poi rinominiamo la cartella creata squirrelmail.x.x.x in webmail).
Diamo i permessi ad Apache di leggere questa cartella:
chown www-data /var/www/webmail/ -R
Quindi configuriamo Squirrelmail con lo script in ./config:
cd /var/www/webmail/conf ./conf.pl
In "Organization Preferences" cambiamo il nome della nostra "organizzazione" (e se volete il logo).
In "Server settings" cambiate il dominio: il dominio è il suffisso di tutti gli indirizzi email: esempio@dominio. Nel nostro caso topolinia.lan.
Più tardi se vi va potete scegliere un po' di temi (aspetti grafici differenti) per la webmail.
In "Address book" potete impostare una rubrica centralizzata se volete e consentire ai vostri utenti di avere da subito quei contatti (e eventualmente modificarli), bello!.
In "Plugins" ci sono un sacco di estensioni per squirrelmail... Installate quelle che volete (tutte?), per provarle e quando volete tornate qui per cambiarle.
In "Language Preferences" cambiamo il default language in it_IT.

Bene, terminata la configurazione, salvate e uscite dallo script. Ora dovete impostare Apache per rispondere a mail.topolinia.lan, per prima cosa, se mail.topolina.lan non è registrato in nessun dns impostate una entry nel file /etc/hosts del tipo:
127.0.0.1 mail.topolinia.lan
ora se, per esempio, fate un ping a mail.topolinia.lan risponderete voi stessi.

Ora andiamo in /etc/apache2/sites-available/ e creiamo il nuovo sito mail.topolinia.lan:
cd /etc/apache2/sites-available/
vim mail
e nel nuovo file inseriamo:
<VirtualHost *>
Servername mail.topolinia.lan
DocumentRoot var/www/webmail

<Directory *>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>

</VirtualHost>
Attiviamo il nuovo sito facendo un collegamento virtuale in sites-enabled:
cd ../sites-enabled/
ln -s /etc/apache2/sites-available/mail
Facciamo ripartire Apache con
apache2ctl restart
Quindi dovremmo poter accedere alla webmail andando all'indirizzo http://mail.topolinia.lan/.
Ora dovremmo poter usare la nostra casella di posta da web usando come username l'indirizzo completo (postmaster@topolinia.lan)!

Attenzione
Molti server di posta a cui proverete a mandare messaggi non vi autorizzeranno se il vostro dominio non ha un MX record: ovvero, in questo esempio, se non conoscono topolinia.lan.
Se invece nel campo From dei vostri messaggi impostate un indirizzo esterno e poi fate si che periodicamente Qmail vi controlli quell'indirizzo, tutto funzionerà... poi vedremo come fare!
Ultima modifica: 21/03/10 15:09
dariosky's home