Avec 12 disques (a -> l)
for i in {a..l}; do echo sd$i; udevadm info --query=all --name=/dev/sd$i | grep ID_SERIAL_SHORT; done
Avec 12 disques (a -> l)
for i in {a..l}; do echo sd$i; udevadm info --query=all --name=/dev/sd$i | grep ID_SERIAL_SHORT; done
Se fait via un live-cd démarré en EFI, de la même architecture que le système à dépanner (pour que le chroot fonctionne)
# On déchiffre et monte slash
cryptsetup open /dev/sdX2 slash
mount /dev/mapper/slash /mnt
cd /mnt
# On monte l'ESP et la partition /boot
mount /dev/sdX3 ./boot
mount /dev/sdX1 ./boot/efi
# On monte les fichiers systèmes temporaires
mount --rbind /sys ./sys
mount --rbind /dev ./dev
mount --rbind /proc ./proc
mount --rbind /run ./run
chroot /mnt
grub-install /dev/sdX --target x86_64-efi
update-grub
# On recrée l'initramfs, afin qu'il demande le mot de passe LUKS
update-initramfs -k all -u
Une source intéressante
Images, conteneurs et volumes
Dockerfile build
sudo apt install docker.io
à partir de buster ; sinon, utiliser le site docker.io.
sudo adduser user docker
pour ne pas avoir à taper sudo à chaque commande.
docker search --filter=stars=1000 debian
docker pull debian:tag
# si :tag est omis, docker cherchera :latest
docker image ls -a
# ou
docker images
# In folder containing the Dockerfile
docker build -t "my-image123:test" .
docker rmi my-image123:test
# on peut aussi utiliser l'id de l'image
Lien qui en parle aussi
Sert à génerer des images modifiées à partir d’images existantes.
Utilise un fichier Dockerfile (nom non négociable).
Celui-ci est formaté avec une instruction FROM
qui définit l’image de base utilisée. Ce peut être un nom type debian
ou un ID type 00bf7fdd8baf
On peut utiliser RUN
pour lancer des instructions shell pour modifier notre image (par exemple installer des paquets).
On peut gérer le programme lancé au démarrage d’un conteneur instancié sur cette image (par défaut bash chez Debian), ainsi que la commande executée par ce programme, via les instructions ENTRYPOINT
et CMD
. Plus de détails ici.
En gros, ENTRYPOINT est le binaire lancé lorsque le conteneur démarre (habituellement bash), et CMD est la commande éventuelle lancée par cet entrypoint. Définir un entrypoint sur autre chose que bash permet de faire du container un exécutable, qui ne lancera que ce pour quoi il est fait.
Les instructions RUN, ENTRYPOINT et CMD peuvent être écrites de 2 formes, la forme shell et la forme exécutable. Dans la forme shell, elle seront exécutées via -c
alors qu’en forme exécutable, la commande est appelée directement :
# Shell form
RUN /path/to/command -o option arg otherarg
# Exec form
RUN ["/path/to/exec", "-o", "option", "arg", "otherarg"]
Un exemple de Dockerfile qui lance un serveur apache basique :
FROM debian
RUN apt-get update \
&& apt-get install -y apache2 nano
EXPOSE 8080 80
CMD apachectl -D FOREGROUND
On peut ensuite construire l’image désirée via docker build :
docker build -t nom:tag /path/to/folder/with/Dockerfile
# --rm=false : permet de ne pas supprimer les conteneurs intermédiaires (cache), même après un build successful
Un conteneur est instancié à partir d’une image.
# en version simple
docker create debian
# qui va chercher debian:latest
# on peut aussi faire
# en plus complet
docker create -ti --name my-app123 --hostname app --net my-net123 -p 8080:80 debian:tag welcome-command --arg1 value --arg2
# les options doivent être avant le nom de l'image de base
# -t pour --tty, ce qui permettra de lancer le conteneur avec un shell root@truc:/# . Sans ça, il se coupe si rien à faire
# -i pour --interactive , ce qui laissera la porte ouverte au conteneur pour recevoir des commandes (STDIN ouvert)
# si aucun nom s'est spécifié, Docker en génerera un poétique
# si aucun hostname n'est spécifié, il sera géneré aléatoirement
# --net ou --network permet d'attacher le conteneur à un réseau choisi (doitj être créé auparavant
# -p pour exposer les ports ; voir section réseau
# on peut spécifier, après le nom d'image, la commande à exécuter (typiquement bash)
# on peut aussi spécifier une autre commande pour outrepasser l'entrypoint, et/ou passer des arguments
docker start my-app123
Le conteneur est lancé, mais ne s’affiche pas dans notre terminal (juste son nom).
Il faut l’attacher, pour avoir le shell à l’écran et pouvoir interagir.
docker attach my-app123
Ou encore
docker exec -it container_name bash
On peut directement attacher le shell lors de la création du conteneur, mais il faut alors spécifier l’option -i pour pouvoir interagir avec le conteneur (taper des commandes).
docker start -ia my-app123 # --interactive --attach
# -a , --attach pour voir l'état du conteneur
# -i pour pouvoir taper des commandes
On peut ensuite détacher le conteneur avec Ctrl-P -> Ctrl-Q
.
docker stop my-app123
docker kill my-app123 # pour forcer l'extinction
docker container ls
# ou en plus court
docker ps
# pour lister les conteneurs en cours d'éxécution
docker ps -a
# pour lister tous les conteneurs, même éteints.
docker ps -s
# pour lister la taille des conteneurs
docker container rm my-app123
# on peut aussi utiliser l'id
docker container prune
# -f si on souhaite ne pas avoir de prompt de confirmation
Combine docker pull, docker create et docker start
docker run name
# télécharge si nécessaire l'image "name:latest", crée un container avec un nom aléatoire, et le lance
# on peut passer à docker run les mêmes arguments que docker create
docker run --name="my-app123" -p 80:80 -e TERM=xterm -d --net my-net123 --ip 172.18.0.23 demo-docker
Docker crée une interface virtuelle pour chaque réseau créé. Par défaut, c’est la carte docker0
qui crée le réseau bridgé 172.17.0.0/24
avec l’adresse 172.17.0.1
.
Il y’a différents types de réseau : bridge
(réseau virtuel “simple”, choix par défaut), host
(le conteneur se connecte directement via la pile réseau de la carte de l’hôte), overlay
(surtout pour le swarm), macvlan
.
On peut créer des réseaux (bridgés) définis sur mesure. Ces réseaux se comporteront différemment du réseau par défaut. Notamment, les machines pourront communiquer entre elles via leur adresse IP, mais également via le nom de conteneur.
De plus, les conteneurs d’un même réseau peuvent communiquer librement entre eux sur tous les ports (et, par défaut, aucun port n’est ouvert vers l’extérieur de ce réseau). Un conteneur peut être connecté à plusieurs réseaux.
Chaque conteneur lancés aura aussi une interface virtuelle (par réseau) type veth1234567
.
docker network ls
docker network inspect network-name
docker network create --subnet 172.18.0.0/24 my-net123
docker run --net my-net123 --ip 172.18.0.23
docker network connect my-net123 my-app123
docker network disconnect my-net123 my-app123
docker network rm my-net123
docker network prune
L’exposition de ports peut se faire dans le Dockerfile, ou bien à la création du conteneur. Toutefois, elle est principalement là pour documenter les ports utilisés par le conteneur, et n’aura (presque) aucun effet pratique. Cela peut se faire :
docker create --expose 8080:80/tcp
EXPOSE 8080 80/tcp
.Il me semble que certains mécanismes peuvent faire appel aux ports exposés, par exemple la détection automatique de port par nginx-proxy.
La publication de ports sert effectivement à “ouvrir” le port du conteneur depuis l’hôte. Ainsi, le service fourni par le conteneur deviendra accessible via l’IP de l’hôte sur le port choisi. Cette publication ne peut se faire que lors de la création d’un conteneur.
docker create -p 8080:80/tcp debian
# tcp est le défaut, et peut être omis, ou remplacé par udp
va rediriger le port 8080 de l’hôte vers le port 80 du conteneur. Ainsi, seul l’IP de l’hôte a besoin d’être routable.
Un port n’a pas besoin d’avoir été exposé pour pouvoir être publié.
On peut aussi écrire uneiquement -p 80/tcp
, auquel cas un port est choisi aléatoirement sur l’hôte.
Exposer un port sur un conteneur déjà lancé
Lors d’un docker ps
, les ports publiés seront mentionnés sous la forme 0.0.0.0:80->80/udp
, alors que les ports exposés seront mentionnés sous la forme 80/tcp
.
Voir le détail des ports d’un conteneur :
docker inspect my-app123 | grep -i port -A3
On y voit les ports exposés (ExposedPorts) et les ports publiés (Ports).
Servent à monter un dossier de l’hôte chez le client.
Peut être déclaré dans le Dockerfile (non recommandé ici), ou au moment de la création du conteneur.
Doit être installé en sus de docker.
sudo apt install docker-compose
Sert automatiser, via fichier de conf docker-compose.yml
, la construction d’image sur mesure, ainsi que la création de conteneurs basé sur ces images, et leur paramétrage (port, etc…).
Si on est dans un dossier testcompose
, on peut avoir le fichier docker-compose.yml suivant :
version: '3'
services:
apache-test:
build:
context: apache-folder
dockerfile: Dockerfile
ports:
- "8080:80"
restart: always
command: --arg1 value --arg2
Ceci définit un service apache-test
, dont le Dockerfile et les fichiers pouvant être nécessaires à se construction se trouvent dans le dossier (context) apache-folder
. Le port 80 sera publié via le port 8080 de l’hôte.
Les projects docker-compose ont un nom, qui par défaut est le nom du dossier. Ceci peut causer des messages d’erreur si plusieurs projets sont dans des dossiers qui portent le même nom (par exemple dev/myapp/ et prod/myapp ; les 2 projets s’appelleront myapp et seront “confondus” par le système). Ce nom de projet peut être défini dans le fichier .env, via la variable COMPOSE_PROJECT_NAME
.
On peut lister tous les projets docker-compose via la commande suivante (source) :
docker ps --filter "label=com.docker.compose.project" -q | xargs docker inspect --format='{{index .Config.Labels "com.docker.compose.project"}}'| sort | uniq
.
On peut construire l’image avec docker-compose build
. Elle sera nommée testcompose_apache-test
(nomdudossier_nomduservice).
Ceci crée aussi un réseau testcompose_default
auquel seront liés tous les services définis dans le docker-compose.yml.
On peut aussi construire l’image, puis démarrer un container basé sur cette image, via docker-compose up --build
.
Ceci va créer un container dont le nom est testcompose_apache-test_1
.
On peut passer les conteneurs en arrière-plan avec l’option -d
.
On peut passer des arguments à docker-compose via l’entrée command
(qui, contrairement à ce que son nom indique, ne fait que rajouter des arguments à l’entrypoint défini dans l’image, à condition que celle-ci ait été définie en forme Exec, et non Shell. Source ).
On peut écrire la commande sur plusieurs lignes, en suivant la syntaxe suivante (ne PAS échapper les fins de lignes) :
command: >
myapp
--firstoption "value"
--secondoption
--thirdoption "value"
(explication ici)
Voir ici : https://vsupalov.com/docker-arg-env-variable-guide/
En gros,on a :
Le fichier .env
: n’est pris en compte qu’au moment de l’interprétation du fichier docker-compose.yml
, et sert à remplacer des variables dans ce fichier par des valeurs. Elles ne seront absolument PAS visibles par le conteneur lors de son exécution. Le nom d’un service ne peut toutefois pas utiliser de variable.
Les arguments type docker create -e VAR=val
pour définir des variables qui seront accessibles dans le conteneur en exécution (on peut les lister avec la commande env
lancée dans le conteneur). Ce mécanisme est utilisable dans docker-compose via la directive environment:
L’argument docker create --env-file=./fichier
qui permet de définir un fichier dans lequel lire des variables, qui seront accessibles comme si elles avaient été passées via -e
. Ce mécanisme est utilisable dans docker-compose via la directive env_file:
Error starting userland proxy: listen tcp 0.0.0.0:80: bind: address already in use
Signifie que le port sur lequel on essaye de lancer une machine est déjà pris par une autre machine.
docker logs my-app
Les logs sont stockés dans le fichier /var/lib/docker/containers/<container_id>/<container_id>-json.log
On peut mettre en place une rotation des fichiers de log en éditant le fichier /etc/docker/daemon.json
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
puis systemctl restart docker
(ATTENTION : redémarre tous les containers).
N’affecte que les containers nouvellement lancés.
Source
Un certain nombre d’applications sont conçues pour coloriser leur sortie si celle-ci est de type tty.
Ceci peut se paramétrer dans la commande docker : docker -t
ou dans le fichier docker-compose.yml : tty: true
L’avantage est que la sortie visuelle d’une docker logs
sera plus lisible ; l’inconvénient est ça limite les usages autres : un docker logs myapp | less
nous affichera tous les caractères de coloration, rendant l’ensemble peu lisible ; de même, un grep
sur une chaîne avec un changement de coloration au milieu ne fonctionnera pas.
Pour remédier à ceci, on peut utiliser la commande ansi2txt
, contenue dans le paquet Debian colorized-logs
, et qui supprime les caractères de colorisation. Par exemple,
docker logs myapp | ansi2txt | less
Il y’a aussi des solutions individuelles en fonction du programme de sortie ; par exemple pour less, on peut utiliser less -R
pour préserver les couleurs.
Imprimer carte !!
Bolas
Chargeur solaire
Crème solaire
Éventail
jeu carte/société
Lampions
Bol tibétain / balles jonglage
Toroflux
Enceinte
Powerbank
Brumisateur
Gourde filtrante
Sacoche - Gourde - Cup - Petite montre
Papier
Marqueur
Stylo
Frontale (x2)
Piles
Bouchons d’oreille X2
Trousse toilette
Carnet
Sérum phy
Lunettes de soleil
Foulard
Trousse couture
Sachets plats préparés (pâtes !!)
Céréales sucrées (choco, x2)
Mélange céréales (“sportif”)
Couverts
Éponges
Bidons
Sachets réhydratation !!
Gel hydro-alcooolique
Sopalin
LD32W
Vapo
Sacs poubelles transparents
Tente
Matelas
Sac couchage
Couvertures survie
Plaids
Glacière
Ficelle
Outils (pince étau ; masse ; tournevis plat/cruci )
Gaffer
Elément en italique
Élément en italique aussi (étoiles)
Élement en gras
Sous Linux, il arrive que, pour économiser de l’énergie, la carte son se mette en veille après quelques temps d’inactivité. Ceci génère chez moi des craquements assez désagréables lors de sa remise en fonctionemment, ou parfois un craquement très régulier tout le long de la veille.
Pour voir si la mise en veille est activée :
cat /sys/module/snd_hda_intel/parameters/power_save
S’il contient autre chose que 0, alors le mode powersave est activé.
Pour le désactiver, on peut ajouter le fichier /etc/modprobe.d/snd_disable_powersave.conf
et entrer dedans la ligne suivante :
options snd_hda_intel power_save=0
Puis redémarrer, ou bien décharger/recharger le module.
Mac OS a tendance à laisser des fichiers un peu partout dans les répertoires auxquels il a accès en écriture.
Pour les supprimer, sous Windows :
cd /d X:\infected\folder
del /s /q /f /a .DS_STORE
del /s /q /f /a:h ._.*
del /s /q /f /a:h ._* # cela peut suprrimer aussi certains fichiers de chrome, attention s'il y'a un profil dans le chemin !
del /s /q /f /a __MACOSX
Le /a
permet de matcher quels que soient les attributs.
Sous linux :
find ./ \( -name ".AppleDouble" -o -name .DS_Store -o -name ._.* \) -exec rm -Rf {} \;
But de la manoeuvre : transformer travail.domaine.com
en work.ville.nouveaudomaine.fr
, ainsi que les noms NetBIOS de TRAVAIL vers WORK.
Sources :
Pour du Server 2003
Pour du Server 2008
Une synthèse
Une autre synthèse
Il faut au préalable créer une nouvelle zone DNS. Pour ceci, Gestionnaire DNS -> nouvelle zone
Dans un cas simple, laisser les choix par défaut (zone principale, intégrée à l’AD, vers tous les serveurs DNS executés sur des DC dans ce domaine). Adapter si besoin.
Nom de la zone à créer : work.ville.nouveaudomaine.fr
Depuis la station de contrôle, on lance une invite de commande en administrateur. Je conseille de dédier un répertoire à la migration
mkdir C:\migration_domaine
cd C:\migration_domaine
Puis
rendom /list
Ceci crée un fichier domainList.xml
dans le répertoire courant, qu’il faut éditer en remplaçant l’ancien nom de domaine par le nouveau (il est sage de le backuper avant modification).
On remplace dedans les occurences de travail.domaine.com
par work.ville.nouveaudomaine.fr
.
On lance ensuite
rendom /showforest
Ceci affiche les infos updatées selon le fichier DomainList.xml modifié. Il ne modifie rien, mais permet de vérifier que la nouvelle organisation est bien celle attendue.
Ensuite,
rendom /upload
Ceci crée le fichier Dclist.xml et l’envoie sur les controlleurs de domaine. Cette étape freeze la foret pour éviter les interactions indésirables entre la migration de domaine, et d’éventuelles modifications sur la forêt.
Microsoft conseille ensuite de répliquer les infos de configuration depuis le serveur Domain Naming Master (mettre son hostname à la place dans la commande suivante) :
repadmin /syncall /d /e /P /q DomainNamingMaster
Si besoin de le connaitre le serveur qui joue le rôle de DNM, on a la commande
dsquery server -forest -hasfsmo Name
Vérifier dans le serveur DNS que nous avons IMPÉRATIVEMENT toutes les entrées définies dans cet article
On peut ensuite lancer la commande
rendom /prepare
qui va vérifier que tous les DCs sont aptes à être mis à jour. Ceci se vérifie sur le fichier Dclist.xml (les DC doivent être en état Prepared).
Enfin,
rendom /execute
qui lance effectivement la mise à jour. Les DCs vont rebooter automatiquement.
Penser à vérifier après reboot que le login se fait bien en utilisant le nouveau domaine, ainsi que les panneau de conf Système.
Vérifier le fichier Dclist.xml, les DCs doivent être à l’état Done.
Si il subsiste un état “Error”, il est possible de compléter la ligne <Retry><Retry>
en <Retry>yes<Retry>
, puis de réaplliquer cette étape (les DCs à l’état Done ne seront pas réaffectés par la manipulation).
Si un DC reste malgré tout à l’état Error, il faut lui enlever (puis remettre) les rôles AD-DS.
Puis sur un (chaque?) DC après redémarrage :
gpfixup /olddns:travail.domaine.fr /newdns:work.ville.nouveaudomaine.fr
qui met à jour et répare les dépendances de nom de domaine dans le stratégies de groupe après changement.
De même,
gpfixup /oldnb:TRAVAIL /newnb:WORK
qui met à jour le nom NetBIOS du domaine.
À ce stade, il faut redémarrer 2 fois chaque poste client, puis vérifier que son FQDN prend bien en compte le nouveau domaine.
On peut enfin lancer la commande
rendom /clean
qui supprime les références à l’ancien domaine.
Attention, les postes non rebootés 2 fois après cette étape devront être manuellement retirés de l’ancien domaine, puis réintégrés dans le nouveau domaine.
Enfin,
rendom /end
qui finalise la procédure et dévérouille la forêt.
Après connexion d’un client, on peut vérifier que celui-ci est bien présent dans la zone récemment créée des serveurs DNS.
Vérifier/updater les chemins du DFSN, des partages réseaux déployés et des imprimantes déployées
Les FQDN des clients intègrent automatiquement le nouveau nom de domaine, mais pas les serveurs. Pour les renommer correctement, il faut ajouter le FQDN du nouveau domaine, puis le mettre en principal. Pour ceci,
netdom computername DC1.travail.domaine.com /add:DC1.work.ville.nouveaudomaine.fr netdom computername DC1.travail.domaine.com /makeprimary:DC1.work.ville.nouveaudomaine.fr
Les partages réseaux déployés par les GPO ne sont pas mis à jour automatiquement pour utiliser le nouveau domaine/nom d’hôte, il faut le faire à la main
De même pour les imprimantes déployées par GPO. Si le serveur les hébergeant a changé de nom d’hôte, il faut les mettre à jour
si un espace de nom DFS (DFSN) est utilisé, il ne sera pas non plus mis à jour automatiquement
lorsque tout fonctionnait bien j’ai backupé (exporté) puis supprimé la zone DNS de l’ancien domaine des serveur DNS pour en effacer les traces et m’assurer que tout reposait bien sur le nouveau domaine
la synchronisation user/password avec Azure AD Connect ne fonctionnait plus, il a fallu la réinitialiser selon ce post
Dcdiag /test:DNS /DnsRecordRegistration /s:domaincontroller
Vérifier le serveur DHCP et le validité du basculement de l’étendue, s’il existe.
Il peut parfois être nécessaire de reconfigurer complètement les services de synchronisation entre un Active Directory local et les services Office 365 (Azure Active Directory Connect).
Pour ceci, il faut les désactiver chez O365 via Powershell, les désinstaller du serveur local, puis réinstaller AAD Connect sur le serveur local.
On ouvre une session Powershell en admin.
Si les outils de gestion PS vers O365 ne sont pas installés, on le fait via
Install-Module -Name MSonline
(si message de commande introuvable, il est nécessaire d’installer les PackageManagement, dispo ici
On initialise la variable de connection via
$msolcred = get-credential
en rentrant les ids d’un admin sur O365.
On établit la connection aux services O365
connect-msolservice -credential $msolcred
Il est ensuite temps de supprimer les applis AAD Connect du serveur local (ajout/suppression de programme).
Une fois désinstallés, on lance la commande PS :
Set-MsolDirSyncEnabled -EnableDirSync $false
et on valide avec Y.
pour obtenir l’état de synchro, on lance la commande
Set-MsolDirSyncEnabled -EnableDirSync $false
qui doit désormais renvoyer “false”.
Il faut plusieurs heures (voire une nuit) à Microsoft Azure pour prendre réellement en compte l’arrêt de la synchro. Lorsque ce sera fait, l’interface d’admin O365 n’affichera plus le status AAD Connect, ni l’état (Synchronisé/Dans le cloud) des Utilisateurs O365. Les utilisateurs anciennement synchronisés seront de facto considérés comme utilisateurs cloud.
Une fois que la suppression de la synchro est bien prise en compte par les serveurs O365, il suffit de réinstaller Azure AD Connect, avec éventuellement une passe préalable de IdFix.
Cf. ce post
La synchro reprend normalement assez rapidement, et quelques heure plus tard, l’état AAD Connect réapparait dans le centre d’administration O365.
Les enregistrements DNS de type SPF et DMARC servent à essayer d’assurer la bonne provenance d’un mail en identifiant l’IP du serveur qui a envoyé le message (SPF), et en définissant des attitudes à adopter dans le cas d’un échec (DMARC).
Il est aussi possible de signer cryptographiquement des messages (DKIM), mais ceci n’est pas couvert ici.
Un enregistrement spf est de type TXT, s’applique au (sous-)domaine dont on veut essayer de légitimer les mails. Il peut ressembler à ceci, pour example.com :
v=spf1 mx ip4:1.2.3.4 include:spf.fournisseurmailing.fr -all
v=
déclare la versionmx
déclare que tous les serveurs MX de example.com ont le droit d’envoyer des mails en tant que someone@example.comip4:
déclare une adresse (ou une plage grâce à un masque) qui a le droit d’envoyer des mailsinclude:
donne une (sous-)domaine sur lequel aller chercher un enregistrement spf qui déclarerait encore d’autres entrées.Danc cet exemple, via l’entrée include, tous les serveurs que mon fournisseur de mailing-list a lui-même autorisé via le paramétrage spf de son domaine on le droit d’envoyer des mails en notre nom. On peut vérifier le contenu de ce spf via la commande dig TXT spf.fournisseurmailing.fr
.
Le -all
sert à définir strictement ces serveurs autorisés, voir cette page.
Dans un cas où il y’aurait besoin d’entrer beaucoup d’adresses ip différentes, cela peut ne pas rentrer dans un seul champ DNS. Il est alors possible de se créer un sous-domaine (par exemple spf.example.com), qui sera inclus dans le spf principal.
Par exemple, pour example.com :
v=spf1 mx ip4:1.2.3.4 ip4:5.6.7.8 ip4:9.10.11.12 include:spf.example.com -all
et pour spf.example.com
v=spf1 ip4:188.12.0.0/16 -all
pour autoriser les adresses IP 1.2.3.4 , 5.6.7.8 , 9.10.11.12 ainsi que toutes les adresses de type 188.12.X.X à envoyer des mails au nom de example.com
Attention, il ne faut toutefois pas déclencher plus 10 requêtes DNS pour évaluer le SPF (y compris les requêtes DNS provoquées par des entrées au sein d’un include).
DMARC est apparu après, et a pour objectif de dire aux serveurs qui reçoivent des mails d’une adresse nous appartenant comment recouper les tests SPF et/où DKIM, et quelle action appliquer dans le cas d’un échec.
Ceci se fait également sous la forme d’une entrée DNS, qui doit être appliquée au domaine _dmarc.example.com
, et est aussi une entrée TXT.
Elle peut ressembler à ceci :
v=DMARC1; p=quarantine; pct=100; sp=quarantine; aspf=s; adkim=r;
v=
déclare la versionp=
déclare la politique à appliquer en cas d’échec, pour une adresse du domaine. Peut être none, quarantine ou rejectpct=
déclare le pourcentage de mails auxquels on doit appliquer ce filtrage (permet de l’appliquer au fur et à mesure)sp=
déclare la politique à appliquer en cas d’échec pour une adresse d’un sous-domaineaspf=
déclare l’alignement concernant SPF. Peut être r (relaxed) ou s (strict)adkim=
déclare l’alignement concernant DKIM.Par défaut, le DMARC est passé lorsque soit DKIM soit SPF passe avec succès. Si l’un de ces 2 alignements est défini sur strict, alors il devra être passé avec succès pour que DMARC soit validé.
On peut aussi voir dans des mails une en-tête de type Authentication-Results
qui contient les résultats d’un analyse ARC. Elle peut notamment contenir les chaînes dmarc=pass spf=pass dkim=none
par exemple. Cette chaîne ARC peut être mise en place lors du transfert d’un mail (par ex liste de diffusion)