# Installation d'un serveur de courrier basique

Debian installe par défaut exim4. Nous allons le remplacer par postfix (que nous étendrons par la suite pour obtenir un serveur de mail complet)

Il faut penser à ouvrir les ports 25 en IPV4 et IPV6 avec firewalld.

## Installation

    pi@raspberrypi:~ $ sudo apt install postfix
    Lecture des listes de paquets... Fait
    Construction de l'arbre des dépendances
    Lecture des informations d'état... Fait
    Les paquets suivants ont été installés automatiquement et ne sont plus nécessaires :
    libgnutls-dane0 libunbound8
    Veuillez utiliser « sudo apt autoremove » pour les supprimer.
    Les paquets supplémentaires suivants seront installés :
    ssl-cert
    Paquets suggérés :
    procmail postfix-mysql postfix-pgsql postfix-ldap postfix-pcre postfix-lmdb postfix-sqlite sasl2-bin | dovecot-common postfix-cdb ufw
    postfix-doc openssl-blacklist
    Les paquets suivants seront ENLEVÉS :
    exim4-base exim4-config exim4-daemon-light
    Les NOUVEAUX paquets suivants seront installés :
    postfix ssl-cert
    0 mis à jour, 2 nouvellement installés, 3 à enlever et 0 non mis à jour.
    Il est nécessaire de prendre 1 423 ko dans les archives.
    Après cette opération, 0 o d'espace disque supplémentaires seront utilisés.
    Souhaitez-vous continuer ? [O/n] o
    Réception de :1 http://ftp.igh.cnrs.fr/pub/os/linux/raspbian/raspbian buster/main armhf postfix armhf 3.4.14-0+deb10u1 [1 402 kB]
    Réception de :2 http://mirrors.ircam.fr/pub/raspbian/raspbian buster/main armhf ssl-cert all 1.0.39 [20,8 kB]
    1 423 ko réceptionnés en 3s (524 ko/s)
    Préconfiguration des paquets...
    dpkg: exim4-daemon-light : problème de dépendance, mais suppression comme demandé :
    logwatch dépend de default-mta | mail-transport-agent ; cependant :
    Le paquet default-mta n'est pas installé.
    Le paquet exim4-daemon-light qui fournit default-mta doit être supprimé.
    Le paquet mail-transport-agent n'est pas installé.
    Le paquet exim4-daemon-light qui fournit mail-transport-agent doit être supprimé.
    logwatch dépend de default-mta | mail-transport-agent ; cependant :
    Le paquet default-mta n'est pas installé.
    Le paquet exim4-daemon-light qui fournit default-mta doit être supprimé.
    Le paquet mail-transport-agent n'est pas installé.
    Le paquet exim4-daemon-light qui fournit mail-transport-agent doit être supprimé.

    (Lecture de la base de données... 46982 fichiers et répertoires déjà installés.)
    Suppression de exim4-daemon-light (4.92-8+deb10u4) ...
    dpkg: exim4-config : problème de dépendance, mais suppression comme demandé :
    exim4-base dépend de exim4-config (>= 4.82) | exim4-config-2 ; cependant :
    Le paquet exim4-config doit être supprimé.
    Le paquet exim4-config-2 n'est pas installé.
    Le paquet exim4-config qui fournit exim4-config-2 doit être supprimé.
    exim4-base dépend de exim4-config (>= 4.82) | exim4-config-2 ; cependant :
    Le paquet exim4-config doit être supprimé.
    Le paquet exim4-config-2 n'est pas installé.
    Le paquet exim4-config qui fournit exim4-config-2 doit être supprimé.

    Suppression de exim4-config (4.92-8+deb10u4) ...
    Sélection du paquet postfix précédemment désélectionné.
    (Lecture de la base de données... 46922 fichiers et répertoires déjà installés.)
    Préparation du dépaquetage de .../postfix_3.4.14-0+deb10u1_armhf.deb ...
    Dépaquetage de postfix (3.4.14-0+deb10u1) ...
    (Lecture de la base de données... 47112 fichiers et répertoires déjà installés.)
    Suppression de exim4-base (4.92-8+deb10u4) ...
    Sélection du paquet ssl-cert précédemment désélectionné.
    (Lecture de la base de données... 47038 fichiers et répertoires déjà installés.)
    Préparation du dépaquetage de .../ssl-cert_1.0.39_all.deb ...
    Dépaquetage de ssl-cert (1.0.39) ...
    Paramétrage de ssl-cert (1.0.39) ...
    Paramétrage de postfix (3.4.14-0+deb10u1) ...
    Ajout du groupe « postfix » (GID 118)...
    Fait.
    Ajout de l'utilisateur système « postfix » (UID 112) ...
    Ajout du nouvel utilisateur « postfix » (UID 112) avec pour groupe d'appartenance « postfix » ...
    Le répertoire personnel « /var/spool/postfix » n'a pas été créé.
    Creating /etc/postfix/dynamicmaps.cf
    Ajout du groupe « postdrop » (GID 119)...
    Fait.
    setting myhostname: raspberrypi
    setting alias maps
    setting alias database
    changing /etc/mailname to yojik.net
    setting myorigin
    setting destinations: $myhostname, yojik.net, raspberrypi, localhost.localdomain, localhost
    setting relayhost:
    setting mynetworks: 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
    setting mailbox_size_limit: 0
    setting recipient_delimiter: +
    setting inet_interfaces: all
    setting inet_protocols: all
    WARNING: /etc/aliases exists, but does not have a root alias.

    Postfix (main.cf) is now set up with a default configuration.  If you need to
    make changes, edit /etc/postfix/main.cf (and others) as needed.  To view
    Postfix configuration values, see postconf(1).

    After modifying main.cf, be sure to run 'service postfix reload'.

    Running newaliases
    Created symlink /etc/systemd/system/multi-user.target.wants/postfix.service → /lib/systemd/system/postfix.service.
    Traitement des actions différées (« triggers ») pour systemd (241-7~deb10u6+rpi1) ...
    Traitement des actions différées (« triggers ») pour man-db (2.8.5-2) ...
    Traitement des actions différées (« triggers ») pour rsyslog (8.1901.0-1) ...
    pi@raspberrypi:~ $

