Guide tecniche

Come creare un server mail Linux con iRedMail

Creare un server mail Linux con una comoda gestione web è sempre un’operazione rognosa e complessa. Immagina di dover installare e configurare i singoli servizi ogni volta.

Oggi il tempo è denaro più di ieri per cui per evitare situazioni come questa quasi sempre si ricorre all’utilizzo di servizi di email hosting già pronti, con il tipico pagamento per ogni casella di posta aggiuntiva.

Fortunatamente anche a questo c’è una soluzione per avere in pochi minuti un server mail personale in house. La soluzione si chiama iRedMail, un piccolo ma efficiente software che si occuperà da solo di installare e configurare su una macchina vergine tutti i servizi necessari ad un mail server che si rispetti.

In questa guida illustreremo passo passo come creare un mail server Linux con iRedMail su una macchina virtuale Ubuntu. Tutte le immagini sono tratte da mail server in produzione per cui per motivi di riservatezza abbiamo oscurato i nomi a dominio. Limitati a sostituirli con il tuo nelle varie interfacce.

Ricordiamo che la macchina virtuale (o dedicata) deve essere vergine, ovvero disporre del solo sistema operativo di base e SSH per la configurazione remota. Al resto penserà iRedMail.

Consigliamo inoltre di configurare una corretta politica di backup al termine delle operazioni. Per maggiori informazioni rimandiamo alla guida completa ai backup.

Indice dei Contenuti

Configurazione sottodominio e politica SPF

Supponiamo di avere una VPS con indirizzo IP pubblico 88.88.88.88 e di voler realizzare il nostro server di posta Linux avente come dominio mailserver1.example.com.

Il primo passo è creare il sotto dominio mailserver1 sul file di zona DNS del dominio example.com. Dovrà essere un record di tipo A che punta all’indirizzo IP pubblico del server virtual:

mailserver1 10800 IN A 88.88.88.88

Fatto ciò occorre inserire un record TXT per la policy SPF anti-spam:

mailserver1 10800 IN TXT "v=spf1 ip4:88.88.88.88 ~all"

In questo modo quando sarà interpellato il mail server mailserver1.example.com per SPF, diremo che l’unico mail server autorizzato ad inviare posta per conto di questo dominio è quello con indirizzo IP 88.88.88.88.

Configurazione del reverse DNS

Il reverse DNS è utilizzato dai mail server che riceveranno la posta come un ulteriore controllo anti-spam.

Si tratta di una risoluzione inversa del dominio: deve essere possibile risalire dall’indirizzo IP del server mail al suo dominio, in questo caso da 88.88.88.88 a mailserver1.example.com.

Questa configurazione va fatta dall’ISP in quanto gestore dell’indirizzo IP. Alcuni fornitori di server, come Hetzner, permettono di configurare il reverse DNS direttamente dal pannello di gestione del server.

Configurazione del dominio FQDN

Dopo aver fatto accesso al server ed averlo aggiornato propriamente, modificare il file /etc/hosts ed aggiungere mailserver1.example.com come localhost di IPv4 e IPv6:

### Hetzner Online GmbH installimage
# nameserver config
# IPv4
127.0.0.1 mailserver1.example.com localhost.localdomain localhost
172.31.1.100 Ubuntu-1404-trusty-64-minimal
#
# IPv6
::1 mailserver1.example.com ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
2a01:4f8:c17:30c0::2 Ubuntu-1404-trusty-64-minimal

Sostituire il contenuto di /etc/hostname con mailserver1.example.com

Riavviare il server

Installazione di iRedMail

Dopo aver scaricato il pacchetto da iredmail.org ed averlo decompresso, avviare l’installer iRedMail.sh.

Accettare i parametri per /var/vmail, Nginx, MariaDB ed inserire come dominio principale o uno fasullo che utilizzeremo solo per loggarci come admin del server, o uno che utilizzeremo davvero.

In questo caso scegliamo il secondo in quanto l’obiettivo primario è creare caselle di posta @example.com. Poi in seguito vedremo come aggiungere ulteriori domini.

