Outils pour utilisateurs

Outils du site


Panneau latéral

Traductions de cette page:

Avez-vous remarqué ?

Il n'y a aucune publicités ou scripts de profilage (tracker) sur ce site.

Ce n'est que grâce à votre aide que l'auteur peut financer l'hébergement et le temps consacré à cet ouvrage.

Si vous voulez l'encourager, vous pouvez faire un don ♥. (même un tout petit ;-))

5-mail:virtuals

Serveur mail complet avec utilisateurs virtuels

Cette désignation fait référence à des utilisateurs qui sont bien réels, mais qui ne sont pas des comptes UNIX à proprement parler qui peuvent accéder à un shell (la ligne de commande).

Ainsi, un nouveau compte mail ne sera pas créé avec adduser, mais en éditant un simple fichier texte contenant le nom d'utilisateur et un hash de son mot de passe.

Un utilisateur responsable des mails : _vmail

On va créer utilisateur en charge de tous les mails. Il portera le doux nom de “_vmail^^. Ce dernier ne servira qu'à ça et n'aura donc pas accès au shell, c'est plus sûr :) :

# useradd -m -g =uid -c "Virtual Mail" -d /var/vmail -s /sbin/nologin _vmail

Un nouveau dossier est créé : /var/vmail. Les messages des utilisateurs seront dedans, mais bien organisés : dans ce dossier, il y aura des sous-répertoires portant le nom des utilisateurs virtuels. Ainsi, les messages seront enregistrés dans, par exemple :

/var/vmail/chezmoi.tld/batman/Maildir
/var/vmail/chezmoi.tld/utilisateur/Maildir
/var/vmail/chezmoi.tld/ninja/Maildir
...

/etc/mail/virtuals

Ce fichier contient la liste des utilisateurs, un par ligne. Il fonctionne comme le fichier /etc/mail/aliases :

heros@chezmoi.tld batman@chezmoi.tld,superman@chezmoi.tld
batman@chezmoi.tld _vmail
superman@chezmoi.tld _vmail
kiki@chezmoi.tld _vmail

Eh oui, toutes ces adresses correspondant (lire “appartiennent”) à l'utilisateur _vmail.

Notez que sur la première ligne, on a fait un alias à titre d'exemple pour transférer un mail d'une adresse à une autre.

/etc/mail/passwd

Même logique ici, une ligne pour un mot de passe :

batman@$NDD:$2b$09$lerdFpdQtnu.Bs5EpAsVbeF851GjdD0aza8IDhho38i1DOHk.ujzi
superman@$NDD:$2b$09$VRU/CYJUS3QZHVUFP70xIOURPbiNQeyOEZHoZo6NOY3uO.XSpd2MW

Chaque ligne est constituée des éléments suivants, séparés par un “:” :

  • L'adresse mail du compte ;
  • Le mot de passe chiffré ;

Afin de chiffrer le mot de passe, utilisez la commande encrypt ainsi :

encrypt -p

Ou bien l'équivalent smtpctl encrypt mot_de_passe

Ça vous demande d'entrer le mot de passe. Lorsque vous validez avec “Entrée”, un hash du mot de passe s'affiche, il reste à le mettre dans /etc/mail/passwd.

(Facultatif) Permissions sur les fichiers d'identification

Les fichiers précédents ne doivent pas être lisibles par un simple utilisateur de passage. Faisons en sorte que seul l'administrateur (root) puisse écrire dedans et rendons-les lisibles par les démons qui en auront besoin : dovecot et smtpd. Ce n'est pas une obligation, mais c'est une précaution qui ne peut blesser personne ;).

Afin de séparer les privilèges, dovecot et smtpd fonctionnent à partir d'utilisateurs aux accès restreints, respectivement _smtpd et _dovecot. Tout ceci permet de protéger votre serveur si un jour, l'un de ces services était compromis.

Nous allons créer un groupe _maildaemons dans lequel nous mettrons les deux utilisateurs cités ci-dessus afin de faciliter la gestion des permissions :

# groupadd _maildaemons
# usermod -G _maildaemons _smtpd
# usermod -G _maildaemons _dovecot

dovecot n'est peut-être pas installé à ce stade de votre lecture, installez-le avant la dernière commande : # pkg_add dovecot.

On définit maintenant le propriétaire et le groupe des fichiers contenant les mots de passe et identifiants :

# chown root:_maildaemons /etc/mail/passwd /etc/mail/virtuals

Enfin, on ne permet qu'à root d'écrire dans ces fichiers et au groupe _maildaemons d'en lire le contenu :

# chmod 640 /etc/mail/passwd /etc/mail/virtuals

