Après l'article consacré à l'installation d'un vps chez OVH, nous allons voir comment le configurer comme serveur smtp.
Le but est de permettre à ce serveur de devenir un relay pour l'envoi des mails sans passer par les serveurs du fournisseur d'accès, mais bien par notre propre serveur mail.
Une des premières choses à faire est de s'assurer que le Fully Qualified Domain Name (FQDN) de notre machine est bien configuré.
Si ce n'est pas le cas, la commande suivante changera le nom de la machine :
sudo hostnamectl set-hostname <mail.domain.com>
Bien entendu, remplacez <mail.domain.com> par le FQDN de votre machine.
Il faut ensuite vérifier le fichier /etc/hosts qui doit également référencer le FQDN :
xxx.xxx.xxx.xxx mail.domain.com mail 127.0.0.1 localhost 127.0.0.1 mail.domain.com mail
Nous allons également nous assurer que postfix est installé dans sa dernière version pour notre distribution :
sudo yum -y install postfix
Ensuite, nous allons configurer postfix pour qu'il utilise Maildir au lieu de Mailbox qui est le défaut pour CentOS.
Nous allons donc éditer le fichier de configuration principal de postfix : /etc/postfix/main.cf
# DELIVERY TO MAILBOX # # The home_mailbox parameter specifies the optional pathname of a # mailbox file relative to a user's home directory. The default # mailbox file is /var/spool/mail/user or /var/mail/user. Specify # "Maildir/" for qmail-style delivery (the / is required). # #home_mailbox = Mailbox home_mailbox = Maildir/
Comme vous pouvez le constater, nous avons simplement supprimé le commentaire sur la dernière ligne du bloc ci-dessus faisant référence à la manière dont les emails doivent être délivrés.
Nous allons maintenant avoir besoin de net-tools pour la commande netstat qui nous permettra d'interroger le serveur.
sudo yum -y install net-tools
Nous pouvons maintenant lancer la commande suivante pour lister par numéro les ports TCP sur lesquels le serveur écoute :
netstat -tln
Sur notre machine, le résultat est le suivant :
Connexions Internet actives (seulement serveurs) Proto Recv-Q Send-Q Adresse locale Adresse distante Etat tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp6 0 0 :::22 :::* LISTEN
N'oublions pas de configure le firewall pour le protocole smtp :
sudo firewall-cmd --permanent --zone=public --add-service=smtp sudo firewall-cmd --permanent --zone=public --add-service=smtp-submission sudo firewall-cmd --reload
Nous allons maintenant installer telnet pour discuter avec le serveur postfix :
sudo yum -y install telnet
Une fois la commande installée, nous allons pouvoir tester si notre serveur smtp fonctionne :
telnet localhost smtp
Si la réponse ressemble à ce qui suit, vous avez un serveur postfix qui fonctionne :
Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 vpsxxxxxx.ovh.net ESMTP Postfix
Nous pouvons donc entamer le dialogue. Comme pour toutes les conversations, nous allons commencer par un Hello :
EHLO vpsxxxxxx.ovh.net
Ce à quoi le serveur répond en nous affichant la liste des services qui sont disponibles sur ce serveur postfix :
250-vpsxxxxxx.ovh.net 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN
Vous pouvez quitter telnet en entrant la commande :
quit
Editer /etc/login.defs afin de configurer MAIL_DIR
#QMAIL_DIR Maildir #MAIL_DIR /var/spool/mail MAIL_FILE Maildir/
On modifie le script /etc/defaults/userad. On change la dernière ligne pour ne plus spooler les mails.
CREATE_MAIL_SPOOL=no
On va ensuite forcer la création de Maildir lorsqu'un nouvel utilisateur est créé.
Pour cela, nous allons créer un script mailenv.sh dans le dossier /etc/profile.d/.
Ce script devra contenir la ligne suivante :
MAIL=$HOME/Maildir/
On crée 2 users de test :
sudo adduser user1 sudo adduser user2
On installe un client mail :
sudo yum install -y mailx
On se loggue sous le nom de user1 pour envoyer un mail à user2 en utilisant mailx :
# su - user1 [user1@mail ~]$ mailx user2 Subject: Test Ceci est un test . EOT [user1@mail ~]$
On se logue maintenant sous le nom de user2 pour relever ses mails et répondre à user1 :
[user1@mail ~]$ logout # su - user2 [user2@mail ~]$ mailx Heirloom Mail version 12.5 7/5/10. Type ? for help. "/home/user2/Maildir/": 1 message 1 new >N 1Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser. Thu Oct 5 14:54 17/531 "test" & 1 Message 1: FromCette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser. Thu Oct 5 14:54:49 2017 Return-Path: <Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser. > X-Original-To: user2 Delivered-To:Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser. Date: Thu, 05 Oct 2017 14:54:49 +0200 To:Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser. Subject: test User-Agent: Heirloom mailx 12.5 7/5/10 Content-Type: text/plain; charset=us-ascii From:Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser. Status: R Ceci est un test & r To:Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser. Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser. Subject: Re: testCette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser. wrote: > Ceci est un test Tout fonctionne ! . EOT & quit Held 1 message in /home/user2/Maildir/ [user2@mail ~]$
Si ce que vous obtenez ressemble à celà, votre serveur mail fonctionne pour les adresses internes.
Envoyer des mails à l'extérieur
Nous allons éditer le fichier /etc/postfix/main.cf.
La première des choses à faire est de configurer le nom de machine de notre serveur mail ainsi que le nom de domaine.
myhostname = mail.domain.com mydomain = domain.com
Nous allons ensuite configurer la variable myorigin qui spécifie le nom du domaine émetteur des emails.
myorigin = $mydomain
Il faut maintenant configurer les interfaces sur lesquelles le serveur peut recevoir des emails.
inet_interfaces = all
Nous allons maintenant spécifier les destinations. C'est à dire, les domaines qui sont gérés par ce serveur mail.
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
Ensuite viens la configuration des réseaux.
mynetworks_style = subnet
Configuration du relay.
#relay_domains = $mydestination relay_domains =
On redémarre le serveur postfix pour qu'il prenne en compte la nouvelle configuration :
sudo systemctl restart postfix.service