Procedere con l’installazione di tutti i pacchetti tranne SOGo che non ci serve. Alla fine avremo un riepilogo come il seguente:

*************************************************************************
***************************** WARNING ***********************************
*************************************************************************
* *
* Below file contains sensitive infomation (username/password), please *
* do remember to *MOVE* it to a safe place after installation. *
* *
* * /root/iRedMail-0.9.4/config
* *
*************************************************************************
********************** Review your settings *****************************
*************************************************************************

* Storage base directory: /var/vmail
* Mailboxes: /var/vmail/vmail1
* Daily backup of SQL/LDAP databases: /var/vmail/backup
* Store mail accounts in: MariaDB
* Web server: Nginx
* First mail domain name: example.com
* Mail domain admin: postmaster@example.com
* Additional components: iRedAdmin Roundcubemail Awstats Fail2ban

Dare il via ed attendere la fine. Ad installazione conclusa, riavviare il server.

Impostare Postfix per usare solo IPv4

Di default Postfix 2.x, il servizio SMTP, supporta sia IPv4 che IPv6 ma i filtri di GMAIL PTR per IPv6 creano rogne ed a volte rigettano le email o le marcano come SPAM. Per evitare questo problema, impostiamo il nostro mail server Linux per usare solo IPv4.

Per fare questo basta modificare il file /etc/postfix/main.cf e settare inet_protocols come segue:

inet_protocols = ipv4

Riavviare postfix:

/etc/init.d/postfix restart

Registrare il mail server su Google

Per evitare altre rogne con GMAIL visitare il sito https://postmaster.google.com e registrare il mail server seguendo il processo di convalida, ovvero l’inserimento di un record TXT per il sottodominio mailserver1.example.com.

Rimozione restrizione indirizzi sconosciuti

Se utilizzate servizi come mailgun, le email in ingresso verranno rifiutate in quanto inviate da indirizzi con lo stesso dominio ma sconosciuti. Si tratta di una protezione di Postfix.

Per risolvere il problema o si cambia approccio, ovvero le email devono essere inviate da indirizzi davvero esistenti mediante connessione SMTP con il server, oppure si disabilita la restrizione.

Per disabilitare la restrizione basta commentare tutte le corrispondenze della stringa smtpd_reject_unlisted_sender nel file /etc/postfix/main.cf

#smtpd_reject_unlisted_sender = yes

# Sender restrictions
smtpd_sender_restrictions =
reject_unknown_sender_domain
reject_non_fqdn_sender
#reject_unlisted_sender
permit_mynetworks
reject_sender_login_mismatch
permit_sasl_authenticated
check_sender_access pcre:/etc/postfix/sender_access.pcre

Disabilitare il greylisting

Per evitare reject improvvisi, disabilitare il greylisting modificando il file /opt/iredapd/settings.py eliminando la dicitura greylisting dal parametro plugins =

Riavviare il server

Installazione di PHPMyAdmin

L’installazione di PHPMyAdmin su un server Ubuntu è un’operazione semplicissima:

apt-get install php-mbstring php-gettext phpmyadmin

Riavviare apache

Se si dovessero avere problemi ad accedere come root, accedere da riga di comando e creare un account alternativo dalla username admin:

CREATE USER 'admin'@'localhost' IDENTIFIED BY 'miapassword';
GRANT ALL ON *.* TO 'admin'@'localhost';

La password di root di MariaDB è possibile recuperarla all’interno del file /var/vmail/backup/backup_mysql.sh

Per accedere a PHPMyAdmin da browser occorre creare il link simbolico da /usr/share/phpmyadmin a /var/www/phpmyadmin per poi potervi accedere dalla URL http://mailserver1.example.com/phpmyadmin

Se si dovessero verificare problemi di compatibilità con PHP 7, occorre effettuare un upgrade manuale. A tal proposito ti invitiamo a leggere la guida su PHPMyAdmin e PHP 7.

Invio email da WordPress

Per configurare plugin come wp-mail per autenticarsi su porta 25 senza crittografia, modificare il file main.cf di postfix come segue:

smtpd_sasl_auth_enable = yes
smtpd_tls_auth_only = no

Riavviare Postfix

Ricezione email da Mailgun

Se si ottiene da mail.log un errore di tipo Recipient address rejected: Policy rejection not logged in, modificare il file /opt/iredapd/settings.py e rimuovere dall’array plugins la dicitura reject_sender_login_mismatch.

Prima:

plugins = ["reject_null_sender", "reject_sender_login_mismatch", "throttle", "amavisd_wblist", "sql_alias_access_policy"]

Dopo:

plugins = ["reject_null_sender", "throttle", "amavisd_wblist", "sql_alias_access_policy"]

Configurare i domini sul nuovo mail server

Passiamo alla configurazione del primo dominio sul nuovo mail server. Iniziamo con example.com che abbiamo già aggiunto come dominio principale.

Fare accesso al pannello web di iRedMail su https://mailserver1.example.com/iredadmin/ con i dati usati in fase di installazione. Il dominio è già presente quindi basta creare un nuovo utente, ad esempio info@example.com

Fatto ciò accedere al pannello DNS del dominio example.com ed aggiungere i seguenti record DNS:

@ 10800 IN TXT "v=spf1 include:mailserver1.example.com ~all"
@ 10800 IN MX 10 mailserver1.example.com.

Il primo serve ad indicare che il server abilitato ad inviare email per conto di @example.com è mailserver1.example.com mentre il secondo indica che il server abilitato a ricevere email per conto di @example.com è mailserver1.example.com.

Fatto ciò entrare sul server mail e generare la chiave DKIM che ci permetterà di ottenere una seconda convalida anti-spam. Per farlo occorre eseguire i seguenti comandi:

cd /var/lib/dkim/
sudo amavisd-new genrsa example.com.pem
chmod 0644 example.com.pem

Dopo di che modificare il file /etc/amavis/conf.d/50-user e cambiare la dicitura @local_domains_maps come segue:

@local_domains_maps= ( [".$mydomain", ‘example.com'] );

E infine riavviare amavis con il comando:

service amavis restart

Oppure usare il seguente script che fa tutto automaticamente:

#!/bin/bash

############################################################################
#
# Author: Nil Portugués Calderó <contact@nilportugues.com>
#
# For the full copyright and license information, please view the LICENSE
# file that was distributed with this source code.
#
############################################################################

if [ $(whoami) != "root" ];
then
echo ""
echo "You must be sudoer or root."
echo ""
echo "Usage: sudo bash $0 <domain_name>"
echo ""
exit 1
fi

if [ "$#" != "1" ];
then
echo ""
echo "Usage: ./$0 <domain_name>"
echo ""
exit 1
fi

PWD=`pwd`
DOMAIN=$1
AMAVIS_PATH="/etc/amavis/conf.d/50-user"
AMAVIS_SEPARATOR_STRING="use strict;"

##################################################################################################
## Step 1: generate keys for all required domains
##################################################################################################
cd /var/lib/dkim/
if [ -f $DOMAIN.pem ];
then
rm -f $DOMAIN.pem
fi
sudo amavisd-new genrsa $DOMAIN.pem
sudo chmod 0644 *.pem

##################################################################################################
## Step 2: Add just after "use strict" all the keys generated
##################################################################################################

#Add a newline to the configuration for the new domain
EXISTS=`cat $AMAVIS_PATH | grep "dkim_key(\"$DOMAIN\", \"dkim\"," | wc -l`
if [ "$EXISTS" = "0" ];
then
NEWLINE="dkim_key(\"$DOMAIN\", \"dkim\", \"\/var\/lib\/dkim\/$DOMAIN.pem\");"
sed -i "s/$AMAVIS_SEPARATOR_STRING/$AMAVIS_SEPARATOR_STRING\n$NEWLINE/g" $AMAVIS_PATH
fi

# Create this line containing all previous domaisn, plus the new one domains#
EXISTS=`cat $AMAVIS_PATH | grep '".\$mydomain"' | wc -l`
if [ "$EXISTS" = "0" ];
then
## No local_domains_map exists in the editable area
REPLACE_STRING="\@local_domains_maps = ( \[\".\$mydomain\", '$DOMAIN' \] );"
sed -i "s/$AMAVIS_SEPARATOR_STRING/$AMAVIS_SEPARATOR_STRING\n$REPLACE_STRING/g" $AMAVIS_PATH

else
## Case local_domains_map already exists in editable area.
FIND_STRING="\@local_domains_maps = ( \[\".\$mydomain\", "
REPLACE_STRING="\@local_domains_maps = ( \[\".\$mydomain\", '$DOMAIN', "
sed -i "s/$FIND_STRING/$REPLACE_STRING/g" $AMAVIS_PATH
fi

##################################################################################################
## Step 3: Apply changes
##################################################################################################
sudo service amavis restart

##################################################################################################
## Step 4: Generate DNS TXT records
##################################################################################################

var=$( amavisd-new showkeys $DOMAIN | sed 's/"//g' |tail -n+2 | sed 's/ //g' | sed "s/3600TXT(//g" );
var="${var:0: -1}\""
var=`echo $var | sed 's/= /=/g' | sed 's/ //g' | sed 's/v=DKIM1/\t\t"v=DKIM1/g'`

## DNS "TXT" record for the domain
cd ~
echo $var > "$PWD/dns.txt_record.$DOMAIN.txt"

Per visualizzare la chiave DKIM usare il comando:

amavisd-new showkeys example.com

; key#1, domain example.com, /var/lib/dkim/example.com.pem
dkim._domainkey.example.com. 3600 TXT (
"v=DKIM1; p="
"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDCMTpLHOSIgT17G0JwgkF7s8vL"
"qh/kYW25mAO68dTKVqA1RA9SNN5bE1NsTLJHzDo9KqhtC/uPYoxtghx3VCYIFZQw"
"duQIQnBCz8CjQKkCtYMdwvc3Nu2Ticka2a7WaOUG7IC3TuNEOixTVORHnndW6GEJ"
"2u8jryCjFZ8e+L6PlwIDAQAB")

A questo punto aggiungere il seguente record DNS al file di zona di example.com

dkim._domainkey 10800 IN TXT "v=DKIM1;p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDCMTpLHOSIgT17G0JwgkF7s8vLqh/kYW25mAO68dTKVqA1RA9SNN5bE1NsTLJHzDo9KqhtC/uPYoxtghx3VCYIFZQwduQIQnBCz8CjQKkCtYMdwvc3Nu2Ticka2a7WaOUG7IC3TuNEOixTVORHnndW6GEJ2u8jryCjFZ8e+L6PlwIDAQAB"

Attendere qualche ora per la propagazione dei DNS.

Testing anti spam SPF e DKIM

A DNS propagati, testare la configurazione di SPF e di DKIM. Per testare SPF basta utilizzare il tool online gratuito Vamsoft.com.

Inseriamo l’indirizzo IP del server mail e l’indirizzo email appena creato, ovvero info@example.com

Se tutto fila liscio, il risultato dell’operazione sarà pass.

Per testare la chiave DKIM invece basta lanciare il seguente comando dal server:

amavisd-new testkeys example.com

Anche qui la risposta deve essere pass.

Testing di invio e ricezione

Se entrambi i controlli passano, allora testare l’invio e la ricezione delle email. Proviamo ad inviare una email ad un indirizzo GMAIL:

Come possiamo vedere il messaggio viene recapitato in INBOX e non in spam. Analizziamo il messaggio originale:

Come possiamo vedere i controlli SPF e DKIM sono andati correttamente, così come il controllo di reverse DNS. Adesso testiamo la ricezione aggiungendo anche un allegato:

Il record MX funziona perfettamente così come il nostro mail server.

Configurare un secondo dominio sul nuovo mail server

Ripetiamo i passi precedenti con un secondo dominio aggiuntivo, dominiosdasda.it. Come prima cosa entriamo sul server e generiamo una chiave DKIM per il dominio, facciamolo con lo script per comodità:

./aggiungi_dkim.sh dominiosdasda.it
Private RSA key successfully written to file "dominiosdasda.it.pem" (1024 bits, PEM format)
Stopping amavisd: amavisd-new.
Starting amavisd: amavisd-new.

Ed ecco il DNS da aggiungere al pannello DNS di dominiosdasda.it:

dkim._domainkey 10800 IN TXT "v=DKIM1;p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC/dgTHhVjbDLIlBehy5MJKEPwRSG+uyNB8pBuiCM6a0tao+M5+dMtGMWBaeUJQVNEoXzKhKnZ81C03kRoZQsotOP2f55AAW8HyxB3Ox/TrzzE4ES/FfmJVMfw5mb3sFTmcY2UFohxOLVEjDihgLsmJjtPEj5v+OijhGvHYVlhKcQIDAQAB"

Nel frattempo configuriamo pure SPF ed il record MX. Alla fine nel pannello DNS avremo:

Adesso accediamo da amministratori al pannello web del mail server  https://mailserver1.example.com/iredadmin/ ed aggiungiamo dominio e mailbox:

Attendiamo al solito la propagazione dei DNS e facciamo il test anti spam SPF e DKIM. Se entrambi hanno come risultato pass, testiamo l’invio di una email a GMAIL:

Al solito dal messaggio originale possiamo constatare che non ci siano errori:

E adesso testiamo la ricezione delle email:

Adesso che il dominio dominiosdasda.it è funzionante, possiamo aggiungere tutte le mailbox che vogliamo.

Configurare Mailgun come relay host

Per usare mailgun come server SMTP, ovvero per l’invio delle email di tutti o alcuni dei domini configurati sul server di posta appena creato, basta aprire il file /etc/postfix/main.cf e modificare o aggiungere le seguenti righe come segue:

smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_auth_enable = yes
sender_dependent_relayhost_maps = hash:/etc/postfix/relayhost_map
smtp_sender_dependent_authentication = yes
smtp_sasl_security_options = noanonymous
relayhost = [smtp.mailgun.org]:587

Creare il file /etc/postfix/sasl_passwd ed inserire le informazioni di autenticazione SMTP del dominio o dei domini dalle impostazioni di Mailgun:

@dominio1.com username_smtp_mailgun_1:password_smtp_mailgun_1
@dominio2.com username_smtp_mailgun_2:password_smtp_mailgun_2

Creare il file /etc/postfix/relayhost_map ed elencare i domini configurati:

@dominio1.com [smtp.mailgun.org]:587
@dominio2.com [smtp.mailgun.org]:587

Dare i permessi 600 ai due file appena creati, caricarli con postmap e riavviare postfix:

chmod 600 /etc/postfix/sasl_passwd
chmod 600 /etc/postfix/relayhost_map
postmap /etc/postfix/sasl_passwd
postmap /etc/postfix/relayhost_map
service postfix restart

Visualizza Commenti

Articoli pubblicati di recente

Come avere tanti Mi Piace su Facebook

Come aumentare i Mi Piace su Facebook? È uno dei bisogni primari di chi si…

15 Marzo 2020

Facebook Pixel: cos’è e come crearne uno

L'utilizzo del Pixel di Facebook è fondamentale per l'ottimizzazione di una campagna pubblicitaria Facebook ma…

17 Febbraio 2020

Social network più famosi: lista aggiornata al 2024

Quali sono i social network più famosi? Ormai i social network a disposizione del pubblico…

28 Gennaio 2020

Google BERT update: tutto quello che c’è da sapere

Google BERT è l'algoritmo di Google entrato in funzione il 25 Ottobre del 2019. A…

24 Gennaio 2020

Analisi SWOT: come si fa ed esempio pratico

L'analisi SWOT è parte integrante e importantissima di un piano marketing efficace. Grazie a questo…

22 Gennaio 2020

Come apparire su Google Maps

Apparire su Google Maps è estremamente importante per un'attività locale. Consente non solo di ottenere…

2 Gennaio 2020