Serveur Mail IMAPs-POPs-SMTPs

Fixer les adresses IP :

root@SRV-DEBIAN:~# nano /etc/network/interfaces
allow-hotplug eth1
iface eth1 inet static
root@SRV-DEBIAN:~# ifdown eth0 eth1
root@SRV-DEBIAN:~# ifup eth0 eth1

Renommer votre serveur :

root@SRV-DEBIAN:~# echo "SRV-MAIL" > /etc/hostname
root@SRV-DEBIAN:~# /etc/init.d/

Configurer votre serveur DNS (Bind9)

Installer bind9

root@SRV-DEBIAN:~# apt-get install bind9

Configurer une zone (exemple :

root@SRV-DEBIAN:~# cd /etc/bind
root@SRV-DEBIAN:/etc/bind# nano named.conf.default-zones

zone "" {
        type master;
        file "/etc/bind/";

root@SRV-DEBIAN:/etc/bind# cp db.local
root@SRV-DEBIAN:/etc/bind# nano

; BIND data file for local loopback interface
$TTL    604800
@       IN      SOA (
                              2         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
@       IN      NS      ns.
@       IN      MX 10

ns      IN      A
mail    IN      A
pop     IN      CNAME   mail

Redémarrer le service et tester votre nouvelle zone

root@SRV-DEBIAN:/etc/bind# service bind9 restart
root@SRV-DEBIAN:/etc/bind# apt-get install dnsutils
root@SRV-DEBIAN:/etc/bind# dig @ mx

;                    IN      MX

;; ANSWER SECTION:             604800  IN      MX      10

;; AUTHORITY SECTION:             604800  IN      NS      ns.

;; ADDITIONAL SECTION:        604800  IN      A

Ajouter l’adresse de votre serveur DNS sur votre serveur mail :

root@SRV-DEBIAN:/etc/bind# nano /etc/resolv.conf

domain localdomain
search localdomain

root@SRV-DEBIAN:/etc/bind# ping -c 3
PING ( 56(84) bytes of data.
64 bytes from icmp_req=1 ttl=64 time=0.025 ms
64 bytes from icmp_req=2 ttl=64 time=0.068 ms
64 bytes from icmp_req=3 ttl=64 time=0.070 ms

Configurer vos services mail

Installer Postfix

root@SRV-DEBIAN:/etc/bind# apt-get install postfix

Installer Dovecot

root@SRV-DEBIAN:/etc/bind# apt-get install dovecot-common dovecot-imapd dovecot-pop3d libsasl2-2 libsasl2-modules sasl2-bin


root@SRV-DEBIAN:/etc/bind# nano /etc/default/saslauthd

# Should saslauthd run automatically on startup? (default: no)

Générer les différents certificats :

root@SRV-DEBIAN:/etc/bind# cd
root@SRV-DEBIAN:~# openssl req -new -x509 -days 3650 -nodes -out "" -keyout ""

Generating a 2048 bit RSA private key
writing new private key to ''
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
Country Name (2 letter code) [AU]:FR
State or Province Name (full name) [Some-State]:Nord
Locality Name (eg, city) []:Valenciennes
Organization Name (eg, company) [Internet Widgits Pty Ltd]
Organizational Unit Name (eg, section) []
Common Name (e.g. server FQDN or YOUR name) []
Email Address []

root@SRV-DEBIAN:~# ls

Créer .pem à partir de la clé privé et de la clé publique

root@SRV-DEBIAN:~# cat >
root@SRV-DEBIAN:~# cp* /etc/ssl/private/
root@SRV-DEBIAN:~# ls  /etc/ssl/private/

Certificat du CA

root@SRV-DEBIAN:/etc/ssl/private# cd /etc/ssl/certs/
root@SRV-DEBIAN:/etc/ssl/certs# openssl req -new -x509 -days 3650 -nodes -out "ca-certificates.crt" -keyout "ca-certificates.key"
Generating a 2048 bit RSA private key
writing new private key to 'ca-certificates.key'
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
Country Name (2 letter code) [AU]:FR
State or Province Name (full name) [Some-State]:Nord
Locality Name (eg, city) []:Valenciennes
Organization Name (eg, company) [Internet Widgits Pty Ltd]
Organizational Unit Name (eg, section) []
Common Name (e.g. server FQDN or YOUR name) []
Email Address []
root@SRV-DEBIAN:/etc/ssl/certs# ls
16174d9a  ca-certificates.crt  ca-certificates.key  ssl-cert-snakeoil.pem

Configuration de Postfix

root@SRV-DEBIAN:~# nano /etc/postfix/

smtpd_banner = $myhostname Welcome
biff = no
myorigin = /etc/mailname
mydestination =
relayhost =
mynetworks = [::ffff:]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
# Your hostname and domain name here
# Virtual mailbox configuration (/var/email should have been created through the previous commands)
# SSL configuration, make sure to use the certificates from step 2 (optional)
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
# Authentication settings, making use of SASL
smtpd_recipient_restrictions=reject_unknown_recipient_domain, reject_unauth_pipelining, permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

Décommenter ces lignes

root@SRV-DEBIAN:~# nano /etc/postfix/

submission inet n       -       -       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING

Et ajouter ces lignes à la fin du fichier

dovecot   unix  -       n       n       -       -       pipe
  flags=DRhu user=email:email argv=/usr/lib/dovecot/deliver -f ${sender} -d ${recipient}

Créer un fichier /etc/postfix/sasl/smtpd.conf et ajouter ces lignes

root@SRV-DEBIAN:~# nano /etc/postfix/sasl/smtpd.conf

pwcheck_method: saslauthd
mech_list: plain login cram-md5 digest-md5

Configuration de Dovecot

Editer le fichier dovecot.conf

root@SRV-DEBIAN:~# nano /etc/dovecot/dovecot.conf

# Basic configuration
protocols = imap imaps pop3 pop3s
log_timestamp = "%Y-%m-%d %H:%M:%S "
# User and group permissions
mail_location = maildir:/var/email/%d/%n/Maildir
mail_privileged_group = email
auth_verbose = yes
# SSL config
ssl_cert_file = /etc/ssl/private/
ssl_key_file = /etc/ssl/private/
# LDA config
protocol lda {
  auth_socket_path = /var/run/dovecot/auth-master
  postmaster_address =
  mail_plugins = sieve
  log_path =
# Authentication configuration
auth default {
    mechanisms = plain login
    passdb passwd-file {
        args = scheme=SHA1 /etc/dovecot/users.conf
    userdb static {
        #args = /etc/dovecot/users.conf
        args = uid=7788 gid=7788 home=/var/email/%d/%n allow_all_users=yes
socket listen {
        master {
            path = /var/run/dovecot/auth-master
            mode = 0600
            user = email
            group = email
        client {
            path = /var/spool/postfix/private/auth
            mode = 0660
            user = postfix
            group = postfix

Création des utilisateurs

Hash des mots de passe

root@SRV-DEBIAN:~# echo -n "Supinfo2015" | sha1sum
d96c57f362c003083e542d57f7c67ccb00aa2158  -

Editer le fichier contenant les utilisateurs

root@SRV-DEBIAN:~# nano /etc/dovecot/users.conf

Créer un group ’email’ avec le gid 7788

root@SRV-DEBIAN:~# groupadd email -g 7788

Créer un utilisateur système et l’ajouter dans le group email

root@SRV-DEBIAN:~# useradd email -r -g 7788 -u 7788 -d /var/email -m -c "mail user"

Sécuriser les fichiers de configuration

root@SRV-DEBIAN:~# chgrp email /etc/dovecot/dovecot.conf
root@SRV-DEBIAN:~# chmod g+r /etc/dovecot/dovecot.conf
root@SRV-DEBIAN:~# chown root:root /etc/dovecot/users.conf
root@SRV-DEBIAN:~# chmod 755 /etc/dovecot/users.conf

Gérer les domaines, les boîtes aux lettres et les alias

Gestion des domaines

root@SRV-DEBIAN:~# nano /etc/postfix/vmail_domains      OK

Gestion des boîtes aux lettres

root@SRV-DEBIAN:~# nano /etc/postfix/vmail_mailbox

Gestion des alias

root@SRV-DEBIAN:~# nano /etc/postfix/vmail_aliases

Mapper et redémarrer les services

root@SRV-DEBIAN:~# postmap /etc/postfix/vmail_domains
root@SRV-DEBIAN:~# postmap /etc/postfix/vmail_aliases
root@SRV-DEBIAN:~# service postfix stop && service dovecot stop
root@SRV-DEBIAN:~# service postfix start && service dovecot start

Tester votre configuration avec telnet

root@SRV-DEBIAN:/etc/ssl/certs# telnet imap
Connected to
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE START                                                                                        TLS AUTH=PLAIN AUTH=LOGIN] Dovecot ready.
a1 LOGIN Supinfo2015
a1 OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT                                                                                         SORT=DISPLAY THREAD=REFERENCES THREAD=REFS MULTIAPPEND UNSELECT CHILDREN NAMESP                                                                                        ACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES                                                                                         WITHIN CONTEXT=SEARCH LIST-STATUS SPECIAL-USE] Logged in
a2 LIST "" "*"
* LIST (\HasNoChildren) "." "Sent"
* LIST (\HasNoChildren) "." "Drafts"
* LIST (\HasNoChildren) "." "Trash"
* LIST (\HasNoChildren) "." "INBOX"
a2 OK List completed.
* FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
* OK [PERMANENTFLAGS ()] Read-only mailbox.
* OK [UIDVALIDITY 1430416227] UIDs valid
* OK [UIDNEXT 3] Predicted next UID
a3 OK [READ-ONLY] Select completed.
* 1 FETCH (BODY[] {875}
Return-Path: <>
Received: from [] (unknown [])
        (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
        (No client certificate requested)       
by (Postfix) with ESMTPSA id 930AF40380
        for <>; Thu, 30 Apr 2015 20:02:26 +0200 (CEST)
Message-ID: <>
Date: Thu, 30 Apr 2015 20:02:21 +0200
From: Delphine <>
User-Agent: Mozilla/5.0 (X11; Linux i686; rv:31.0) Gecko/20100101 Thunderbird/31                                                                                        .6.0
MIME-Version: 1.0
To: Dominique <>
Subject: Re: test
References: <>
In-Reply-To: <>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit


On 30/04/2015 20:01, Dominique wrote:
> test

a4 OK Fetch completed.
* BYE Logging out
a5 OK Logout completed.
Connection closed by foreign host.
Votre serveur mail est correctement configuré, vous pouvez l’utiliser avec un client lourd. (Attention aux DNS sur votre client)


Je vous conseille d’utiliser RainLoop
Son installation est très simple, il suffit d’installer apache2 et php5, de télécharger et d’extraire l’archive et de configurer apache.
Pour accéder à l’interface d’administration il faut entrer http://monserveur/?admin
Les identifiants par défaut sont :

Vous devez configurer le nom de domaine de votre serveur à partir de l’interface d’administration.

Une fois le nom de domaine renseigné, vos clients peuvent se connecter grâce à leurs adresses mails et leurs mot de passe.

Open VPN sous Pfsense

Le but de ce tutoriel est d’installer un serveur VPN sur Pfsense.

L’identification de l’utilisateur passe par un serveur Active Directory (supinfo.local)

Nous devons aussi configurer Pfsense afin que l’utilisateur puisse se connecter à une interface graphique pour qu’il puisse télécharger le logiciel OpenVPN.

1 – Configuration du serveur Active Directory

Domain Controler

  • Dans notre cas le domaine est supinfo.local
  • Nous avons créer l’arborescence suivante : UO :  Pfsense > Users
  • Dans l’UO Users, nous avons créé 3 objets :
    • Un utilisateur autorisant l’accès à Pfsense (OpenVPN) : accesvpn
    • Un utilisateur “test”
    • Un groupe permettant de donner des droits d’accès (exemple : télécharger le logiciel)

2 – Création d’un certificat :

Cert Manager Menu

  • Cliquer sur le + afin de créer un nouveau certificat

Nouveau CA

  • Remplir les champs comme ci-dessous puis cliquer sur SAVE :

Informations CA

3 – Gestion des utilisateurs du domaine

Afin de connaitre le chemin exact de l’utilisateur :

    • Sur votre Contrôleur de Domaine
      • Lancer une mmc
      • Ajouter le composant “Utilisateurs & ordinateurs”
      • Dans Affichage sélectionner “fonctionnalités avancées”
      • Recherche votre utilisateur et faîtes un clique droit puis“Propriété”
      • Afficher l’onglet “Editeur d’attributs”
      • Rechercher la variable “distinguishedName” et noter ses paramètres


User Manager Menu

  • Cliquer sur le + afin d’ajouter un nouveau moyen d’authentification

AD Authentification

  • Remplir les champs :
    • IP : celle de votre serveur Active Directory
    • Port : celui par défaut 389
    • Certificat : Celui créer précédemment (CA_access_VPN)
    • Search Scope :
      • Sélectionner : Level : “Subtree”
      • Base Name : supinfo.local : DC=supinfo,DC=local

Authentification DC Paramètres

      • User DN : la valeur de distinguishedName trouvé dans la manipulation sur le DC
      • Entrer le mot de passe de l’utilisateur
      • Valider

Paramètres DC

  • Dans le User Manager, sélectionner le DC (Supinfo)

User Manager Settings

  • Installer le package OpenVPN Client Export Utility
    • System > Packages > Available Packages

Installation OpenVPN Client Export Utility

  • Dans le User Manager, Créer un nouveau Groupe
    • Le nouveau groupe sur Pfsense doit-être identique au groupe sur le DC

Groupe User Manager

  • Ajouter le droit de pouvoir télécharger le package d’installation d’OpenVPN avec la configuration du client
    • Cliquer sur le + de Assigned Privileges et selectionner “OpenVPN : Client Export Utility”

Droits groupes User Manager

4 – Création du serveur OpenVPN :

  • Lancer VPN > OpenVPN > Wizard

Wizard OpenVPN

  • Sélectionner le serveur DC (Supinfo)

Wizard OpenVPN LDAP

  • Sélectionner le certificat (CA_access_VPN)

Wizard OpenVPN CA

  • Créer le certificat du serveur (les informations sont pré-remplies)

Wizard Création certificat

Wizard Création certificat Suite

  • Choisir comme Encryption Algorithm : BF-CBC (128 bit)

BF-CBC (128 bit) Wizard Création

  • DNS Default : Celui de votre DC, DNS 1 : L’adresse IP de votre DC

Paramètres IP du client

Wizard règles automatique Firewall

Wizard Terminé

5- Configuration du Firewall

  • Dans Interfaces > WAN
    • Vérifier que la case “Block private networks” est décochée

Vérification paramètrage Firewall sur l'interface WAN

  • Ajouter une règle sur votre Firewall afin que vos utilisateurs puissent accéder à l’interface web pour télécharger leurs configurations

Règle HTTP WAN > Internet

Règle HTTP WAN > Internet Suite

6 – Installation d’OpenVPN sur le client :

  • Lancer un navigateur web et entrer l’adresse de votre serveur Pfsense

Connexion du client sur l'interface web

  • Descendre en bas de la page et télécharger votre Installeur en fonction de votre plateforme

Téléchargement de l'installeur

  • Lancer votre installation …
    • Lancer OpenVPN et faire un clique droit sur l’icône de notification (fenêtre avec un cadenas)
    • Cliquer sur connecter

Première connexion

  • Identifiez-vous avec un utilisateur du domaine appartenant au groupe VPN

Identification OpenVPN

  • Notre client est bien connecté avec l’IP

Connexion réussie, Adressage IP Automatique


Vous avez correctement configuré Pfsense pour un serveur OpenVPN.

Installation et Configuration de SquidGuard sur Pfsense

SquidGuard permet de bloquer certain contenu sur Internet.

Les listes de contenu peuvent-être manuel ou téléchargeable :

Les listes ci-dessus sont compatible avec Pfsense.

  • Installer le package “squidGuard-squid3 « 

menu  menu

Installation du Package SquidGuard

  • Configurer votre Proxy filtrer :


  • Aller dans “Blacklist”


  • Entrer l’URL d’une source de liste de filtrage et attendre “Blacklist update complete” :


Téléchargement et Installation de la blacklist

  • Retourner dans la configuration générale


  • Cocher la case “Blacklist” et cliquer sur “Save”

activation du blacklistage

  • Remonter et activer le proxy

activation de SquidGuard

  • Dans Commun ACL cliquer “Rules”


  • Choisir les catégories à bloquer

catégories de filtrage

  • Activer la protection des moteur de recherche : “SafeSearch”.
  • Dans notre cas, lorsqu’une page est bloquée, Pfsense l’a remplace par un message d’erreur.

activation du safesearch

  • Appliquer les changements

application des changements

page bloquée

La page est bloquée.

Vous avez configuré votre filtrage web.

Mise en place de Squid3 avec Pfsense (mode Transparent)

Nous allons mettre en place un proxy avec Pfsense.

Ce proxy sera l’intermédiaire entre le réseau Internet, notre réseau LAN et Pedago.

Le but de ce serveur est de protéger les réseaux ascendants du réseau Internet ou externe.

Un proxy régule les données qui transite par lui-même.

Dans notre cas, nos clients ne recevrons que des informations sur des pages web.

Il sera impossible d’établir un contrôle distant depuis le réseau Internet directement sur un client connecté au proxy.

  • Installation du package SQUID3


  • Cliquer sur “Available Packages”


  • Installer le package SQUID3 et patienter pendant l’installation



  • Aller dans “Services” puis dans “Proxy server”


  • Configurer votre serveur proxy :
  1. Sélectionner les réseaux (ici : LAN et PEDAGO)
  2. Cocher : Allow users
  3. Cocher Transparent HTTP proxy (permet de ne pas renseigner l’utilisation d’un proxy sur les clients).


  • Descendre en base de la page et cliquer sur “SAVE”





Ci-dessous la vidéo de la manipulation.

DNS avec Pfsense

Dans un précèdent billet, nous avons routé les trames d’un réseau vers un autre afin d’afficher la page web Cubbyhole.

Le problème, c’est que le client devait taper :

Afin de facilité la tâche aux clients nous allons mettre en place une résolution DNS.

Lorsque le client tape Pfsense va résoudre puis router les trames d’un réseau à l’autre afin d’afficher la page web.


  • Aller dans “Service” puis “DNS Forwarder”


  • Descendre en bas de la page afin d’ajouter un hôte


  • Remplir les champs, Hôte, Domaine, et adresse IP ainsi qu’une description puis valider.


  • Appliquer les changements



  • Tester : Faire un ping de votre hôte :


  • Dans notre exemple, le système résout et le navigateur nous affiche la page web :



Ci-dessous la vidéo de la manipulation.

Routage via Pfsense


Nous allons mettre en place un routage pour que le terminal sur le réseau puisse communiquer avec le serveur WEB sur le réseau /16.

Il faut créer une règle permettant au terminal d’envoyer et recevoir les requêtes et permettre aussi au serveur web d’envoyer et recevoir les requêtes vers son client.

  • Aller dans “Firewall” puis dans “Rules”


  • Créer une nouvelle règle sur le réseau “source” :


  • Choisir l’interface, le Protocol, la source, la destination et les ports



  • Valider
  • Faire la même chose pour le réseau “destinataire” :


  • La même chose sauf qu’il faut inverser source et destination 😉


  • Ne pas oublier de sauvegarder la configuration :


Tester votre configuration :


Nous arrivons à afficher notre page web.


Ci-dessous la vidéo de la manipulation :

Pfsense mise en place de règles firewall

  • Se connecter à l’interface d’administration Pfsense.
  • Cliquer sur “Firewall” puis sur “Rules”


  • Sélectionner l’interface puis cliquer sur “add”


  • Remplir les règles :



  1. Sélectionner l’action : On autorise, On n’autorise pas.
  2. Choisir l’interface
  3. Choisir le protocole
  4. La Source : Une adresse IP, un sous-réseau, un réseau, etc …
  5. La destination : Une adresse IP, un sous-réseau, un réseau, etc …
  6. Les ports : 80 (http), 443 (https), 53 (DNS), etc …
  7. Cliquer sur “SAVE”

Exemple pour la configuration du HTTPS :



  • Gestion des règles fonctionnent par arborescence :

Exemple : je souhaite utiliser le protocole http, Pfsense ce pose ces questions :

  1. Est-ce un DNS ?
  2. Est-ce un HTTPS ?
  3. Est-ce un HTTP => OUI, j’actionne la règle (ici, j’autorise).


Il faut ajouter la règle qui bloque tout en dernier (sécurité).

Il faut faire attention à la place des règles par soucis d’optimisation.

Dans l’exemple ci-dessus, il faut placer le http en 2èmes car il est plus souvent utilisé que le https.

  • Pour modifier l’ordre des règles :
  1. Cocher la règle
  2. Cliquer sur la main avec une flèche.


  • Ne pas oublier d’appliquer la modification de ces règles et d’attendre le rafraichissement.


Test : Essayer de vos connecter en http et https (exemple :

puis connectez-vous en ftp (

La connexion http et https réussit mais la connexion ftp échoue.

Logique: nous n’avons pas autorisé ce Protocol via une règle.


Vous avez correctement configuré vos règles.

Ci-dessous la vidéo de la manipulation :