mail sécurité - MaximeDanlee/admin2-projet GitHub Wiki

Sécurité du service mail

Risques de sécurité

L'email spoofing :

Il s’agit d’une technique d’usurpation d’identité qui consiste à envoyer des messages en se faisant passer pour quelqu’un d’autre. L’objectif des fraudeurs est de tromper le destinataire de l’e-mail en lui faisant croire que l’expéditeur est quelqu’un de confiance.

Le spam :

il s'agit de la réception d'email pas voulu, ces mails sont souvent envoyés en grand nombre à des fins publicitaires.

Interception d'email :

Certaines personnes peuvent intercepter les emails et lire leurs contenus sans notre autorisation.

Contre-mesures possibles

L'email spoofing :

  1. Création d’un enregistrement SPF (Sender Policy Framework) .

  2. Utilisation de la technique DKIM (Domain Keys Identified Mail).

  3. L’enregistrement DMARC (Domain-based Message Authentication, Reporting and Conformance).

  4. Reverse DNS.

Grâce à ces protocoles l'authentification des expéditeurs et des domaines seront vérifiés et donc l'usurpation d'identité sera sera moindre ou même nulle.

Le Spam :

  1. Proxy SMTP

  2. Reverse DNS

  3. Création d’un enregistrement SPF

  4. Utilisation de la technique DKIM

  5. L’enregistrement DMARC

En plus de SPF, DKIM, DMARC et le reverse DNS, le proxy SMTP va filtrer les mails avant d'arriver au serveur mail.

Interception d'email :

  1. S/MIME

  2. PGP

S/MIME et PGP permettent de chiffrer les mails.

Explication des contre-mesures

  • SPF « Sender Policy Framework » : est un mécanisme permettant d’éviter l’usurpation d’identité de l’expéditeur en associant le domaine et l'adresse IP source. (une sorte de white list)

  • DKIM (Domain Keys Identified Mail) : est une clé de sécurisation qui permettra de lier une signature électronique aux e-mails envoyés ce qui garantit l’authentification du domaine et l'intégrité du message.

  • DMARC (Domain-based Message Authentication, Reporting and Conformance) : permet de déterminer vous-même les actions à entreprendre avec les e-mails qui ne passent pas les contrôles DKIM et SPF. Trois résultats possibles pour un email : Approve, Quarantine ou Rejet.

  • Reverse DNS : permet de vérifier si d'adresse IP vient bien du domaine de l'expéditeur.

  • Le S/MIME (Secure/Multipurpose Internet Mail Extensions) : permet de chiffrer les e-mails. Cette technologie utilise la cryptographie asymétrique pour protéger vos e-mails des accès indésirables. Ce protocole vous permet de signer numériquement vos e-mails et d’attester ainsi que vous êtes l'expéditeur légitime du message

  • PGP (Pretty Good Privacy) est un système de chiffrement utilisé pour crypter des données et des fichiers sensibles. On l’utilise également pour envoyer des emails chiffrés.

  • Proxy SMTP permet de filtrer les mails contre le spam et les virus. Configurer les mécanismes ad-hoc pour ne pas être considéré comme émetteur de spam.

Contre-mesures implémentées

_dmarc TXT ( "v=DMARC1;p=quarantine;sp=quarantine;pct=100;adkim=r;aspf=r;fo=1;ri=86400;rua=mailto:[email protected];ruf=mailto:[email protected];rf=afrf" )

test DMARC

Configuration des contre-mesures

Chiffrement des emails

  1. éditez /etc/postfix/main.cf
# TLS parameters
smtpd_tls_security_level = may
smtpd_tls_auth_only = no
smtpd_tls_key_file = /etc/letsencrypt/live/vps.adminpasbete.fr/privkey.pem
smtpd_tls_cert_file = /etc/letsencrypt/live/vps.adminpasbete.fr/fullchain.pem
smtpd_tls_CAfile = /etc/letsencrypt/live/vps.adminpasbete.fr/cert.pem
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
# on active TLS pour les connexions sortantes
# Sur un postfix anterieur a 2.3, c'est smtp_use_tls = yes
smtp_tls_security_level = may
smtp_tls_key_file = /etc/letsencrypt/live/vps.adminpasbete.fr/privkey.pem
smtp_tls_cert_file = /etc/letsencrypt/live/vps.adminpasbete.fr/fullchain.pem
smtp_tls_CAfile = /etc/letsencrypt/live/vps.adminpasbete.fr/cert.pem
smtp_tls_note_starttls_offer = yes
smtp_tls_enforce_peername = no

