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).
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] | 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
15 Links
- 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/