Questo tutorial è protetto da Copyright (c) 2014 di Falko Timme e Srijan Kishore. È derivato da un tutorial di Christoph Haas che puoi trovare su http://workaround.org. Sei libero di utilizzare questo tutorial con la licenza Creative Commons 2.5 o qualsiasi versione successiva.
Questo documento descrive come installare un server di posta Postfix basato su utenti e domini virtuali, ovvero utenti e domini che si trovano in un database MySQL. Dimostrerò anche l'installazione e la configurazione di Courier (Courier-POP3, Courier-IMAP), in modo che Courier possa autenticarsi sullo stesso database MySQL utilizzato da Postfix.
Il server Postfix risultante è in grado di SMTP-AUTH e TLS e quota (quota non è incorporata in Postfix per impostazione predefinita, mostrerò come applicare una patch a Postfix in modo appropriato). Le password sono archiviate in crittografate modulo nel database (la maggior parte dei documenti che ho trovato riguardavano password in testo normale, il che rappresenta un rischio per la sicurezza). In aggiunta a ciò, questo tutorial copre l'installazione di Amavisd , SpamAssassin e ClamAV in modo che le e-mail vengano scansionate alla ricerca di spam e virus. Mostrerò anche come installare SquirrelMail come interfaccia webmail in modo che gli utenti possano leggere e inviare e-mail e modificare le proprie password.
Il vantaggio di tale configurazione "virtuale" (utenti virtuali e domini in un database MySQL) è che è molto più performante di una configurazione basata su utenti di sistema "reali". Con questa configurazione virtuale il tuo server di posta può gestire migliaia di domini e utenti. Inoltre, è più facile da amministrare perché hai a che fare con il database MySQL solo quando aggiungi nuovi utenti/domini o modifichi quelli esistenti. Niente più comandi postmap per creare file db, niente più ricarica di Postfix, ecc. Per l'amministrazione del database MySQL puoi usare strumenti web based come phpMyAdmin che sarà installato anche in questo howto. Il terzo vantaggio è che gli utenti hanno un indirizzo e-mail come nome utente (invece di un nome utente + un indirizzo e-mail) che è più facile da capire e tenere a mente.
Questo howto vuole essere una guida pratica; non copre le basi teoriche. Sono trattati in molti altri documenti nel Web.
Questo documento viene fornito senza garanzie di alcun tipo! Voglio dire che questo non è l'unico modo per creare un sistema del genere. Ci sono molti modi per raggiungere questo obiettivo, ma questo è il modo in cui prendo. Non garantisco che questo funzionerà per te!
1 Nota preliminare
Questo tutorial è basato su Ubuntu 14.04 Server (Trusty Tahr), quindi dovresti configurare un'installazione di base del server Ubuntu 14.04 prima di continuare con questo tutorial. Il sistema dovrebbe avere un indirizzo IP statico. Uso 192.168.0.100 come indirizzo IP in questo tutorial e server1.example.com come nome host.
Assicurati di aver effettuato l'accesso come root (digita
sudo su
per diventare root), perché dobbiamo eseguire tutti i passaggi di questo tutorial come utente root.
È molto importante rendere /bin/sh un collegamento simbolico a /bin/bash...
trattino di riconfigurazione dpkg
Utilizzare dash come shell di sistema predefinita (/bin/sh)? <-- No
... e che disabiliti AppArmor, se stai ricevendo apparmor:servizio non riconosciuto, quindi rimuovilo da update-rc.d
servizio apparmor stop
update-rc.d -f apparmor remove
apt-get remove apparmor apparmor-utils
2 Installa Postfix, Courier, Saslauthd, MySQL, phpMyAdmin
Per installare Postfix, Courier, Saslauthd, MySQL e phpMyAdmin, eseguiamo semplicemente
apt-get install postfix postfix-mysql postfix-doc mysql-client mysql-server corriere-authdaemon corriere-authlib-mysql corriere-pop corriere-pop-ssl corriere-imap corriere-imap-ssl libsasl2-2 libsasl2-modules libsasl2-modules -sql sasl2-bin libpam-mysql openssl phpmyadmin apache2 libapache2-mod-php5 php5 php5-mysql libpam-smbpass
Ti verranno poste alcune domande:
Nuova password per l'utente "root" di MySQL:<-- yourrootsqlpassword
Ripetere la password per l'utente "root" di MySQL:<-- yourrootsqlpassword
Creare directory per l'amministrazione basata sul Web? <-- No
Tipo generale di configurazione della posta:<-- Sito Internet
Nome e-mail del sistema:<-- server1.example.com
Certificato SSL richiesto <-- Ok
Server Web da riconfigurare automaticamente:<-- apache2
Configura il database per phpmyadmin con dbconfig-common? <-- No
3 Applicare la patch di quota a Postfix
Dobbiamo ottenere i sorgenti di Postfix, correggerli con la quota patch, creare nuovi pacchetti Postfix .deb e installare quei pacchetti .deb:
apt-get build-dep postfix
Qualche volta puoi ricevere un errore come segue:-
[email protected]:~# apt-get build-dep postfix
Lettura degli elenchi dei pacchetti... Fine
Costruzione dell'albero delle dipendenze
Lettura delle informazioni sullo stato... Fine
E:Tu deve inserire alcuni URI di "sorgente" nel tuo sources.list
[email protected]:~#
Puoi correggerlo come segue, aggiungendo i repository di origine:
vi /etc/apt/sources.list
Inserisci la voce come nel mio caso è
deb http://archive.ubuntu.com/ubuntu trusty universo con restrizioni principali
deb http://archive.ubuntu.com/ubuntu trusty-updates universo con restrizioni principali
deb http://security.ubuntu .com/ubuntu trusty-security universo limitato principale multiverso
deb http://archive.canonical.com/ubuntu partner fidato
deb-src http://archive. ubuntu.com/ubuntu trusty universo con restrizioni principali
deb-src http://archive.ubuntu.com/ubuntu trusty-updates universo con restrizioni principali
deb-src http://security.ubuntu.com/ ubuntu trusty-security principale universo limitato multiverso
deb-src http://archive.canonical.com/ubuntu trusty partner
Avanti
apt-get update
apt-get build-dep postfix
cd /usr/src
apt-get suffisso sorgente
(Assicurati di utilizzare la versione di Postfix corretta nei seguenti comandi. Ho installato Postfix 2.11.0. Puoi scoprire la tua versione di Postfix eseguendo
postconf -d | grep mail_version
L'output dovrebbe essere simile a questo:
[email protetta]:/usr/src# postconf -d | grep mail_version
mail_version =2.11.0
milter_macro_v =$mail_name $mail_version
[email protected]:/usr/src#
wget http://vda.sourceforge.net/VDA/postfix-vda-v13-2.10.0.patch
cd postfix-2.11.0
patch -p1 <../postfix-vda-v13 -2.10.0.patch
Quindi apri debian/rules e cambia DEB_BUILD_HARDENING da 1 a 0:
vi debian/regole
[...] export DEB_BUILD_HARDENING=0 [...] |
Se non lo fai, la tua build fallirà con i seguenti messaggi di errore:
maildir.c:nella funzione âdeliver_maildirâ:
maildir.c:974:17:errore:format not a string literal and no format arguments [-Werror=format-security]
maildir.c:977:17 :errore:formattare non una stringa letterale e nessun argomento di formato [-Werror=format-security]
maildir.c:983:17:errore:formattare non una stringa letterale e nessun argomento di formato [-Werror=format-security ]
maildir.c:986:17:errore:format non una stringa letterale e nessun argomento di formato [-Werror=format-security]
maildir.c:Nella funzione âsql2fileâ:
maildir. c:404:25:avviso:ignorando il valore di ritorno di âreadâ, dichiarato con l'attributo warn_unused_result [-Wunused-result]
maildir.c:417:26:avviso:ignorando il valore di ritorno di âwriteâ, dichiarato con l'attributo warn_unused_result [- Wunused-result]
cc1:alcuni avvisi vengono trattati come errori
make:*** [maildir.o] Errore 1
make:Leaving directory `/usr/src/postfix-2.11. 0/src/virtual'
make[1]:*** [aggiornamento] Errore 1
make[1]:Uscita dalla directory `/usr/src/postfi x-2.11.0'
make:*** [build] Errore 2
dpkg-buildpackage:errore:debian/rules build ha restituito lo stato di uscita dell'errore 2
[email protected]:/usr /src/postfix-2.11.0#
Ora possiamo creare i nuovi pacchetti .deb di Postfix:
pacchetto dpkg-build
Ora andiamo di una directory in alto, ecco dove sono stati creati i nuovi pacchetti .deb:
cd..
Il comando
ls -l
ti mostra i pacchetti disponibili:
[email protected]:/usr/src# ls -l
total 6824
drwxr-xr-x 18 root root 4096 Apr 30 04:28 postfix-2.11.0
-rw-r --r-- 1 radice radice 46756 30 aprile 04:28 postfix-cdb_2.11.0-1_amd64.deb
-rw-r--r-- 1 radice radice 142842 30 aprile 04:28 postfix-dev_2.11.0 -1_all.deb
-rw-r--r-- 1 radice radice 851842 30 aprile 04:28 postfix-doc_2.11.0-1_all.deb
-rw-r--r-- 1 radice root 53898 30 aprile 04:28 postfix-ldap_2.11.0-1_amd64.deb
-rw-r--r-- 1 radice radice 48500 30 aprile 04:28 postfix-mysql_2.11.0-1_amd64.deb
-rw-r--r-- 1 radice radice 48610 30 aprile 04:28 postfix-pcre_2.11.0-1_amd64.deb
-rw-r--r-- 1 radice radice 48324 30 aprile 04:28 postfix-pgsql_2.11.0-1_amd64.deb
-rw-r--r-- 1 radice radice 55701 7 giugno 2013 postfix-vda-v13-2.10.0.patch
-rw-r-- r-- 1 radice radice 267855 30 aprile 04:27 postfix_2.11.0-1.diff.gz
-rw-r--r-- 1 radice radice 1522 30 aprile 04:27 postfix_2.11.0-1.dsc
-rw-r--r-- 1 radice radice 3885 30 aprile 04:28 postfix_2.11.0-1_amd64.changes
-rw-r --r-- 1 radice radice 1329238 30 aprile 04:28 postfix_2.11.0-1_amd64.deb
-rw-r--r-- 1 radice radice 4034741 feb 12 01:38 postfix_2.11.0.orig.tar .gz
[email protetta]:/usr/src#
Scegli i pacchetti postfix e postfix-mysql e installali in questo modo:
dpkg -i postfix_2.11.0-1_amd64.deb postfix-mysql_2.11.0-1_amd64.deb
4 Creare il database MySQL per Postfix/Courier
Ora creiamo un database chiamato mail:
mysqladmin -u root -p crea posta
Ti verrà posta questa domanda:
Inserisci la password:<-- yourrootsqlpassword
Successivamente, andiamo alla shell MySQL:
mysql -u root -p
Sulla shell MySQL, creiamo l'utente mail_admin con la password mail_admin_password (sostituirla con la propria password) che ha i privilegi SELECT,INSERT,UPDATE,DELETE sul database di posta. Questo utente sarà utilizzato da Postfix e Courier per connettersi al database di posta:
GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* A 'mail_admin'@'localhost' IDENTIFICATO DA 'mail_admin_password';
GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO 'mail_admin'@'localhost. localdomain' IDENTIFICATO DA 'mail_admin_password';
PRIVILEGI FLUSH;
Sempre sulla shell MySQL, creiamo le tabelle necessarie a Postfix e Courier:
UTILIZZA la posta;
domini CREATE TABLE (
dominio varchar(50) NOT NULL,
PRIMARY KEY (domain) )
ENGINE=MyISAM;
CREATE TABLE inoltri (
source varchar(80) NOT NULL,
destination TEXT NOT NULL,
PRIMARY KEY (source) )
ENGINE=MyISAM;
CREATE TABLE utenti (
email varchar(80) NOT NULL,
password varchar(20) NOT NULL,
quota INT(10) DEFAULT '10485760',
PRIMARY KEY (email )
) MOTORE=MyISAM;
CREATE TABLE trasporto (
dominio varchar(128) NOT NULL predefinito '',
trasporto varchar(128) NOT NULL predefinito '',
CHIAVE UNICA dominio (dominio)
) MOTORE =MyISAM;
esci;
Come avrai notato, con l'abbandono; comando abbiamo lasciato la shell MySQL e siamo tornati sulla shell Linux.
I domini la tabella memorizzerà ogni dominio virtuale per il quale Postfix dovrebbe ricevere e-mail (ad es. example.com ).
dominio |
example.com |
Gli inoltri tabella serve per alias un indirizzo e-mail a un altro, ad es. inoltra email per [email protetta] a [email protetta] .
fonte | destinazione |
[email protetta] | [email protetta] |
Gli utenti la tabella memorizza tutti gli utenti virtuali (ovvero gli indirizzi e-mail, perché l'indirizzo e-mail e il nome utente sono gli stessi) e le password (in crittografato form!) e un valore di quota per ciascuna casella di posta (in questo esempio il valore predefinito è 10485760 byte che significa 10 MB).
password | quota | |
[email protetta] | No9.E4skNvGa. ("segreto" in forma crittografata) | 10485760 |
Il trasporto la tabella è facoltativa, è per utenti avanzati. Permette di inoltrare mail per singoli utenti, interi domini o tutte le mail ad un altro server. Ad esempio,
dominio | trasporto |
example.com | smtp:[1.2.3.4] |
inoltrerebbe tutte le email per example.com tramite il protocollo smtp al server con indirizzo IP 1.2.3.4 (le parentesi quadre [] significa "non effettuare una ricerca del record DNS MX" (che ha senso per gli indirizzi IP...). Se invece utilizzi un nome di dominio completo (FQDN), non utilizzeresti le parentesi quadre.).
A proposito, (suppongo che l'indirizzo IP del tuo sistema di server di posta sia 192.168.0.100) puoi accedere a phpMyAdmin su http://192.168.0.100/phpmyadmin/ in un browser e accedere come mail_admin. Quindi puoi dare un'occhiata al database. Successivamente puoi usare phpMyAdmin per amministrare il tuo server di posta.