source : ici

SPF configuration :

Record SPF dans le dns :
@ IN TXT "v=spf1 ip4:135.125.101.226 ~all" Ceci indique que seul le serveur 135.125.101.226 peut envoyer des emails pour ce domaine
source : ici

DKIM configuration :

  1. On commence par installer le package opendkim
    apt-get install opendkim opendkim-tools spamass-milter

  2. Éditez le fichier /etc/opendkim.conf à la fin, ajoutez les éléments suivants :

AutoRestart             Yes
AutoRestartRate         10/1h
UMask                   002
Syslog                  yes
SyslogSuccess           Yes
LogWhy                  Yes

Canonicalization        relaxed/simple

ExternalIgnoreList      refile:/etc/opendkim/TrustedHosts
InternalHosts           refile:/etc/opendkim/TrustedHosts
KeyTable                refile:/etc/opendkim/KeyTable
SigningTable            refile:/etc/opendkim/SigningTable

Mode                    sv
PidFile                 /var/run/opendkim/opendkim.pid
SignatureAlgorithm      rsa-sha256

UserID                  opendkim:opendkim

Socket                  inet:12301@localhost

explication :

AutoRestart: Redémarre le filtre en cas de plantage.
AutoRestartRate: Indique le ratio de redémarrage minimum et maximum. Si le nombre de redémarrage est plus rapide que ce ratio, ce dernier va être arreté.
UMask: indique les permissions et ID utilisateur/groupe.
Syslog, SyslogSuccess, *LogWhy: activé les log syslog
Canonicalization: méthode canonical de signature des messages,
simple : autorise aucune modification
relaxed : autorise des modificiations mineures comme changer les espaces.
relaxed/simple : L'en-tête du mail utilisera la méthode relaxed et le corps du message utilisera la méthode simple.
ExternalIgnoreList: la liste des des hôtes par lequel les mails peuvent passer sans signatures.
InternalHosts: liste des hôtes à ne pas vérifier et signer : signature sans vérification.
KeyTable: Le chemin des tables de clés de signatures.
SigningTable: Liste des tables de signatures pour lequels seront basés les champs from des mails.
Mode: declares operating modes; in this case the milter acts as a signer (s) and a verifier (v)
PidFile: Le fichier PID (process identification number)
SignatureAlgorithm:  indique l'algorithme de signatures à utiliser
UserID: Le UserID du processus opendkim
Socket: Le socket d'écoute de opendkim. Postfix va envoyer les messages à opendkim pour les vérification et signatures à travers ce socket.
  1. Éditez le fichier /etc/default/opendkim à la fin, ajoutez cette ligne pour indiquer quel port utilisera OpenDKIM à postfix :
SOCKET="inet:12301@localhost"
  1. Éditez le fichier /etc/postfix/main.cf et vérifier la configarution:
myhostname = l2-2.ephec-ti.be
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = spf-dkim-sio.ovh, vps402861.ovh.net, localhost.ovh.net, localho$
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_command = procmail -a « $EXTENSION »
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
socket= inet:12301@localhost
milter_protocol = 2
milter_default_action = accept
smtpd_milters = inet:localhost:12301
non_smtpd_milters = inet:localhost:12301
  1. Nous allons maintenant créer le dossier « opendkim » qui contiendra les hôtes de confiance « TrustedHosts », « KeyTable », « SigningTable » :
mkdir /etc/opendkim  
mkdir /etc/opendkim/keys
  1. Éditez le fichier /etc/opendkim/TrustedHosts:
127.0.0.1
localhost
192.168.0.1/24

