GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Utenti e domini virtuali con Postfix, Courier e MySQL (Ubuntu 6.10 Edgy Eft)

Questo tutorial è Copyright (c) 2007 di Falko Timme. È 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 basato su 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 email vengano scansionate alla ricerca di spam e virus.

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 6.10 (Edgy Eft), quindi dovresti configurare un'installazione di base di Ubuntu 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.

Preferisco eseguire tutti i passaggi qui come utente root. Quindi, se non hai già creato un login di root, dovresti farlo ora:

sudo passwd root 

Successivamente, accedi come root:

su 

Se vuoi lavorare come utente normale invece che come root, ricorda di mettere sudo davanti a tutti i comandi mostrati in questo tutorial. Quindi quando corro

apt-get update 

dovresti eseguire

sudo apt-get update 

invece, ecc.

 

2 Installa Postfix, Courier, Saslauthd, MySQL, phpMyAdmin

Prima di installare questi pacchetti, dobbiamo modificare /etc/apt/sources.list e abilitare il repository dell'universo, quindi assicurati di avere le seguenti righe abilitate:

vi /etc/apt/sources.list
[...]

deb http://de.archive.ubuntu.com/ubuntu/ edgy universe

deb-src http://de.archive.ubuntu.com/ubuntu/ edgy universe

[...]

Quindi esegui

apt-get update

per aggiornare il database dei tuoi pacchetti.

Per installare Postfix, Courier, Saslauthd, MySQL e phpMyAdmin, eseguiamo semplicemente

apt-get install postfix postfix-mysql postfix-doc mysql-client mysql-server courier-authdaemon courier-authlib-mysql courier-pop courier-pop-ssl courier-imap courier-imap-ssl postfix-tls libsasl2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl phpmyadmin apache2 libapache2-mod-php5 php5 php5-mysql 

Ti verranno poste alcune domande:

Creare directory per l'amministrazione basata sul Web? <-- No
Tipo generale di configurazione? <-- Sito Internet
Nome e-mail? <-- server1.example.com
Certificato SSL richiesto <-- Ok

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 install build-essential dpkg-dev fakeroot debhelper libgdbm-dev libldap2-dev libpcre3-dev libssl-dev libsasl2-dev postgresql-dev po-debconf dpatch libdb4.3-dev libmysqlclient15-dev

cd /usr/src
apt-get suffisso sorgente

(Assicurati di utilizzare la versione corretta di Postfix nei seguenti comandi. Ho installato Postfix 2.3.3. Puoi scoprire la tua versione di Postfix eseguendo

 postconf -d | grep mail_version 

)

wget http://web.onda.com.br/nadal/postfix/VDA/postfix-2.3.3-vda.patch.gz
gunzip postfix-2.3.3-vda.patch.gz
cd postfix-2.3.3
patch -p1 <../postfix-2.3.3-vda.patch
dpkg-buildpackage
cd ..
dpkg -i postfix_2.3.3 -1_i386.deb
dpkg -i postfix-mysql_2.3.3-1_i386.deb

4 Creare il database MySQL per Postfix/Courier

Per impostazione predefinita, MySQL viene installato senza una password di root, che cambiamo immediatamente (sostituisci yourrootsqlpassword con la password che desideri utilizzare):

mysqladmin -u root password yourrootsqlpassword

Ora creiamo un database chiamato mail:

mysqladmin -u root -p create mail

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 di cui Postfix e Courier necessitano:

USE mail;

domini CREATE TABLE (
dominio varchar(50) NOT NULL,
CHIAVE PRIMARIA (dominio) )
TYPE=MyISAM;

CREATE TABLE inoltri (
source varchar(80) NOT NULL,
destination TEXT NOT NULL,
PRIMARY KEY (source) )
TYPE=MyISAM;

CREATE TABLE utenti (
email varchar(80) NOT NULL,
password varchar(20) NOT NULL,
quota INT(10) DEFAULT '10485760',
PRIMARY KEY (email )
) TYPE=MyISAM;