Si vous vérifiez, vous voyez que les permissions et propriétaires sont corrects :

# ls -l /etc/mail/passwd
-rw-r-----  1 root  _maildaemons  17226 Nov 12 08:40 /etc/mail/passwd

Configuration d'Opensmtpd

Opensmtpd (smtpd) est le serveur mail par défaut sur OpenBSD. Il est déjà installé, reste à le configurer.

Cependant, avant toutes choses, ouvrez et redirigez les ports suivants : 25 (smtp), 587 (submission) et 993 (imaps). Nous ne préoccupons pas du port 465 (smtps) car il est déprécié.

Pour configurer opensmtpd, on édite /etc/mail/smtpd.conf. Ce dernier sera mis en œuvre dans l'ordre de lecture.

Ce dernier se décompose en 3 parties :

  • Les options générales du serveur ;
  • Les actions qui pourront être réalisées sur les mails, qu'on appelle “enveloppes” ;
  • Les critères pour reconnaître les enveloppes et y appliquer les actions qui correspondent.

Le voici, à adapter à vos besoins :

# Configuration generale
## Tables 
table aliases "/etc/mail/aliases"
table passwd ":/etc/mail/passwd"
table virtuals "/etc/mail/virtuals"

## Certificats
pki chezmoi.tld key "/etc/ssl/private/chezmoi.tld.key"
pki chezmoi.tld cert "/etc/ssl/chezmoi.tld-fullchain.pem"

## Ecoute pour recevoir/envoyer
### Reception
listen on all tls pki chezmoi.tld 
### Envoi avec client de messagerie
listen on all port submission tls-require pki chezmoi.tld auth <passwd> 

# ACTIONS 
action "envoi" relay 
action local_mail maildir alias <aliases>
action virtual_maildir maildir "/var/vmail/%{dest.domain}/%{dest.user}/Maildir" virtual <virtuals>

# Correspondances
## Reception
### Message pour les utilisateurs virtuels
match from any for domain chezmoi.tld action virtual_maildir
### Message pour les utilisateurs locaux
match from any for local action local_maildir

## Envoi
match auth from any for any action "envoi"
match for any action "envoi"

Vous n'avez quasiment rien à modifier dans ce fichier, mis à part chezmoi.tld à remplacer par votre nom de domaine.

STOOOP! On veut des détails!

Regardons les lignes de ce fichier les unes après les autres.

Tous d'abord, les premières lignes correspondent à des options générales.

  • table aliases … : On précise dans quel fichier se trouvent les alias entre les utilisateurs. Ce fichier permet de faire suivre des messages.
  • table passwd … : On définit le fichier contenant les mots de passe chiffrés qu'on a créés auparavant.
  • table virtuals … : Le fichier contenant la liste des utilisateurs virtuels.
  • pki … : On indique où se trouve la clé et le certificat correspondant servant à identifier le serveur et établir une connexion sécurisée. Modifiez les emplacements selon ce que vous avez obtenu dans le paragraphe sur la gestion des certificats.
  • listen on all tls pki chezmoi.tld : smtpd écoute (sur le port 25) pour recevoir des courriels d'autres serveurs. Ici, la connexion profite du chiffrement tls si possible en utilisant le certificat configuré plus haut, repéré par son nom de domaine.
  • listen on all port submission tls-require pki chezmoi.tld auth <passwd> : Cette ligne indique que le serveur écoute sur le port submission avec indispensablement une connexion chiffrée en tls (tls-require). Aussitôt, celui qui se connecte sur ce port doit s'identifier (auth) par rapport au contenu de la table <passwd>. Cette ligne permet à un utilisateur virtuel de se servir d'un client de messagerie pour envoyer des courriels à partir de son ordinateur.

Ensuite, sont définies quelques actions qui seront appliquées aux mails. Il peut s'agir d'envoyer un courriel à l'extérieur ou bien de distribuer une enveloppe à un utilisateur du serveur.

  • action “envoi” relay : le serveur relaie l'enveloppe. Dit plus simplement, il l'envoie à l'adresse écrite dessus, au serveur mail SMTP du destinataire.
  • action local_mail maildir alias <aliases> : On distribue l'enveloppe dans une boîte de type maildir d'après la table de correspondance <aliases>. C'est utile pour les messages internes au système, envoyés à un utilisateur du système. C'est important d'avoir paramétré la redirection de mail pour root dans ce cas.
  • action virtual_maildir maildir “/var/vmail/%{dest.domain}/%{dest.user}/Maildir” virtual <virtuals> :