## Suppression complète de exim4

On supprime complètement exim4, fichiers de configuration inclus.

    pi@raspberrypi:~ $ sudo apt remove --purge exim4*
    Lecture des listes de paquets... Fait
    Construction de l'arbre des dépendances
    Lecture des informations d'état... Fait
    Note : sélection de exim4-base pour l'expression rationnelle « exim4* »
    Note : sélection de exim4-config-2 pour l'expression rationnelle « exim4* »
    Note : sélection de exim4-doc-info pour l'expression rationnelle « exim4* »
    Note : sélection de exim4-daemon-light pour l'expression rationnelle « exim4* »
    Note : sélection de exim4-daemon-heavy pour l'expression rationnelle « exim4* »
    Note : sélection de exim4-daemon-custom pour l'expression rationnelle « exim4* »
    Note : sélection de exim4-config pour l'expression rationnelle « exim4* »
    Note : sélection de exim4-doc-html pour l'expression rationnelle « exim4* »
    Note : sélection de exim4-localscanapi-2.0 pour l'expression rationnelle « exim4* »
    Note : sélection de exim4-dev pour l'expression rationnelle « exim4* »
    Note : sélection de exim4 pour l'expression rationnelle « exim4* »
    Le paquet « exim4-daemon-custom » n'est pas installé, et ne peut donc être supprimé
    Note : sélection de « exim4-config » au lieu de « exim4-config-2 »
    Le paquet « exim4 » n'est pas installé, et ne peut donc être supprimé
    Le paquet « exim4-daemon-heavy » n'est pas installé, et ne peut donc être supprimé
    Le paquet « exim4-dev » n'est pas installé, et ne peut donc être supprimé
    Le paquet « exim4-doc-html » n'est pas installé, et ne peut donc être supprimé
    Le paquet « exim4-doc-info » n'est pas installé, et ne peut donc être supprimé
    Les paquets suivants ont été installés automatiquement et ne sont plus nécessaires :
    libgnutls-dane0 libunbound8
    Veuillez utiliser « sudo apt autoremove » pour les supprimer.
    Les paquets suivants seront ENLEVÉS :
    exim4-base* exim4-config* exim4-daemon-light*
    0 mis à jour, 0 nouvellement installés, 3 à enlever et 0 non mis à jour.
    Après cette opération, 0 o d'espace disque supplémentaires seront utilisés.
    Souhaitez-vous continuer ? [O/n] o
    (Lecture de la base de données... 47047 fichiers et répertoires déjà installés.)
    Purge des fichiers de configuration de exim4-base (4.92-8+deb10u4) ...
    Purge des fichiers de configuration de exim4-config (4.92-8+deb10u4) ...
    dpkg-statoverride: avertissement: pas de dérogation (« override ») présente
    Purge des fichiers de configuration de exim4-daemon-light (4.92-8+deb10u4) ...
    Traitement des actions différées (« triggers ») pour systemd (241-7~deb10u6+rpi1) ...
    pi@raspberrypi:~ $

