Server di Posta · 6 min read · Dec 25, 2025

Un semplice server di posta su Arch Linux (Postfix + Dovecot)

Un semplice server di posta su Arch Linux (Postfix + Dovecot)

Autore: Jeffrey Gelens
Versione: 1.3
Data: 04-12-2009

Introduzione

Questo tutorial descrive come installare un server di posta completo utilizzando Postfix e Dovecot su una macchina Arch Linux o VPS. Questo specifico tutorial è basato sul mio VPS da 256MB. È richiesta una conoscenza di base di Linux poiché non descrivo ogni passaggio in dettaglio.

Sistema di base

L’immagine di base è Arch Linux 2008.06. Dopo il boot è meglio disabilitare i login come root nel tuo server SSH e creare un nuovo utente come segue:

adduser   
usermod -a -G wheel,users,nobody,mail 

È facoltativo classificare i mirror di Arch Linux per velocità, ma potrebbe velocizzare l’installazione:

pacman -Sy  
pacman -S python  
sed -ie'' 's/^#S/S/g' /etc/pacman.d/mirrorlist  
rankmirrors -v /etc/pacman.d/mirrorlist | tee /etc/pacman.d/mirrorlist.new && mv /etc/pacman.d/mirrorlist.new /etc/pacman.d/mirrorlist

Installa i pacchetti essenziali per questa configurazione:

pacman -Syu  
pacman -S sudo base-devel abs

Server di posta

Ora che abbiamo installato i pacchetti di base, il passo successivo è installare i server di posta. Come server SMTP installeremo Postgrey, che è uno dei migliori strumenti contro lo spam, quindi installiamo anche questi. La greylisting è al momento un modo molto efficace per bloccare lo spam senza scansionare il messaggio stesso, quindi non spreca cicli di CPU. Sul mio server blocca circa il 95% di tutto lo spam, il restante 5% è gestito da Spamassassin. L’unico svantaggio della greylisting è che le email in arrivo vengono ritardate di un paio di minuti.

pacman -S postfix dovecot spamassassin procmail  
groupadd -g 5001 spamd  
useradd -u 5001 -g spamd -s /sbin/nologin -d /var/lib/spamassassin -m spamd  
chown spamd:spamd /var/lib/spamassassin

Spamassassin

Modifica il –max-children a tuo piacimento. Spamassassin utilizza molta memoria, quindi per un server di posta con solo un paio di utenti 1 child è sufficiente.

/etc/conf.d/spamd

SAHOME="/var/lib/spamassassin/"
SPAMD_OPTS="-c --max-children 1 --username spamd -H ${SAHOME} -s ${SAHOME}spamd.log --pidfile /var/run/spamd.pid"

Certificati

Prima dobbiamo generare alcuni certificati autofirmati per Dovecot e Postfix. Ti verrà chiesto di inserire una passphrase, qualsiasi stringa casuale va bene, non devi ricordarla.

cd /etc/ssl/certs  
openssl req -new -x509 -newkey rsa:1024 -days 3650 -keyout mail.key -out mail.crt  
openssl rsa -in mail.key -out mail.key  
mv mail.key /etc/ssl/private

Dovecot

Configureremo Dovecot e Postfix per utilizzare la struttura Maildir per memorizzare le email. Questo memorizza ogni email degli utenti nella loro home directory e non in un database. Questo va bene per questa configurazione, ma per un numero maggiore di utenti è meglio utilizzare MySQL o PostgreSQL per la memorizzazione. Dovecot sarà configurato in modo che gli utenti possano utilizzare IMAP e IMAPs (SSL). Inoltre, Dovecot ha un server di autenticazione SASL integrato, quindi non dobbiamo configurare un server SASL separato, risparmiando così memoria.

/etc/dovecot/dovecot.conf

protocols = imap imaps
disable_plaintext_auth = yes
log_timestamp = "%b %d %H:%M:%S "
ssl = yes
ssl_cert_file = /etc/ssl/certs/mail.crt
ssl_key_file = /etc/ssl/private/mail.key
mail_location = maildir:~/Maildir
mail_access_groups = mail
auth_username_chars = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@
protocol imap {
  imap_client_workarounds = delay-newmail tb-extra-mailbox-sep
}
auth default {
  mechanisms = plain login
  passdb pam {
  }
  userdb passwd {
  }
  user = root
  socket listen {
    client {
      path = /var/run/dovecot/auth-client
      user = postfix
      group = postfix
      mode = 0660
    }
  }
}

Postfix

Il prossimo è Postfix, il file di configurazione è molto complesso. Per fortuna ho fatto tutta la ricerca, così puoi copiare e incollare quasi tutto. Le seguenti impostazioni devono ancora essere modificate:

myhostname Questa è la posizione dei tuoi server di posta (ad es. mail.example.com). myorigin Questo è il dominio dopo il @ negli indirizzi email (ad es. jeffrey@example.com). virtual_alias_domains Lo stesso di myorigin.

/etc/postfix/main.cf