Dans cette action, on distribue une enveloppe dans un dossier de type maildir selon la table des utilisateurs virtuels. Remarquez que le chemin de la boîte maildir est précisé de façon à correspondre au dossier indiqué plus haut.

Enfin, on regarde si on doit envoyer un message ou le délivrer pour appliquer les actions définies.

Notez que si rien n'est précisé, on considère que la règle s'applique pour un message venant du serveur : le from local est sous-entendu. Sinon, from any permet d'envoyer un message à partir de votre ordinateur, en passant par le serveur.

  • match for local action local_mbox : on délivre les messages système.
  • match from any for domain chezmoi.tld action virtual_maildir : si le message vient de l'extérieur et est pour le nom de domaine du serveur, on le distribue aux utilisateurs virtuels.
  • match auth from any for any action “envoi” : lorsqu'un message provient d'un client extérieur au serveur et authentifié avec son mot de passe (avec votre client de messagerie par exemple), on envoie le message.
  • match for any action “envoi” : on envoie les message émis depuis

“l'intérieur” du serveur.

Nous passons maintenant à une étape simple mais importante afin que les mails soient correctement émis. Il faut indiquer dans le fichier /etc/myname votre nom de domaine sur une seule ligne. Il s'agit du domaine que vous avez indiqué dans le champ MX de votre zone DNS :

chezmoi.tld

Nous pouvons maintenant activer et relancer le serveur smtpd :

# rcctl enable smtpd
# rcctl restart smtpd

Voilà pour opensmtpd :).

Dovecot

Dovecot va être utilisé comme serveur IMAP, afin de pouvoir récupérer son courrier à partir d'un client comme Thunderbird.

On installe dovecot comme d'habitude :

# pkg_add dovecot

On édite maintenant le fichier /etc/dovecot/local.conf pour y mettre le contenu suivant :

# On écoute en IPV4 et IPV6.
listen = *, [::]

# imap > pop
protocols = imap

# Securisation. Editez ces lignes
ssl = yes
ssl_cert = </etc/ssl/chezmoi.tld-fullchain.pem
ssl_key = </etc/ssl/private/chezmoi.tld.key
disable_plaintext_auth = yes

# tres important comme on a modifie les permissions
# sur /etc/mail/passwd
service auth {
    user = $default_internal_user
    group = _maildaemons
}

# methodes d'authentification
passdb {
    args = scheme=blf-crypt /etc/mail/passwd
    driver = passwd-file
}

# Les messages sont dans /var/vmail et appartiennent à _vmail
userdb {
    driver = static
    args = uid=_vmail gid=_vmail home=/var/vmail/%d/%n/ 
}

L'exemple ci-dessus est commenté pour vous aider à comprendre ce qui y est fait.

Pensez à adapter l'emplacement des certificats aux variables ssl_cert et ssl_key.

Par ailleurs, une configuration ssl est déjà pré-configurée dans le fichier /etc/dovecot/conf.d/10-ssl.conf. C'est censé nous faciliter la vie avec un script qui génère un certificat auto-signé, mais comme on a déjà nos certificats et configuré cette partie, il risque de ne pas trop aimer. Dans ce fichier, commentez donc toutes les lignes restantes :

## Fichier /etc/dovecot/conf.d/10-ssl.conf
#ssl_cert = </etc/ssl/dovecotcert.pem
#ssl_key = </etc/ssl/private/dovecot.pem

Afin que dovecot fonctionne correctement, il faut maintenant éditer le fichier /etc/login.conf pour ajouter quelques lignes : (voir le fichier /usr/local/share/doc/pkg-readmes/dovecot*)

dovecot:\
    :openfiles-cur=1024:\
    :openfiles-max=2048:\
    :tc=daemon:

On prend en compte les changements récents sur ce fichier avec la commande suivante :

# [ -f /etc/login.conf.db ] && cap_mkdb /etc/login.conf

Pour terminer cette partie, on active dovecot et on relance les différents éléments constituant le serveur mail.

# rcctl enable dovecot
# rcctl start dovecot
# rcctl restart smtpd

Il vous est désormais possible d'utiliser un client de messagerie afin de consulter votre courrier.

Ajouter un nouveau compte mail

Vous devez remplir les fichiers /etc/mail/virtuals et /etc/mail/passwd avec une ligne en plus. Ensuite, lancez les commandes suivantes pour que smtpd prenne vos changements en compte :

smtpctl update table virtuals
smtpctl update table passwd

Ou alors, relancez smtpd avec rcctl.

Contribu(trices|teurs) :

prx
5-mail/virtuals.txt · Dernière modification: 2020/02/05 13:44 (modification externe)