## Ouverture des ports 25

Ajout du protocole smtp à notre zone.

### Liste des services disponibles

    pi@piras:~ $ sudo firewall-cmd --get-services
    RH-Satellite-6 amanda-client amanda-k5-client amqp amqps apcupsd audit bacula
    bacula-client bgp bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc
    ceph ceph-mon cfengine cockpit condor-collector ctdb dhcp dhcpv6
    dhcpv6-client distcc dns docker-registry docker-swarm dropbox-lansync
    elasticsearch etcd-client etcd-server finger freeipa-ldap freeipa-ldaps
    freeipa-replication freeipa-trust ftp ganglia-client ganglia-master
    git gre high-availability http https imap imaps ipp ipp-client
    ipsec irc ircs iscsi-target isns jenkins kadmin kerberos kibana klogin
    kpasswd kprop kshell ldap ldaps libvirt libvirt-tls lightning-network
    llmnr managesieve matrix mdns minidlna mongodb mosh mountd mqtt mqtt-tls
    ms-wbt mssql murmur mysql nfs nfs3 nmea-0183 nrpe ntp nut openvpn
    ovirt-imageio ovirt-storageconsole ovirt-vmconsole plex pmcd pmproxy
    pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp
    pulseaudio puppetmaster quassel radius redis rpc-bind rsh rsyncd
    rtsp salt-master samba samba-client samba-dc sane sip sips slp smtp
    smtp-submission smtps snmp snmptrap spideroak-lansync squid ssh
    steam-streaming svdrp svn syncthing syncthing-gui synergy syslog syslog-tls
    telnet tftp tftp-client tinc tor-socks transmission-client upnp-client vdsm
    vnc-server wbem-http wbem-https wsman wsmans xdmcp xmpp-bosh xmpp-client
    xmpp-local xmpp-server zabbix-agent zabbix-server
    pi@piras:~ $

Le protocole qui nous intéresse est : smtp

### Ajout du service smtp

    pi@piras:~ $ sudo firewall-cmd --permanent --zone=public --add-service=smtp
    success
    pi@piras:~ $

Il faut recharger firewalld pour que ce soit pris en compte.

    pi@piras:~ $ sudo systemctl restart firewalld
    pi@piras:~ $

### Vérification

    pi@piras:~ $ sudo firewall-cmd --list-all
    public (active)
    target: default
    icmp-block-inversion: no
    interfaces: eth0
    sources:
    services: dhcpv6-client smtp ssh
    ports:
    protocols:
    masquerade: no
    forward-ports:
    source-ports:
    icmp-blocks:
    rich rules:

    pi@piras:~ $

## Installation des utilitaire courriers

    pi@raspberrypi:~ $ sudo apt install mailutils
    Lecture des listes de paquets... Fait
    Construction de l'arbre des dépendances
    Lecture des informations d'état... Fait
    mailutils est déjà la version la plus récente (1:3.5-4).
    mailutils passé en « installé manuellement ».
    Les paquets suivants ont été installés automatiquement et ne sont plus nécessaires :
    libgnutls-dane0 libunbound8
    Veuillez utiliser « sudo apt autoremove » pour les supprimer.
    0 mis à jour, 0 nouvellement installés, 0 à enlever et 0 non mis à jour.
    pi@raspberrypi:~ $

