Je ne reçois toujours pas de mails - par exemple - sur mon adresse gmail ! ni ma mailing - ni les mails d’alerte d’authentification, de mise à jour des modifications de mon compte (de mon site), ni d’ajout d’articles, ni d’ajout de commentaires etc…
J’ai même dû couper toute inscription et récupération de mot de passe à cause de cela il y’a quelques (années) temps ! M**** !
Je ne sais plus quoi faire !
Je leur envoie seulement (environ) 100 mails (CF) par jours et j’ai un taux d’erreurs de distribution entre 96% et 100% et pourtant je passe bien les authentifications et conformité des messages basés sur le domaine DMARC DKIM et SPF !
J’ai passé ma politique DMARC du(des) serveur(s) Web en reject - C’est sûrement mieux pour les machines SenderDomainSub de mails depuis mes scripts) - Vu qu’ils rejettent tout dirait-on !! Pour les adresses mails normales (au pire) çà arrivera dans le dossiers SPAMs -de mes SenderDomains
J’aurai dû faire une école d’ingénieurs en 1993 - à la place d’un CAP (Contrat d’Apprentissage Professionnel) de BMA (Bois et Matériaux Associés).
J’aurai eu sûrement des potes dans le domaine et le réseau International - de consultant informatique, technico marketing, commercial - social ! Un bon (gros) réseau de pot-OS !
J’essaie de mettre ne place une MFA (Multi-Facteur Authentification) pour mes sites Web mais je ne vais pas y arriver si tous les hébergeurs de mails ne me font pas rentrer mes mails (malgré mon Authentification et Conformité des messages basés sur le domaine avec création de rapports - Domain-based Message Authentication, Reporting, and Conformance) DMARC : SPF + DKIM + rDNS
Note on Me : J’vais installer un téléphone portable pour envoyer des SMS (Short Message Service) sur mon serveur - un autre - pas celui du data-center si çà continu !
Quand j’envoie une mailing, je reçois les rapports DMARC que soit disant j’envoie des mails en mon nom de domaine principal zw3b.net, (chose fausse, puisque je n’envoie AUCUN mail en ce nom de domaine (sauf bien sûr depuis ma boîte mail - et encore puisque j’envoie depuis le .fr) !
C’est quand (et seulement) quand j’envoie un mailing avec mon script PHP (donc, avec toujours, le même Sender (envoyeur d’emails : www-data@mon-serveur-web(dot)zw3b.net) que je reçois des alertes (des rapports DMARC) des serveurs destinataires - Rapports concernant un (mon) domaine et un (mon) sous-domaine, comme quoi certains (d’autres serveurs que le mien - avec d’autres IP enverraient des mails en mon nom de domaine - et que les serveurs destinataires me retourneraient une erreur).
Je reçois des rapports DMARC sur mon nom de domaine d’envoi d’emails ; mon serveur Web ; un sous domaine - et sur mon nom de de domaine (principal) user@zw3b.tld
Puis sinon, tous les autres jours, je ne reçois aucun rapport DMARC !? Comme si personne n’usurpé mon identité les autres jours
Je me demande, puis, je me dis que cela est (bien) bizarre !
Style personne n’envoie/ou me répond (les serveurs MX destinataires)… enfin personne (soit-disant) usurpe mon identité - sauf si j’envoie une mailing ?
Bizarre et IMPOSSIBLE que cela soit seulement à ce moment - seulement à ce/cet instant - seulement quand j’envoie un mailing !
Je vais attendre, un mois pour vérifier (peut-être que DMARC envoie les rapports mensuellement si il y a plus de « 100 » mails reçus par jour par un serveur destinataire) ce que je dis - comme si soit-disant c’était comme par hasard, un jour précis… incompréhensible puisque impossible !
Je m’aperçois que l’adresse IP 158.69.126.137 de mon serveur mail est déjà bloquée sur le serveur destinataire d’adresses email (at) free (dot) fr : https://postmaster.free.fr
Si on regarde la 1ère ligne du retour de la commande « qshape.pl deferred » qui me signale le temps ; en 21h (1280 / 60) je n’ai envoyé que 762 mails à l’ISP : 170 (il y a 21h) + 272 (il y a 10h) + 162 (il y a 5h) + 74 + 43 + 25 + 7 + 5 + 4.
J’ai déjà configuré mon script pour qu’il n’envoie qu’un seul mail par seconde.
Je ne vois pas - comment - ou qui contacter chez free (dot) fr pour qu’il accepte mes mails (en plus) conforment à DMARC
Qui me contacte en Message Privé Merci !
Bon weekend de Pâques - On n’est pas des cloches - ne buvez pas trop !
J’ai installé #DNSSEC sur une de mes zones déjà « zw3b.net.hosts » et toutes les autres - tous mes noms de domaines (20220521)
DNSSEC est une extension de sécurité du protocole DNS. Il s’agit d’une signature numérique sur les informations publiées par les DNS, mise en place par une paire de clé de chiffrement, rendant plus difficile la falsification, et donc plus sécurisée.
J’ai écris un code BaSH pour dé-zipper les fichiers DMARC dans le répertoire du mois
Cà permet de ne pas oubliez de fichiers non dézipper - Au cas où l’Humain que je suis en aurais oublié
Le script est le suivant : dmarc-file-dzip.sh
#!/bin/bash
#-------------------------------------------------------------
# Script pour dezipper les fichiers DMARC
# Author : O.Romain.Jaillet-ramey (orj (at) lab3w (dot) fr)
# Date Create : 20220527
#-------------------------------------------------------------
DIR="/var/pro/web_sites/zw3b_site/www/dmarc/"
YEAR="2022"
MONTH="06"
FOLDER="${DIR}/${YEAR}/${MONTH}"
FILE_OK=`/bin/ls ${FOLDER} | awk "/(gz|zip)/"`
NB_FILES=`/bin/ls ${FOLDER} | wc -l`
echo '+-----------------------------------------------'
echo NB FILES : ${NB_FILES} IN FOLDER
echo '+-----------------------------------------------'
echo ""
c=0;
for i in `ls ${FOLDER} | awk "/(gz|zip)/"`;
do
EXT=`echo ${i} | awk '{n=split($0,tab,"."); print tab[n];}'`
FILE_DZIPED="`echo ${i} | sed -E 's/\.(zip|gz)//g'`"
# echo "Extension : $EXT"
# file ${FOLDER}/${i};
if [ ${EXT} = 'zip' ];
then
# echo 'File Type : ZIP';
if [ `echo ${FILE_DZIPED} | grep "xml"` ];
then
FILE_DZIPED="${FILE_DZIPED}"
else
FILE_DZIPED="${FILE_DZIPED}.xml"
fi
fi
if [ ${EXT} = 'gz' ];
then
# echo 'File type : GZ';
FILE_DZIPED="${FILE_DZIPED}"
fi
# echo '+-----------------------------------------------'
# echo ""
# echo "FILE : "${i};
# echo "TYPE DZIPED : " ${FILE_DZIPED};
# echo ""
# echo '+--------------'
if [ ! -f "${FOLDER}/${FILE_DZIPED}" ] && [ -f "${FOLDER}/$i" ];
then
c=$(($c+1))
echo '+-----------------------------------------------'
echo -n "\ $c";
echo " - "${i};
echo " \ "
echo -n ' +-- Unzip file '
if [ ${EXT} = 'zip' ];
then
echo ' type : ZIP';
echo ""
unzip "${FOLDER}/${i}" -d ${FOLDER}
fi
if [ ${EXT} = 'gz' ];
then
echo ' type : GZ';
echo ""
gzip -dk "${FOLDER}/${i}"
fi
# echo '+-----------------------------------------------'
echo ""
fi
done;
echo '+-----------------------------------------------'
echo NB FILES : ${c} PROCESSED
echo '+-----------------------------------------------'
echo ""
Lancez la commande comme cela : sh dmarc-file-dzip.sh
On peut mieux faire hein
NdMoi-même : Ajout du 20220624 - Optimisation du script par @PengouinPdt.
time dmarc-file-dzip.sh
real
0m0,026s
user
0m0,029s
sys
0m0,003s
Donc, gentiment, @PengouinPdt a optimisé le script sous le nom extract-dmarc-file.bash
#!/bin/bash
#-------------------------------------------------------------
# Author : O.Romain.Jaillet-ramey (orj (at) lab3w (dot) fr)
# Contributor : Stephane Huc (PengouinPdt)
# Desc : Script pour dezipper les fichiers DMARC
# ATTENTION à la variable $DIR, elle est juste si ton script shell
# est bien à la racine de ton sous-répertoire "/dmarc"
# Date Create : 20220527
# Date modify : 20220622
#-------------------------------------------------------------
DIR="$(dirname "$(readlink -f -- "$0")")"
#DIR="/var/pro/web_sites/zw3b_site/www/dmarc/"
YEAR="2022"
MONTH="06"
FOLDER="${DIR}/${YEAR}/${MONTH}"
if [ ! -d "${FOLDER}" ]; then mkdir -p "${FOLDER}"; fi
## find . -maxdepth 1 -type f \( -iname "*.gz" -o -iname "*.zip" \) -printf '%f\n'
# build an array by listing the folder only with files *.(gz|zip)
readarray -d '' lists < <(find "${FOLDER}" -maxdepth 1 -type f \( -iname "*.gz" -o -iname "*.zip" \) -print0)
echo "+-----------------------------------------------"
echo "NB FILES : ${#lists[@]} IN FOLDER"
echo -e "+-----------------------------------------------\n"
c=0;
for name in "${lists[@]}"; do
#echo "name: ${name}"
EXT="${name##*.}"
# echo "EXT: ${EXT}"
FILE_DZIPED="$(basename "${name%.*}")"
# echo "Filename: ${FILE_DZIPED}"
case "${EXT}" in
'zip')
[ "$(echo "${FILE_DZIPED}" | grep -q "xml")" ] || FILE_DZIPED="${FILE_DZIPED}.xml"
;;
esac
if [ ! -f "${FOLDER}/${FILE_DZIPED}" ] && [ -f "${name}" ]; then
c=$((c+1))
echo "+-----------------------------------------------"
echo -n "\ $c";
echo " - ${name}";
echo " \ "
echo -n " +-- Unzip file "
echo -e " type : ${EXT} \n";
case "${EXT}" in
'gz')
gzip -dk "${name}"
;;
'zip')
unzip "${name}" -d ${FOLDER}
;;
esac
echo -e "\n"
fi
done;
echo "+-----------------------------------------------"
echo "NB FILES : ${c} PROCESSED"
echo -e "+-----------------------------------------------\n"
time extract-dmarc-file.bash
real
0m0,014s
user
0m0,014s
sys
0m0,001s
Et une autre version :
Super génial
#!/bin/bash
#-------------------------------------------------------------
# Author : O.Romain.Jaillet-ramey (orj (at) lab3w (dot) fr)
# Contributor : Stephane Huc (PengouinPdt)
# Desc : Script pour dezipper les fichiers DMARC
# Pour ne pas avoir à créer manuellement les répertoires de destination « AAAA/MM ».
# Ils seront créés à partir du timestamp récupéré depuis le nom de fichier compressé reçu
# Fichier GZ/IP dans le répertoire ./dmarc/
# Executer le script depuis le sous-répertoire ./dmarc/
# Date Create : 20220527
# Date modify : 20220622
#-------------------------------------------------------------
DIR="$(dirname "$(readlink -f -- "$0")")"
#DIR="/var/pro/web_sites/zw3b_site/www/dmarc/"
## find . -maxdepth 1 -type f \( -iname "*.gz" -o -iname "*.zip" \) -printf '%f\n'
# build an array by listing the folder only with files *.(gz|zip)
readarray -d '' lists < <(find "${DIR}" -maxdepth 1 -type f \( -iname "*.gz" -o -iname "*.zip" \) -print0)
echo "+-----------------------------------------------"
echo "NB FILES : ${#lists[@]} IN FOLDER"
echo -e "+-----------------------------------------------\n"
c=0;
for name in "${lists[@]}"; do
#echo "name: ${name}"
EXT="${name##*.}"
#echo "EXT: ${EXT}"
FILE_DZIPED="$(basename "${name%.*}")"
# echo "Filename: ${FILE_DZIPED}"
case "${EXT}" in
'zip')
[ "$(echo "${FILE_DZIPED}" | grep -q "xml")" ] || FILE_DZIPED="${FILE_DZIPED}.xml"
;;
esac
#echo "Filename: ${FILE_DZIPED}"
# get timestamp into filename to build folder
timestamp="$(echo "${FILE_DZIPED}" | awk -F '!' '{ print $3 }')"
#echo "timestamp: $timestamp"
datename="$(date +'%Y/%m' -d "@${timestamp}")"
#echo "date: $datename"
unset timestamp
FOLDER="${DIR}/${datename}"
#echo "Folder: $FOLDER"
unset datename
# mkdir folder if not exists
if [ ! -d "${FOLDER}" ]; then mkdir -p "${FOLDER}"; fi
if [ ! -f "${FOLDER}/${FILE_DZIPED}" ]; then
c=$((c+1))
echo "+-----------------------------------------------"
echo -n "\ $c";
echo " - ${name}";
echo " \ "
echo -n " +-- Unzip file "
echo -e " type : ${EXT} \n";
case "${EXT}" in
'gz')
gunzip -ck "${name}" > "${FOLDER}/${FILE_DZIPED}"
;;
'zip')
unzip "${name}" -d "${FOLDER}"
;;
esac
echo -e "\n"
fi
done;
echo "+-----------------------------------------------"
echo "NB FILES : ${c} PROCESSED"
echo -e "+-----------------------------------------------\n"
Je soulignais malgré tout que plus de 1000 fichiers dans un et même répertoire çà craind - çà rame - que je reçois par exemple environ 200 fichiers / mois - Il faudrait simplement déplacer les ZIP/GZ dans le répertoire à côté des XML dézipper - Pour celles et ceux qui auraient mis tous les fichiers DMARC de rapports GZ/ZIP dans un dossier sans savoir en faire quoi - Y’a un super tableau HTML maintenant, le PHPSource ici
Note de Moi-même du 20220620-21 : Création d’un fichier JSON des nombre d’emails envoyés depuis chaque IP des serveurs d’usurpateurs et autres.
Generate JSON FILE
Toutes les (n) secondes pour le mois en cours ou une seule fois pour les mois d’avant.
Execution de la fonction en bas de page/script PHP (ligne 1613)
Chez infomaniak - ils ne retournent pas l’auth_result sur DKIM - seulement sur les SPF - Ils retournent seulement la policy evaluated à « pass » - J’ai bien DKIM (configuré et valide)
NdMoi-même : J’ai remarqué cela en voyant sur le tableau HTML ci-joint de mes rapports DMARC.
Les XML :
Les tables :
Je trouvais cela bien d’analyser le fichier XML en vérifiant - l’auth_result puis la policy_evalued. C’est chiant !
Cà doit être leur politique de réception d’emails chez infomaniak - Pour le moment, ils ne doivent pas vérifier le protocol DKIM - tout simplement ou pas - Et, valident la politique DKIM - Bizarre
NdMoi-même 15h40 : J’ai mis à jour le PHPSource pour afficher « la value auth_result null qui n’existe pas » C’est mieux et on comprend mieux
PS : J’ai fais pareil pour les SPF - c’est toujours mieux de retourner ‹ null › s’il n’y a pas de valeur (et ‹ 0 › si elle a échouée).
NdMoi-même 20220624 : J’ai fais un « Mise À Jour » du fichier PHPSource avec « une constante » File identification name (mail server name) pour les JSON files
J’avais une « erreur » de génération du fichier JSON qui ne se créait pas une fois le mois passé - donc il manquait des jours de stats - par exemple si j’étais passé sur la page DMARC le 25 du mois.
C’est ce que je voulais faire (et qui est toujours actif) pour pas que le fichier JSON soit régénéré à chaque chargement de page du tableau HTML des rapports DMARC - des mois précédents.
J’ai ajouté une vérification pour que le fichier soit régénéré même le mois d’après (pour avoir les stats du mois complet).
PS : J’ai laissé en commentaire la ligne 531 : qui génère le fichier à chaque fois et modifié la vérification en ligne 535.
Note de Moi-même : L’intégration finale du tableau HTML des rapports DMARC sur mon site web est cette page écrite en Français | English | Español | العربية
NdMoi-même 20220710 : J’ai modifié le code PHPsource avec une demande de FQDN (Fully Qualified Domain Name) dans la visualisation des rapports mensuel - Pour avoir leur FQDN du mois courant - au cas où ils changeraient de nom - tous les mois - ou qu’ils couperaient leur serveur
Note de Moi-même 20220709 18h05 : Archives de fichiers GeoIP*.dat à mettre dans le répertoire /usr/share/GeoIP/ - Sauvegarder votre répertoire s’il contient déjà des fichiers
Dézipper le fichier comme cela : tar -xvf /home/orj/GeoIP-LAB3W.tar.gz -C /root/ pour le décompresser dans le répertoire /root/.
Je ne trouve pas de fichier GeoIPISP.dat valide - On peut le générer avec la commande /usr/lib/geoip/geoip-generator du paquet geoip-bin je crois depuis un CSV ? Comment-faire ?
Donc, ci-joint un essaie, le code PHPsource d’une API cliente RESTful pour lire le fichier au format JSON pour afficher la ressource serveur sur un autre site web (le client) - En Cross-origin resource sharing - par exemple d’ici - C’est en JS (JavaScript) - je n’aime pas trop . Il faudrait faire un client en PHP curL sur requête POST ce serait mieux - bien gérer l’authentification du client en POST toujours, le jeton (token) d’accès, le refresh etc…
API (Application Programming Interface ) est un ensemble normalisé de classes, de méthodes, de fonctions et de constantes qui sert de façade par laquelle un logiciel offre des services à d’autres logiciels.
CORS (Cross-Origin Resource Sharing) (littéralement « partage de ressources entre origines multiples ») est un mécanisme qui permet à des ressources restreintes d’une page web d’être récupérées par un autre domaine extérieur au domaine à partir duquel la première ressource a été servie.