CREATE TABLE trasporto (
dominio varchar(128) NOT NULL predefinito '',
trasporto varchar(128) NOT NULL predefinito '',
CHIAVE UNICA dominio (dominio)
) TIPO =MyISAM;

quit;

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 protected] 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).

e-mail 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.

5 Configura Postfix

Ora dobbiamo dire a Postfix dove può trovare tutte le informazioni nel database. Quindi dobbiamo creare sei file di testo. Noterai che dico a Postfix di connettersi a MySQL sull'indirizzo IP 127.0.0.1 anziché su localhost. Questo perché Postfix è in esecuzione in una prigione chroot e non ha accesso al socket MySQL che proverebbe a connettersi se dicessi a Postfix di usare localhost. Se uso 127.0.0.1 Postfix usa la rete TCP per connettersi a MySQL, il che non è un problema nemmeno in una jail chroot (l'alternativa sarebbe spostare il socket MySQL nella jail chroot che causa altri problemi).

Assicurati che /etc/mysql/my.cnf contenga la seguente riga:

vi /etc/mysql/my.cnf
[...]

bind-address            = 127.0.0.1

[...]

Se dovessi modificare /etc/mysql/my.cnf, riavvia MySQL ora:

/etc/init.d/mysql restart

Corri

netstat -tap 

per assicurarsi che MySQL sia in ascolto su 127.0.0.1 (localhost.localdomain):

[email protected]:/usr/src# netstat -tap
Connessioni Internet attive (server e stabilite)
Proto Recv-Q Send-Q Indirizzo locale           Indirizzo estero        Stato       PID/nome del programma
tcp 0 0 localhost.localdo:mysql*:*ascolta 4556/mysqld
tcp 0 0*:smtp*:*ascolta 12994/master
tcp6 0 0*:imaps*:*ascolta 4816/couriertcpd
tcp6 0 0*:pop3s*:*Ascolta 4263/couriertcpd
tcp6 0 0*:pop3*:*ascolta 4198/couriertcpd
tcp6 0*:imap2*:*ascolta 4761/couriertcpd
tcp6 0 0*:www*:*ascolta 13283/apache2
tcp6 0 0*:ssh*:*ascolta 3192/sshd

Ora creiamo i nostri sei file di testo.

vi /etc/postfix/mysql-virtual_domains.cf
user = mail_admin

password = mail_admin_password

dbname = mail

query = SELECT domain AS virtual FROM domains WHERE domain='%s'

hosts = 127.0.0.1
vi /etc/postfix/mysql-virtual_forwardings.cf
user = mail_admin

password = mail_admin_password

dbname = mail

query = SELECT destination FROM forwardings WHERE source='%s'

hosts = 127.0.0.1
vi /etc/postfix/mysql-virtual_mailboxes.cf
user = mail_admin

password = mail_admin_password

dbname = mail

query = SELECT CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') FROM users WHERE email='%s'

hosts = 127.0.0.1
vi /etc/postfix/mysql-virtual_email2email.cf
user = mail_admin

password = mail_admin_password

dbname = mail

query = SELECT email FROM users WHERE email='%s'

hosts = 127.0.0.1
vi /etc/postfix/mysql-virtual_transports.cf
user = mail_admin

password = mail_admin_password

dbname = mail

query = SELECT transport FROM transport WHERE domain='%s'

hosts = 127.0.0.1
vi /etc/postfix/mysql-virtual_mailbox_limit_maps.cf
user = mail_admin

password = mail_admin_password

dbname = mail

query = SELECT quota FROM users WHERE email='%s'

hosts = 127.0.0.1

Quindi cambia i permessi e il gruppo di questi file:

chmod o=/etc/postfix/mysql-virtual_*.cf
chgrp postfix /etc/postfix/mysql-virtual_*.cf

Ora creiamo un utente e un gruppo chiamato vmail con la directory home /home/vmail. Qui è dove verranno archiviate tutte le caselle di posta.

groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /home/vmail -m