Ils étaient déjà installés.

## Test d'envoi de courriers entre comptes internes.

- pi-> root

  Les commandes suivantes permettent de :

  - envoyer un message à root(Essai 1)

        pi@raspberrypi:~ $ mail root
        Cc:
        Subject: Essai1
        Essai 1
        .
        pi@raspberrypi:~ $

  - passer root

        pi@raspberrypi:~ $ sudo /bin/bash
        root@raspberrypi:/home/pi#

  - lancer mutt

        root@raspberrypi:/home/pi# mutt
        1 gardé(s), 0 effacé(s).
        root@raspberrypi:/home/pi#

- root -> pi

      root@raspberrypi:/home/pi# mail pi
      Cc:
      Subject: Essai 2
      .
      root@raspberrypi:/home/pi# exit
      Vous avez du nouveau courrier dans /var/mail/pi
      pi@raspberrypi:~ $ mutt
      3 gardé(s), 0 effacé(s).
      pi@raspberrypi:~ $

  Nous avions 2 messages avant: le nouveau message est bien arrivé !

## Configuration de postfix

Il nous faut configurer postfix pour permettre l'envoi de courriers à l'extérieur et en recevoir de l'extérieur.

Pour cela, il nous faut modifier le fichier /etc/postfix/main.cf

Modifiez la ligne mydestination pour qu'elle ressemble à ce qui suit :

> mydestination = $myhostname, yojik.net, atom.yojik.net, localhost.yojik.net, localhost

et relancez postfix avec la commande suivante :

> sudo service postfix restart

### Courriers sortants

Envoi d'un message sur mon compte de messagerie gmail (oui, un envoi sur mon compte normal ne fonctionne pas dû à sa configuration):

    pi@piras:~$ echo "Et voilà un petit message" | mail -s "test du courrier sortant" ericounet26200@gmail.com

Le message est bien reçu et dans les courriers indésirables, bien entendu (pas de dkim, spf, dnnssec, etc.)

### Courriers entrants

Envoi d'un message à partir de mon adresse de courrier normale :

Message bien reçu (après mise à jour de mon serveur DNS).

## Amélioration de la gestion du courrier

Nous allons transférer les mails destinés à root vers l'utilisateur pi. Ainsi que d'autres adresses de courrier standards. Pour cela, nous allons modifier le fichier /etc/aliases, le compiler pour être digeste par postfix et relancer postfix.

Ce fichier sert à rediriger toutes les adresses émail comme abuse, webmaster, root vers un utilisateur administrateur de la machine, root puis vers moi ericadmin.

    # /etc/aliases
    mailer-daemon: postmaster
    postmaster: root
    nobody: root
    hostmaster: root
    usenet: root
    news: root
    webmaster: root
    www: root
    ftp: root
    abuse: root
    noc: root
    security: root
    root: pi

Il faut lancer la commande newaliases pour générer le fichier.db utile à Postfix et on demande à Postfix de recharger ses fichiers.

    pi@piras:~ $ sudo newaliases
    pi@piras:~ $

On relance postfix :

    pi@piras:~ $ sudo systemctl restart postfix
    pi@piras:~ $

Et on teste (envoi d'un courrier à root@piras.yojik.net)

Et voilà, notre serveur de courrier est fonctionnel.

## Protection par Fail2ban

Nous devons ajouter la surveillance du mail par fail2ban.

Editons le fichier /etc/fail2ban/jail.d/defaults-debian.conf pour y ajouter la surveillance de postfix (port smtp : 25.)

Nous prenons l'exemple fourni dans /etc/fail2ban/jail.conf et ne gardons que le port 25.

Voilà la partie modifiée à ajouter :

    [postfix]
    mode    = more
    port    = smtp
    logpath = %(postfix_log)s
    backend = %(postfix_backend)s

Relançons le service pour que nos modifications soient prises en compte:

    pi@piras:~ $ sudo systemctl reload fail2ban
    pi@piras:~ $

« Previous Next »