# Percorsi
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/lib/postfix
mail_owner = postfix
# Impostazioni di dominio
myhostname = mail.example.com
myorigin = example.com
mydestination = $myhostname, localhost.$mydomain, localhost
# Impostazioni di timeout e altri limiti
delay_warning_time = 4h
unknown_local_recipient_reject_code = 450
minimal_backoff_time = 300s
maximal_backoff_time = 1200s
maximal_queue_lifetime = 1d
bounce_queue_lifetime = 1d
smtp_helo_timeout = 60s
smtpd_soft_error_limit = 3
smtpd_hard_error_limit = 12
# Impostazioni SMTP
smtpd_tls_cert_file=/etc/ssl/certs/mail.crt
smtpd_tls_key_file=/etc/ssl/private/mail.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_scache
smtp_tls_session_cache_database = btree:/var/lib/postfix/smtp_scache
smtpd_tls_loglevel = 1
smtpd_sasl_auth_enable = yes
#smtp_sasl_auth_enable = yes
smtpd_recipient_restrictions = permit_sasl_authenticated,
                               permit_mynetworks,
                               reject_unauth_destination,
                               check_policy_service inet:127.0.0.1:10030
smtpd_sender_restrictions = permit_sasl_authenticated, permit_mynetworks
smtpd_sasl_security_options = noanonymous
# SASL
smtpd_sasl_type = dovecot
smtpd_sasl_path = /var/run/dovecot/auth-client
# Impostazioni di rete
inet_interfaces = all
inet_protocols = ipv4
mynetworks = 127.0.0.0/8
relayhost =
# Impostazioni email e casella di posta
alias_maps = hash:/etc/postfix/aliases
alias_database = $alias_maps
home_mailbox = Maildir/
virtual_alias_domains = example.com
virtual_alias_maps = hash:/etc/postfix/virtual
mailbox_size_limit = 0
# Varie
mailbox_command = /usr/bin/procmail
smtpd_banner = $myhostname ESMTP
biff = no
append_dot_mydomain = no
debug_peer_level = 2
sendmail_path = /usr/sbin/sendmail
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/man
sample_directory = /etc/postfix/sample
readme_directory = no
recipient_delimiter = +

Modifica master.cf per far filtrare le email da Postgrey (di cui parleremo nel capitolo successivo) e Spamassassin.

/etc/postfix/master.cf

Sostituisci la seguente riga:

smtp      inet  n       -       n       -       -       smtpd

con queste due righe:

smtp      inet  n       -       n       -       -       smtpd
  -o content_filter=spamassassin

E aggiungi le seguenti tre righe alla fine del file:

spamassassin unix -     n       n       -       -       pipe
  user=spamd argv=/usr/bin/perlbin/vendor/spamc -f -e
        /usr/sbin/sendmail -oi -f ${sender} ${recipient}

Imposta le regole di Spamassassin. Potresti dover modificare un po’ il required_score. Il valore predefinito 6.31 sembra ottimo per me.

/etc/mail/spamassassin/local.cf

rewrite_header Subject ***SPAM***
required_score 6.31
report_safe 1
use_bayes 1
use_bayes_rules 1
bayes_auto_learn 1

/etc/procmailrc

Lo spam può essere copiato automaticamente nella cartella Junk creando questo file:

DROPPRIVS=yes
DEFAULT=$HOME/Maildir/
MAILDIR=$HOME/Maildir/

:0:
* ^X-Spam-Status: Yes
.Junk/

Crea account utente

Per ogni utente email crea gli account appropriati, crea il tuo script se non vuoi fare tutto manualmente.

useradd -m -G mail -s /sbin/nologin   
cd ~  
umask 077  
mkdir -p Maildir/{cur,new,tmp}  
mkdir -p Maildir/.Drafts/{cur,new,tmp}  
mkdir -p Maildir/.Sent/{cur,new,tmp}  
mkdir -p Maildir/.Trash/{cur,new,tmp}  
chmod 0700 Maildir/{cur,new,tmp}  
chmod 0700 Maildir/.Drafts/{cur,new,tmp}  
chmod 0700 Maildir/.Sent/{cur,new,tmp}  
chmod 0700 Maildir/.Trash/{cur,new,tmp}  
chown -R :users *

Assicurati che gli indirizzi email dei nuovi utenti siano aggiunti alla mappa degli utenti virtuali.

/etc/postfix/virtual

[email protected] jeffrey@localhost

Esegui

postmap /etc/postfix/virtual

dopo aver salvato questo file.

Postgrey

Postgrey non è nei repository predefiniti di pacman, quindi scarichiamolo da AUR. Assicurati di eseguire i seguenti comandi come utente normale e non come root.

cd ~  
wget http://aur.archlinux.org/packages/yaourt/yaourt.tar.gz  
tar xzvf yaourt.tar.gz  
cd yaourt  
makepkg -i  
yaourt --noconfirm -S postgrey

Facoltativamente, i file /etc/postfix/postgrey_whitelist_recipients possono essere modificati per inserire nella whitelist i domini e gli indirizzi email di cui ti fidi. Questo è utile poiché questi indirizzi non verranno ritardati a causa della greylisting.

Avvio dei server

Finalmente! Abbiamo finito. Ora avviamo tutti i server e speriamo che funzionino tutti.

Modifica /etc/rc.conf e assicurati di aggiungere i demoni elencati:

DAEMONS=(spamd postgrey dovecot postfix)

Questo assicura che tutti i demoni vengano avviati automaticamente al riavvio. Per ora, avviali manualmente:

/etc/rc.d/spamd start  
/etc/rc.d/postgrey start  
/etc/rc.d/dovecot start  
/etc/rc.d/postfix start

Aggiungi mail.example.com ai tuoi client email preferiti, inserisci le impostazioni del tuo account utente, abilita SSL facoltativamente e il tuo server di posta completamente funzionale è pronto!

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.