Quindi eseguiamo alcune configurazioni di Postfix. Assicurati di sostituire server1.example.com con un FQDN valido, altrimenti Postfix potrebbe non funzionare correttamente!

postconf -e 'myhostname =server1.example.com'
postconf -e 'mydestination =server1.example.com, localhost, localhost.localdomain'
postconf -e 'mynetworks =127.0.0.0/8'
postconf -e 'virtual_alias_domains ='
postconf -e ' virtual_alias_maps =proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, mysql:/etc/postfix/mysql-virtual_email2email.cf'
postconf -e 'virtual_mailbox_domains =proxy:mysql:/etc/postfix/mysql-virtual_domains.cf'
postconf -e 'virtual_mailbox_maps =proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf'
postconf -e 'virtual_mailbox_base =/home/vmail'
postconf -e 'virtual_uid_maps =static:5000'
postconf -e 'virtual_gid_maps =static:5000'
postconf -e ' smtpd_sasl_auth_enable =yes'
postconf -e 'broken_sasl_auth_clients =yes'
postconf -e 'smtpd_recipient_restrictions =permit_mynetworks, permit_sasl_authenticated, require_unauth_destination'
postconf -e 'smtpd_use_tls =yes'
postconf - e 'smtpd_tls_cer t_file =/etc/postfix/smtpd.cert'
postconf -e 'smtpd_tls_key_file =/etc/postfix/smtpd.key'
postconf -e 'transport_maps =proxy:mysql:/etc/postfix/mysql -virtual_transports.cf'
postconf -e 'virtual_create_maildirsize =yes'
postconf -e 'virtual_maildir_extended =yes'
postconf -e 'virtual_mailbox_limit_maps =proxy:mysql:/etc/postfix/mysql- virtual_mailbox_limit_maps.cf'
postconf -e 'virtual_mailbox_limit_override =yes'
postconf -e 'virtual_maildir_limit_message ="L'utente che stai tentando di raggiungere ha superato la quota."'
postconf -e 'virtual_overquota_bounce =sì
postconf -e 'proxy_read_maps =$ local_recipient_maps $ mydestination $ virtual_alias_maps $ virtual_alias_domains $ virtual_mailbox_maps $ virtual_mailbox_domains $ relay_recipient_maps $ relay_domains $ canonical_maps $ sender_canonical_maps $ recipient_canonical_maps $ relocated_maps $ transport_maps $ mynetworks $ virtual_mailbox_limit_maps'

Successivamente creiamo il certificato SSL necessario per TLS:

cd /etc/postfix
openssl req -new -outform PEM -out smtpd.cert -newkey rsa:2048 -nodes -keyout smtpd.key -keyform PEM -days 365 -x509

<-- Inserisci il nome del tuo Paese (ad es. "DE").
<-- Inserisci il nome del tuo stato o provincia.
<-- Inserisci la tua città.
<-- Inserisci la tua organizzazione Nome (ad es. il nome della tua azienda).
<-- Inserisci il nome della tua unità organizzativa (ad es. "Dipartimento IT").
<-- Inserisci il Nome di dominio completo del sistema (ad es. " server1.example.com").
<-- Inserisci il tuo indirizzo email.

Quindi cambia i permessi di smtpd.key:

chmod o= /etc/postfix/smtpd.key

6 Configura Saslauthd

Prima esecuzione

mkdir -p /var/spool/postfix/var/run/saslauthd

Quindi modifica /etc/default/saslauthd. Rimuovere il # davanti a START=yes e aggiungere le righe PARAMS="-m /var/spool/postfix/var/run/saslauthd -r" e PIDFILE="/var/spool/postfix/var/run/${ NOME}/saslauthd.pid". Il file dovrebbe quindi assomigliare a questo:

vi /etc/default/saslauthd
# This needs to be uncommented before saslauthd will be run automatically

START=yes



PARAMS="-m /var/spool/postfix/var/run/saslauthd -r"

PIDFILE="/var/spool/postfix/var/run/${NAME}/saslauthd.pid"



