Questa guida vuole essere una quick reference per installare un server di posta con antispam e gestione relativamente semplice di utenti e domini, tramite ubuntu 8.04 TLS 64bit.
Le feature principali sono:
– SMTP-AUTH e TLS
– password encrypted
– Amavisd, SpamAssassin e ClamAV
La guida di riferimento principale la potete trovare all’indirizzo http://www.howtoforge.com/virtual-users-domains-postfix-courier-mysql-squirrelmail-ubuntu8.04, la scrivo per il semplice motivo che la versione di ubuntu a 64bit differisce per alcuni pacchetti rispetto alla versione equivalente a 32bit. A differenza della guida principale ho deciso di non utilizzare la quota, in quanto volevo un sistema che non necessitasse di alcun tipo di ricompilazione esterna.
1. Preliminari
Eseguiamo:
[email protected]: sudo su
[email protected]: ln -sf /bin/bash /bin/sh
[email protected]: /etc/init.d/apparmor stop
[email protected]: update-rc.d -f apparmor remove
2. Install Postfix, Courier, Saslauthd, MySQL, phpMyAdmin
Procediamo con l’installazione dei pacchetti che ci servono:
[email protected]: 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 libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl phpmyadmin apache2 libapache2-mod-php5 php5 php5-mysql libpam-smbpass
A questo punto vi verranno fatte delle domande post installazione a cui dovrete risopndere come a seguire:
New password for the MySQL “root” user: <– yourrootsqlpassword
Repeat password for the MySQL “root” user: <– yourrootsqlpassword
Create directories for web-based administration? <– No
General type of mail configuration: <– Internet Site
System mail name: <– server1.example.com
SSL certificate required <– Ok
Web server to reconfigure automatically: <– apache2
A questo punto sulla guida originale si passava alla configurazione della quota, che noi non vogliamo usare, se voi volete farlo, prendete come riferimento la guida originale.
3. Creiamo il database MySQL per Postfix/Courier
Creiamo il database mail
[email protected]: mysqladmin -u root -p create mail
entriamo nella shell di mysql
[email protected]: mysql -u root -p
On the MySQL shell, we create the user mail_admin with the passwort mail_admin_password (replace it with your own password) who has SELECT,INSERT,UPDATE,DELETE privileges on the mail database. This user will be used by Postfix and Courier to connect to the mail database
Sulla shell di MySQL, creeremo l’utente mail_admin con la password “mail_admin_password“, che avrà diritti di SELECT,INSERT,UPDATE,DELETE sul database mail.
mysql> GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO 'mail_admin'@'localhost' IDENTIFIED BY 'mail_admin_password';
mysql> GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO 'mail_admin'@'localhost.localdomain' IDENTIFIED BY 'mail_admin_password';
mysql> FLUSH PRIVILEGES;
selezioniamo ora il database mail
mysql> USE mail;
Creiamo ora le tabelle che ci servono:
CREATE TABLE domains (
domain varchar(50) NOT NULL,
PRIMARY KEY (domain) )
TYPE=MyISAM;
CREATE TABLE forwardings (
source varchar(80) NOT NULL,
destination TEXT NOT NULL,
PRIMARY KEY (source) )
TYPE=MyISAM;
CREATE TABLE users (
email varchar(80) NOT NULL,
password varchar(20) NOT NULL,
PRIMARY KEY (email)
) TYPE=MyISAM;
CREATE TABLE transport (
domain varchar(128) NOT NULL default '',
transport varchar(128) NOT NULL default '',
UNIQUE KEY domain (domain)
) TYPE=MyISAM;
quit;
A questo punto avremo le seguenti tabelle:
– domains : indica quali domini gestisce il nostro server di posta
– forwardings : gestisce la lista dei forwarding di una determinata casella di posta verso un altra
– users : le effettive caselle di posta, con tanto di nome utente e password
– transport: serve a passare la gestione della singola email a un altro server, sintassi smtp:[1.2.3.4] le parentesi quadre indicano che non si deve fare nessuna query al dns, in questo caso va indicato l'indirizzo ip corretto.
Ora tramite phpmyadmin accessibile sul vostro webserver http://ip-del-server/phpmyadmin potrete gestire tutto quel che riguarda gli account di posta.
4- Configurazione Postfix
Editiamo
vi /etc/mysql/my.cnf
e configuriamo la voce
[...] bind-address = 127.0.0.1 [...]
se abbiamo modificato il file, eventualmente lanciamo il comando /etc/init.d/mysql restart
Creiamo il file
vi /etc/postfix/mysql-virtual_domains.cf
e inseriamo
user = mail_admin password = mail_admin_password dbname = mail query = SELECT domain AS virtual FROM domains WHERE domain='%s' hosts = 127.0.0.1
creiamo il file
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
creiamo il file
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
creiamo il file
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
creiamo il file
nano /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
Modifichiamo ora i permessi ai file
chmod o= /etc/postfix/mysql-virtual_*.cf
chgrp postfix /etc/postfix/mysql-virtual_*.cf
Creiamo ora il gruppo e l’utente vmail
groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /home/vmail -m
Eseguiamo ora i comandi di configurazione di postfix, facendo cura di modificare il server server1.example.com con il nostro FQDN.
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_sasl_authenticated_header = yes'
postconf -e 'smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination'
postconf -e 'smtpd_use_tls = yes'
postconf -e 'smtpd_tls_cert_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_mailbox_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 = "The user you are trying to reach is over quota."'
#postconf -e 'virtual_overquota_bounce = yes'
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'
Creiamo ora il certificato ssl
cd /etc/postfix
openssl req -new -outform PEM -out smtpd.cert -newkey rsa:2048 -nodes -keyout smtpd.key -keyform PEM -days 365 -x509
e completiamo le richieste del certificato come a seguire
Country Name (2 letter code) [AU]: <-- Enter your Country Name (e.g., "DE"). State or Province Name (full name) [Some-State]: <-- Enter your State or Province Name. Locality Name (eg, city) []: <-- Enter your City. Organization Name (eg, company) [Internet Widgits Pty Ltd]: <-- Enter your Organization Name (e.g., the name of your company). Organizational Unit Name (eg, section) []: <-- Enter your Organizational Unit Name (e.g. "IT Department"). Common Name (eg, YOUR name) []: <-- Enter the Fully Qualified Domain Name of the system (e.g. "server1.example.com"). Email Address []: <-- Enter your Email Address.
e modifichiamo i permessi come segue
chmod o= /etc/postfix/smtpd.key
5. Configure Saslauthd
Creiamo la cartella per saslauthd
mkdir -p /var/spool/postfix/var/run/saslauthd
Editiamo ora il file /etc/default/saslauthd settando START a yes e cambiando OPTIONS=”-c -m /var/run/saslauthd” a OPTIONS=”-c -m /var/spool/postfix/var/run/saslauthd -r”:
vi /etc/default/saslauthd
il risultato sarà
# # Settings for saslauthd daemon # Please read /usr/share/doc/sasl2-bin/README.Debian for details. #
# Should saslauthd run automatically on startup? (default: no) START=yes
# Description of this saslauthd instance. Recommended. # (suggestion: SASL Authentication Daemon) DESC="SASL Authentication Daemon"
# Short name of this saslauthd instance. Strongly recommended. # (suggestion: saslauthd) NAME="saslauthd"
# Which authentication mechanisms should saslauthd use? (default: pam) # # Available options in this Debian package: # getpwent -- use the getpwent() library function # kerberos5 -- use Kerberos 5 # pam -- use PAM # rimap -- use a remote IMAP server # shadow -- use the local shadow password file # sasldb -- use the local sasldb database file # ldap -- use LDAP (configuration is in /etc/saslauthd.conf) # # Only one option may be used at a time. See the saslauthd man page # for more information. # # Example: MECHANISMS="pam" MECHANISMS="pam"
# Additional options for this mechanism. (default: none) # See the saslauthd man page for information about mech-specific options. MECH_OPTIONS=""
# How many saslauthd processes should we run? (default: 5) # A value of 0 will fork a new process for each connection. THREADS=5
# Other options (default: -c -m /var/run/saslauthd) # Note: You MUST specify the -m option or saslauthd won't run! # # See /usr/share/doc/sasl2-bin/README.Debian for Debian-specific information. # See the saslauthd man page for general information about these options. # # Example for postfix users: "-c -m /var/spool/postfix/var/run/saslauthd" #OPTIONS="-c -m /var/run/saslauthd" OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r"
Editiamo il file
vi /etc/pam.d/smtp
inseriamo
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
Creiamo il file
vi /etc/postfix/sasl/smtpd.conf
e inseriamo
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: sysop sql_database: mail sql_select: select password from users where email = '%u'
aggiungiamo l’utente postfix al gruppo sals
[email protected]: adduser postfix sasl
e riavviamo postfix e sasl
/etc/init.d/postfix restart
/etc/init.d/saslauthd restart
Configuriamo ora courier
vi /etc/courier/authdaemonrc
e modifichiamo
[...] authmodulelist="authmysql" [...]
Creiamo un backup di /etc/courier/authmysqlrc e svuotiamo il vecchio file
cp /etc/courier/authmysqlrc /etc/courier/authmysqlrc_orig
cat /dev/null > /etc/courier/authmysqlrc
Editiamo ora il file
vi /etc/courier/authmysqlrc
e inseriamo
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
e riavviamo 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
Controlliamo ora se il nostro server pop3 funziona
telnet localhost pop3
scrivete QUIT e dovrebbe darvi qualcosa di simile a
[email protected]: telnet localhost 110 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. +OK Hello there. quit +OK Better luck next time. Connection closed by foreign host. [email protected]:
7. Modifichiamo /etc/aliases
Modifichiamo /etc/aliases con qualcosa simile a
vi /etc/aliases
[...] postmaster: root root: [email protected] [...]
dopo di che ad ogni modifica di /etc/aliases lanciamo
[email protected]: newaliases
e riavviamo postfix
[email protected]: /etc/init.d/postfix restart
8. Installiamo Amavisd-new, Spamassassin, Clamv
Lanciamo il comando:
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
Abilitamo Clamav e Spamassassin editando il file /etc/amavis/conf.d/15-content_filter_mode , decommentando le linee @bypass_virus_checks_maps e @bypass_spam_checks_maps
vi /etc/amavis/conf.d/15-content_filter_mode
Che diventerà una cosa simile a:
@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; # ensure a defined return
Controlliamo inoltre i settaggi dell’antispam e dell’antivirus nel file /etc/amavis/conf.d/20-debian_defaults , dovrebbero andare bene per tutti e non necessitano di modifiche particolari.
Editiamo il file /etc/amavis/conf.d/50-user
vi /etc/amavis/conf.d/50-user
ed aggiungiamo
$pax='pax';
avendo come risultato qualcosa di simile a:
use strict;
# # Place your configuration directives here. They will override those in # earlier files. # # See /usr/share/doc/amavisd-new/ for documentation and examples of # the directives you can use in this file #
$pax='pax';
#------------ Do not modify anything below this line ------------- 1; # ensure a defined return
Eseguiamo questi comandi per aggiungere clamav al gruppo di amavis e riavviare amavisd-new e clamav:
adduser clamav amavis
/etc/init.d/amavis restart
/etc/init.d/clamav-daemon restart
/etc/init.d/clamav-freshclam restart
Configuriamo ora postfix affinchè inoltri le email in arrivo all’antivirus amavisd-new
postconf -e 'content_filter = amavis:[127.0.0.1]:10024'
postconf -e 'receive_override_options = no_address_mappings'
Modifichiamo il file /etc/postfix/master.cf
vi /etc/postfix/master.cf
e aggiungiamo alla fine
[...] 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
e riavviamo postfix
/etc/init.d/postfix restart
ora eseguendo
netstat -tap
dovreste vedere Postfix (smtp 25) e 10025, e amavisd-new sulla 10024
[email protected]:/etc/postfix# netstat -tap Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 localhost.localdo:10024 *:* LISTEN 15645/amavisd (mast tcp 0 0 localhost.localdo:10025 *:* LISTEN 16677/master tcp 0 0 localhost.localdo:mysql *:* LISTEN 6177/mysqld tcp 0 0 *:www *:* LISTEN 5367/apache2 tcp 0 0 *:smtp *:* LISTEN 16677/master tcp6 0 0 [::]:imaps [::]:* LISTEN 14020/couriertcpd tcp6 0 0 [::]:pop3s [::]:* LISTEN 14088/couriertcpd tcp6 0 0 [::]:pop3 [::]:* LISTEN 14051/couriertcpd tcp6 0 0 [::]:imap2 [::]:* LISTEN 13983/couriertcpd tcp6 0 0 [::]:ssh [::]:* LISTEN 4006/sshd tcp6 0 52 server1.example.com:ssh 192.168.0.210%8191:3340 ESTABLISHED 4059/0 [email protected]:/etc/postfix#
9. Install Razor, Pyzor And Configure SpamAssassin
Installiamo ora Razor, Pyzor che utilizzano una rete di filtri spam collaborativa sostenuta da varie community.
Eseguiamo il comando:
apt-get install razor pyzor
A questo punto editiamo
vi /etc/spamassassin/local.cf
[...] #pyzor use_pyzor 1 pyzor_path /usr/bin/pyzor
#razor use_razor2 1 razor_config /etc/razor/razor-agent.conf
#bayes use_bayes 1 use_bayes_rules 1 bayes_auto_learn 1
Possiamo configurare la nostra configurazione di spamassassin con il comando:
spamassassin --lint
e non dovrebbe darci alcun errore sul risultato.
Riavviamo ora amavis:
/etc/init.d/amavis restart
Aggiorniamo le nuove regole di Spamassassin con
sa-update --no-gpg
Creiamo un comando crontab per aggiornare le regole ogni tot tempo
crontab -e
e inseriamo
23 4 */2 * * /usr/bin/sa-update --no-gpg &> /dev/null
10. Test postfix
Controliamo ora se tutto funziona, controlliamo ora se postfix è pronto per SMTP-AUTH e TLS
telnet localhost 25
dopo la connessione diamo il comando
ehlo localhost
e dovremmo trovare la stringa
250-STARTTLS
e
50-AUTH LOGIN PLAIN
Qualcosa tipo:
[email protected]:/usr/local/sbin# telnet localhost 25 Trying 127.0.0.1... Connected to localhost.localdomain. Escape character is '^]'. 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 quit 221 2.0.0 Bye Connection closed by foreign host. [email protected]:/usr/local/sbin#
Non ci resta che popolare il database con i dati che ci interessano, ometto questa parte in quanto la ritengo particolarmente semplice ed intuitiva,
Mi soffermo su due aspetti, il primo riguarda le PASSWORD. Quando inserite un nuovo utente mi raccomando di selezionare il tipo di campo per le password come ENCRYPT, altrimenti non vi funzionerà l’autenticazione.
Date un occhio alle tabelle del link http://www.howtoforge.com/virtual-users-domains-postfix-courier-mysql-squirrelmail-ubuntu8.04-p4 in fondo alla pagina.
11. Inviare un messaggio di benvenuto per creare la Maildir
Una volta creato un account email è necessario inviare un’email affinchè venga creata immediatamente la directory dove verranno salvate le email. Se questo non viene fatto, quando qualcuno proverà a collegarsi via pop3 gli verrà dato un messaggio di errore. Provvediamo quandi a installare mailx tramite:
apt-get install mailx
per inviare un’email ci basta dare il comando
mailx [email protected]
e compilare i seguenti campi
mailx [email protected] Subject: Welcome <-- ENTER Welcome! Have fun with your new mail account. <-- ENTER <-- CTRL+D Cc: <-- ENTER
A questo punto potete installare squirrelmail e company per gestire la posta come preferite.
Saluti
Matteo
9 risposte a “Virtual Users And Domains With Postfix, Courier, MySQL (Ubuntu 8.04 LTS 64bit)”
Bel post, complimenti!
Uno dei pochissimi articoli che trattano in modo organico e piuttosto completo l’argomento Postfix!
Grazie mille! Non è il massimo ma fa quel che serve 😉
A breve spero di poter scrivere una guida analoga con l’utilizzo di dovecot, ma ho troppo poco tempo :\
Virtual Users And Domains With Postfix, Courier, MySQL (Ubuntu 8.04 LTS 64bit) » Temporini Matteo…
Questa guida vuole essere una quick reference per installare un server di posta con antispam e gestione relativamente semplice di utenti e domini, tramite ubuntu 8.04 TLS 64bit….
[…] po’ di tempo fa ho scritto un articolo su come configurare Virtual Users And Domains With Postfix, Courier, MySQL (Ubuntu 8.04 LTS 64bit), ora a partire da questo articolo vediamo come poter migliorare l’identificazione dello spam […]
hey I like this article. I observed it from doing a google look for. Ive been looking for this sort of factor for a although. This info will arrive in handy to me. I’ll verify back again quickly to search the rest of one’s web site. thank you
Ottima guida. Ma come faccio ad aggiungere una casella mail??
Grazie
Davide
[…] Presuppongo che abbiate già un server di posta configurato con postfix (o che abbiate seguito la mia guida al riguardo) […]
SI
Salve,
vorrei chiedere un’informazione.
Utilizzando i virtual domain con virtual_mailbox_domains, mydomain come deve essere settato?
Grazie