*.l2-2.ephec-ti.be
  1. Éditez le fichier /etc/opendkim/KeyTable pour indiquer à OpenDKIM quel fichier clef doit être utilisé pour notre domaine:
mail._domainkey.domaine.comdomaine.com:mail:/etc/opendkim/keys/domaine.com/mail.private
  1. Éditez le fichier /etc/opendkim/SigningTable pour assurer la liaison de chaque adresse e-mail vers son domaine correspondant:
*@domaine.com mail._domainkey.domaine.com
  1. Nous allons maintenant générer la paire de clef DKIM grâce aux commandes suivantes :
1. cd /etc/opendkim/keys
2. mkdir domaine.com
3. cd domaine.com
3. opendkim-genkey -s mail -d domaine.com
4. chown opendkim:opendkim mail.private
5. cat /etc/opendkim/keys/domaine.com/mail.txt
  1. On va ajouter les clés publics au DNS:
    a. cat /etc/opendkim/keys/domaine.com/mail.txt (La clé publique se trouve dans le paramètre p)
mail._domainkey IN      TXT     ( "v=DKIM1; k=rsa; "
          "p=lacleprubliquequiestlongue" )  ; ----- DKIM key mail for malekal.com

b. déclaration DNS

mail._domainkey 10800 IN TXT "v=DKIM1; k=rsa; p=lacleprubliquequiestlongue"
  1. Une fois les configuration terminé, redémarrer les service Opendkim et Postfix à l’aide des commandes :
* /etc/init.d/opendkim restart
* /etc/init.d/postfix restart

Vous pouvez retrouver les sources ici et ici

Configuration DMARC :

  1. On ajoute dans le DNS :
_dmarc TXT ( "v=DMARC1;p=quarantine;sp=quarantine;pct=100;adkim=r;aspf=r;fo=1;ri=86400;rua=mailto:[email protected];ruf=mailto:[email protected];rf=afrf" )
  1. Installer opendmarc dans Postfix : apt install opendmarc

  2. On édite ensuite le fichier de configuration /etc/opendmarc.conf:

 AuthservID mail.example.com
    PidFile /var/run/opendmarc.pid #Debian default
    RejectFailures false
    Syslog true
    TrustedAuthservIDs mail.example.com,mail2.example.com
    UMask 0002
    UserID opendmarc:opendmarc
    IgnoreHosts /etc/opendmarc/ignore.hosts
    HistoryFile /var/run/opendmarc/opendmarc.dat
    #for testing:
    SoftwareHeader true

Explication :

AuthservID: mettez l’hostname de votre serveur (mail.example.com)
PidFile: chemin du fichier PID
RejectFailures: true or false. Si la valeur est true alors tous les messages qui ne passeront pas la vérification DMARC seront rejetés. Je préfère avoir les messages donc je garde la valeur à false.
Syslog: true or false. Active les logs ou non.
TrustedAuthservIDs: ces AuthservIDs sont considérés comme nécessitant la validation DMARC. Utile lorsque plusieurs serveurs MX sont présents et qu’ils n’ont pas tous besoin d’être validés par DMARC.
UMask: du fichier PID et du fichier de socket.
UserID: utilisateur et groupe qui gère le service dmarc.
IgnoreHosts: chemin du fichier d’exclusion.
HistoryFile: chemin du fichier d’historique. Nécessaire pour envoyer des rapports à d’autres organisations.
SoftwareHeader: ajoute un entête “Dmarc-Filter” avec la version opendmarc à chaque email traité. Utile pour la phase de test.
  1. On crée maintenant le fichier d’exclusion :
mkdir /etc/opendmarc/
nano /etc/opendmarc/ignore.hosts
  1. on y ajoute la liste des réseaux et domaines de confiance :
localhost
10.0.0.0/24
172.16.0.0/24
  1. On configure maintenant le fichier /etc/default/opendmarc avec une directive SOCKET: SOCKET="inet:54321@localhost"

  2. On demande à ce qu’opendmarc soit lancé au démarrage du serveur : systemctl enable opendmarc

  3. On démarre opendmarc : service opendmarc start

source : ici

⚠️ **GitHub.com Fallback** ⚠️