# You must specify the authentication mechanisms you wish to use.

# This defaults to "pam" for PAM support, but may also include

# "shadow" or "sasldb", like this:

# MECHANISMS="pam shadow"



MECHANISMS="pam"

Quindi crea il file /etc/pam.d/smtp. Dovrebbe contenere solo le due righe seguenti (assicurati di inserire i dettagli del database corretti):

vi /etc/pam.d/smtp
auth    required   pam_mysql.so user=mail_admin passwd=mail_admin_password host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1

account sufficient pam_mysql.so user=mail_admin passwd=mail_admin_password host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1

Quindi crea il file /etc/postfix/sasl/smtpd.conf. Dovrebbe assomigliare a questo:

vi /etc/postfix/sasl/smtpd.conf
pwcheck_method: saslauthd

mech_list: plain login

allow_plaintext: true

auxprop_plugin: mysql

sql_hostnames: 127.0.0.1

sql_user: mail_admin

sql_passwd: mail_admin_password

sql_database: mail

sql_select: select password from users where email = '%u'

Quindi riavvia Postfix e Saslauthd:

/etc/init.d/postfix restart
/etc/init.d/saslauthd restart

7 Configura corriere

Ora dobbiamo dire a Courier che dovrebbe autenticarsi sul nostro database MySQL. Per prima cosa, modifica /etc/courier/authdaemonrc e cambia il valore di authmodulelist in modo che legga:

vi /etc/courier/authdaemonrc
[...]

authmodulelist="authmysql"

[...]

Quindi fai un backup di /etc/courier/authmysqlrc e svuota il vecchio file:

cp /etc/courier/authmysqlrc /etc/courier/authmysqlrc_orig
cat /dev/null> /etc/courier/authmysqlrc

Quindi apri /etc/courier/authmysqlrc e inserisci le seguenti righe:

vi /etc/courier/authmysqlrc
MYSQL_SERVER localhost

MYSQL_USERNAME mail_admin

MYSQL_PASSWORD mail_admin_password

MYSQL_PORT 0

MYSQL_DATABASE mail

MYSQL_USER_TABLE users

MYSQL_CRYPT_PWFIELD password

#MYSQL_CLEAR_PWFIELD password

MYSQL_UID_FIELD 5000

MYSQL_GID_FIELD 5000

MYSQL_LOGIN_FIELD email

MYSQL_HOME_FIELD "/home/vmail"

MYSQL_MAILDIR_FIELD CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/')

#MYSQL_NAME_FIELD

MYSQL_QUOTA_FIELD quota

Quindi riavvia Courier:

/etc/init.d/courier-authdaemon restart
/etc/init.d/courier-imap restart
/etc/init.d/courier-imap-ssl restart
/etc/ init.d/courier-pop restart
/etc/init.d/courier-pop-ssl restart

Eseguendo

telnet localhost pop3

puoi vedere se il tuo server POP3 funziona correttamente. Dovrebbe restituire +OK Salve. (Digita quit per tornare alla shell di Linux.)

[email protected]:/etc/postfix# telnet localhost pop3
Tentativo 127.0.0.1...
Connesso a localhost.localdomain.
Il carattere di escape è '^]'.
+OK Salve.
chiudi
+OK Migliore fortuna la prossima volta.
Connessione chiusa da host straniero.

8 Modifica /etc/aliases

Ora dovremmo modificare /etc/aliases e specificare un alias per postmaster al suo interno. Puoi specificare uno dei tuoi indirizzi email esistenti in modo da poter ricevere notifiche al postmaster. Inoltre, cambia la riga principale in modo che i messaggi di root vengano inoltrati anche al postmaster:

vi /etc/aliases
# Added by installer for initial user

root:   postmaster

postmaster: [email protected]

Ogni volta che modifichi /etc/aliases, devi eseguire

newaliases

in seguito e riavvia Postfix:

/etc/init.d/postfix restart  

9 Installa amavisd-new, SpamAssassin e ClamAV

