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/mirrorlistInstalla i pacchetti essenziali per questa configurazione:
pacman -Syu
pacman -S sudo base-devel absServer 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/spamassassinSpamassassin
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/privateDovecot
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 - - smtpdcon queste due righe:
smtp inet n - n - - smtpd
-o content_filter=spamassassinE 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@localhostEsegui
postmap /etc/postfix/virtualdopo 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 postgreyFacoltativamente, 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 startAggiungi 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!
Ricevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.