Per installare amavisd-new, spamassassin e clamav, eseguire il comando seguente:

apt-get install amavisd-new spamassassin clamav clamav-daemon zoo unzip bzip2 unzoo libnet-ph-perl libnet-snpp-perl libnet-telnet-perl nomarch lzop pax

Successivamente dobbiamo configurare amavisd-new. La configurazione è suddivisa in vari file che risiedono nella directory /etc/amavis/conf.d. Dai un'occhiata a ciascuno di essi per familiarizzare con la configurazione. La maggior parte delle impostazioni va bene, tuttavia dobbiamo modificare tre file:

Per prima cosa dobbiamo abilitare ClamAV e SpamAssassin in /etc/amavis/conf.d/15-content_filter_mode decommentando le righe @bypass_virus_checks_maps e @bypass_spam_checks_maps:

vi /etc/amavis/conf.d/15-content_filter_mode

Il file dovrebbe assomigliare a questo:

use strict;



# You can modify this file to re-enable SPAM checking through spamassassin

# and to re-enable antivirus checking.



#

# Default antivirus checking mode

# Uncomment the two lines below to enable it back

#



@bypass_virus_checks_maps = (

   \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);





#

# Default SPAM checking mode

# Uncomment the two lines below to enable it back

#



@bypass_spam_checks_maps = (

   \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);



1;  # insure a defined return

E poi dovresti dare un'occhiata alle impostazioni dello spam e alle azioni per spam-/virus-mails in /etc/amavis/conf.d/20-debian_defaults. Non è necessario modificare nulla se le impostazioni predefinite sono ok per te. Il file contiene molte spiegazioni, quindi non è necessario spiegare le impostazioni qui:

vi /etc/amavis/conf.d/20-debian_defaults
$QUARANTINEDIR = "$MYHOME/virusmails";



$log_recip_templ = undef;    # disable by-recipient level-0 log entries

$DO_SYSLOG = 1;              # log via syslogd (preferred)

$syslog_ident = 'amavis';    # syslog ident tag, prepended to all messages

$syslog_facility = 'mail';

$syslog_priority = 'debug';  # switch to info to drop debug output, etc



$enable_db = 1;              # enable use of BerkeleyDB/libdb (SNMP and nanny)

$enable_global_cache = 1;    # enable use of libdb-based cache if $enable_db=1



$inet_socket_port = 10024;   # default listenting socket



$sa_spam_subject_tag = '***SPAM*** ';

$sa_tag_level_deflt  = 2.0;  # add spam info headers if at, or above that level

$sa_tag2_level_deflt = 6.31; # add 'spam detected' headers at that level

$sa_kill_level_deflt = 6.31; # triggers spam evasive actions

$sa_dsn_cutoff_level = 10;   # spam level beyond which a DSN is not sent



$sa_mail_body_size_limit = 200*1024; # don't waste time on SA if mail is larger

$sa_local_tests_only = 0;    # only tests which do not require internet access?



[...]

$final_virus_destiny      = D_DISCARD;  # (data not lost, see virus quarantine)

$final_banned_destiny     = D_BOUNCE;   # D_REJECT when front-end MTA

$final_spam_destiny       = D_BOUNCE;

$final_bad_header_destiny = D_PASS;     # False-positive prone (for spam)

[...]

Infine, modifica /etc/amavis/conf.d/50-user e aggiungi la riga $pax='pax'; nel mezzo:

vi /etc/amavis/conf.d/50-user
[...]

$pax='pax';

[...]

Successivamente, esegui questi comandi per aggiungere l'utente clamav al gruppo amavis e riavviare amavisd-new e ClamAV:

adduser clamav amavis
/etc/init.d/amavis restart
/etc/init.d/clamav-daemon restart

Successivamente dobbiamo modificare il file di configurazione del demone Freshclam (che è il demone che preleva regolarmente e automaticamente le firme dei virus più recenti da un mirror ClamAV) perché contiene un piccolo bug. Apri /etc/clamav/freshclam.conf e modifica la riga NotifyClamd come mostrato di seguito:

vi /etc/clamav/freshclam.conf
[...]

NotifyClamd /etc/clamav/clamd.conf

[...]

Quindi riavvia Freshclam (assicurati che nessun altro processo Freshclam (magari di un'altra installazione ClamAV) sia in esecuzione perché il nostro Freshclam non si avvierà):

/etc/init.d/clamav-freshclam restart

Ora dobbiamo configurare Postfix per reindirizzare la posta in arrivo tramite amavisd-new:

postconf -e 'content_filter =amavis:[127.0.0.1]:10024'
postconf -e 'receive_override_options =no_address_mappings'

Successivamente aggiungi le seguenti righe a /etc/postfix/master.cf:

vi /etc/postfix/master.cf
[...]

amavis unix - - - - 2 smtp

        -o smtp_data_done_timeout=1200

        -o smtp_send_xforward_command=yes



127.0.0.1:10025 inet n - - - - smtpd

        -o content_filter=

        -o local_recipient_maps=

        -o relay_recipient_maps=

        -o smtpd_restriction_classes=

        -o smtpd_client_restrictions=

        -o smtpd_helo_restrictions=

        -o smtpd_sender_restrictions=

        -o smtpd_recipient_restrictions=permit_mynetworks,reject

        -o mynetworks=127.0.0.0/8

        -o strict_rfc821_envelopes=yes

        -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks

        -o smtpd_bind_address=127.0.0.1

Quindi riavvia Postfix:

/etc/init.d/postfix restart

Ora corri

netstat -tap

e dovresti vedere Postfix (master) in ascolto sulla porta 25 (smtp) e 10025 e amavisd-new sulla porta 10024:

[email protetta]:/usr/local/sbin# netstat -tap
Connessioni Internet attive (server e stabilite)
Proto Recv-Q Send-Q Indirizzo locale          Indirizzo estero         Stato       PID/nome del programma
TCP 0 0 localhost.localdo:10024*:*Ascolta 16043 /Amavisd (Mast
TCP 0 0 localhost.localdo:10025*:*Ascolta 15794 /master
tcp 0 0 localhost.localdo:mysql* :*Ascolta 4783 /mysqld
tcp 0 0*:smtp*:*ascolta 15794 /master
tcp6 0*:imaps*:*ascolta 13452 /couriertcpd
tcp6 0 0*:pop3s *:*Ascolta 13517/couriertcpd
tcp6 0 0*:pop3*:*Ascolta 13480/couriertcpd
tcp6 0 0*:imap2*:*ascolta 13412/c ouriertcpd
tcp6 0 0*:www*:*ascolta 4489/apache2
tcp6 0 0*:ssh*:*ascolta 3193/sshd

 

10 Installa Razor, Pyzor e DCC e configura SpamAssassin

Razor, Pyzor e DCC sono filtri antispam che utilizzano una rete di filtraggio collaborativa. Per installarli, esegui

apt-get install razor pyzor dcc-client

Ora dobbiamo dire a SpamAssassin di usare questi tre programmi. Modifica /etc/spamassassin/local.cf e aggiungi le seguenti righe:

vi /etc/spamassassin/local.cf
[...]



# dcc

use_dcc 1

dcc_path /usr/bin/dccproc

dcc_add_header 1

dcc_dccifd_path /usr/sbin/dccifd



#pyzor

use_pyzor 1

pyzor_path /usr/bin/pyzor

pyzor_add_header 1



#razor

use_razor2 1

razor_config /etc/razor/razor-agent.conf



#bayes

use_bayes 1

use_bayes_rules 1

bayes_auto_learn 1

Riavvia amavisd-new in seguito:

/etc/init.d/amavis restart

11 Notifiche di superamento della quota

Se desideri ricevere notifiche su tutti gli account e-mail che superano la quota, procedi come segue:

cd /usr/local/sbin/
wget http://puuhis.net/vhcs/quota.txt
mv quota.txt quota_notify
chmod 755 quota_notify

Apri /usr/local/sbin/quota_notify e modifica le variabili in alto. Più in basso nel file (verso la fine) ci sono due righe in cui dovresti aggiungere un segno %:

vi /usr/local/sbin/quota_notify
[...]

my $POSTFIX_CF = "/etc/postfix/main.cf";

my $MAILPROG = "/usr/sbin/sendmail -t";

my $WARNPERCENT = 80;

my @POSTMASTERS = ('[email protected]');

my $CONAME = 'My Company';

my $COADDR = '[email protected]';

my $SUADDR = '[email protected]';

my $MAIL_REPORT = 1;

my $MAIL_WARNING = 1;

[...]

           print "Subject: WARNING: Your mailbox is $lusers{$luser}% full.\n";

[...]

           print "Your mailbox: $luser is $lusers{$luser}% full.\n\n";

[...]

Corri

crontab -e

per creare un processo cron per quello script:

0 0 * * * /usr/local/sbin/quota_notify &> /dev/null

(Nota (un po' fuori tema):su Ubuntu crontab -e aprirà automaticamente l'editor nano. Se sei abituato a lavorare con l'editor vi (come me), esegui i seguenti comandi:

rm -f /etc/alternatives/editor
ln -s /usr/bin/vi /etc/alternatives/editor

Successivamente, esegui crontab -e e verrà visualizzato vi.)

12 Postfix di prova

Per vedere se Postfix è pronto per SMTP-AUTH e TLS, esegui

telnet localhost 25

Dopo aver stabilito la connessione al tipo di server di posta Postfix

ehlo localhost

Se vedi le linee

250-STARTTLS

e

250-AUTH

va tutto bene:

[email protected]:/usr/local/sbin# telnet localhost 25
Tentativo 127.0.0.1...
Connesso a localhost.localdomain.
Il carattere di escape è '^]'.
/>220 server1.example.com ESMTP Postfix (Ubuntu)
ehlo localhost
250-server1.example.com
250-PIPELINING
250-SIZE 10240000
250 -VRFY
250-ETRN
250-STARTTLS
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
chiudi
221 2.0.0 Ciao
Connessione chiusa da host esterno.
[email protetta]:/usr/local/sbin#

Digita

quit

per tornare alla shell di sistema.

13 Popola il database e verifica

Per popolare il database puoi usare la shell MySQL:

mysql -u root -p
USE mail;

Almeno devi creare voci nelle tabelle domini e utenti :

INSERT INTO `domains` (`domain`) VALUES ('example.com');
INSERT INTO `users` (`email`, `password`, `quota`) VALUES ('[email protected]', ENCRYPT('segreto'), 10485760);

(Assicurati di utilizzare la sintassi ENCRYPT nella seconda istruzione INSERT per crittografare la password!)

Se vuoi inserire voci nelle altre due tabelle, sarebbe simile a questa:

INSERT INTO `forwardings` (`source`, `destination`) VALUES ('[email protected]', '[email protected]');
INSERT INTO `transport` (`domain`, `transport`) VALUES ('example.com', 'smtp:mail.example.com');

Per uscire dalla shell MySQL, digita

quit;

Per la maggior parte delle persone è più facile se hanno un front-end grafico per MySQL; quindi puoi anche usare phpMyAdmin (in questo esempio sotto http://192.168.0.100/phpmyadmin/ o http://server1.example.com/phpmyadmin/) per amministrare la posta Banca dati. Anche in questo caso, quando crei un utente, assicurati di utilizzare la funzione ENCRYPT per crittografare la password:

Non credo di dover spiegare ulteriormente la tabella dei domini e degli utenti.

La tabella degli inoltri può avere voci come le seguenti:

fonte destinazione  
[email protetta] [email protetta] Reindirizza le email per [email protetta] a [email protetta]
@example.com [email protetta] Crea un account Catch-All per [email protetta] Tutte le email a example.com arriveranno a [email protetta], ad eccezione di quelle che esistono nella tabella degli utenti (ovvero, se [email protetta] esiste in la tabella degli utenti, i messaggi di posta a [email protetta] arriveranno comunque a [email protetta]).
@example.com @anotherdomain.tld Questo reindirizza tutte le email a example.com allo stesso utente su un altro dominio.tld. Ad esempio, le email a [email protetta] verranno inoltrate a [email protetta]
[email protetta] [email protetta], [e-mail protetta] Inoltra email per [email protetta] a due o più indirizzi email. Tutti gli indirizzi e-mail elencati sotto la destinazione ricevono una copia dell'e-mail.

La tabella di trasporto può avere voci come queste:

dominio trasporto  
example.com : Consegna e-mail per esempio.com localmente. È come se questo record non esistesse affatto in questa tabella.
example.com smtp:mail.anotherdomain.tld Consegna tutte le email per esempio.com tramite smtp al server mail.anotherdomain.com.
example.com smtp:mail.anotherdomain.tld:2025 Consegna tutte le email per esempio.com tramite smtp al server mail.anotherdomain.com, ma sulla porta 2025, non 25 che è la porta predefinita per smtp.
example.com

smtp:[1.2.3.4]
smtp:[1.2.3.4]:2025
smtp:[mail.anotherdomain.tld]

Le parentesi quadre impediscono a Postfix di eseguire ricerche del record DNS MX per l'indirizzo tra parentesi quadre. Ha senso per gli indirizzi IP.
.example.com smtp:mail.anotherdomain.tld Mail for any subdomain of example.com is delivered to mail.anotherdomain.tld.
* smtp:mail.anotherdomain.tld All emails are delivered to mail.anotherdomain.tld.
[email protected] smtp:mail.anotherdomain.tld Emails for [email protected] are delivered to mail.anotherdomain.tld.

See

man transport 

per ulteriori dettagli.

Please keep in mind that the order of entries in the transport table is important! The entries will be followed from the top to the bottom.

Important: Postfix uses a caching mechanism for the transports, therefore it might take a while until you changes in the transport table take effect. If you want them to take effect immediately, run

postfix reload 

after you have made your changes in the transport table.

14 References

  • Tutorial:ISP-style Email Service with Debian-Sarge and Postfix 2.1:http://workaround.org/articles/ispmail-sarge/
  • Postfix + Quota:http://vhcs.net/new/modules/newbb/viewtopic.php?topic_id=3496&forum=17
  • Mail Passwords Encrypted using saslauthd:http://www.syscp.de/docs/public/contrib/cryptedmailpws

  • Postfix MTA:http://www.postfix.org/
  • Postfix Quota Patch:http://web.onda.com.br/nadal/
  • phpMyAdmin:http://www.phpmyadmin.net/
  • Ubuntu:http://www.ubuntu.com/

Ubuntu
  1. Utenti virtuali e domini con Postfix, Courier, MySQL e SquirrelMail (Ubuntu 14.04LTS)

  2. Hosting virtuale con Proftpd e MySQL (quota inclusa) su Ubuntu 14.04LTS

  3. Utenti e domini virtuali con Postfix, Courier, MySQL e SquirrelMail (Ubuntu 13.10)

  4. Utenti e domini virtuali con Sendmail

  5. Mailserver con utenti e domini virtuali che utilizzano Postfix e Dovecot su CentOS 6 VPS

Utenti e domini virtuali con Postfix, Courier, MySQL e SquirrelMail (Ubuntu 12.10)

Hosting virtuale con vsftpd e MySQL su Ubuntu 12.10

Hosting virtuale con Proftpd e MySQL (quota inclusa) su Ubuntu 12.10

Utenti virtuali e domini con Postfix, Courier, MySQL e SquirrelMail (Debian Wheezy)

Utenti e domini virtuali con Postfix, Courier, MySQL e SquirrelMail (CentOS 6.3 x86_64)

Utenti virtuali e domini con Postfix, Courier, MySQL e SquirrelMail (Fedora 18 x86_64)