🛡️ [Nouveau] Script d'Audit de Sécurité Mail pour YunoHost - Rapports HTML automatiques

Bonjour Ă  tous ! :waving_hand:

Je partage avec vous un script open-source que j’ai développé pour monitorer la sécurité mail de mon serveur YunoHost. Après plusieurs semaines d’utilisation et d’améliorations, je pense qu’il peut être utile à la communauté !


:clipboard: Présentation du projet

YunoHost Mail Security Audit est un script bash qui génère des rapports HTML sur la sécurité de votre serveur mail. Il analyse vos logs Postfix/Dovecot et vous envoie quotidiennement un résumé complet par email.

:bullseye: Problème résolu

Quand on héberge son propre serveur mail, on se pose souvent ces questions :

  • :red_question_mark: Mon serveur est-il attaquĂ© ?

  • :red_question_mark: Combien de tentatives d’intrusion par jour ?

  • :red_question_mark: Fail2ban fonctionne-t-il correctement ?

  • :red_question_mark: D’oĂą viennent les attaques ?

  • :red_question_mark: Y a-t-il des comportements anormaux ?

Ce script répond à toutes ces questions en un coup d’œil ! :bar_chart:


:sparkles: Fonctionnalités principales

:bar_chart: Rapport HTML quotidien automatique

  • :white_check_mark: PĂ©riode d’analyse configurable (1-90 jours)

  • :white_check_mark: Statistiques dĂ©taillĂ©es : tentatives d’attaque, mails envoyĂ©s, connexions externes

  • :white_check_mark: Top 5 des IPs attaquantes avec indicateurs visuels temps rĂ©el

  • :white_check_mark: Top 5 expĂ©diteurs avec distinction Système/Utilisateur

  • :white_check_mark: Top 5 destinataires avec distinction Interne/Externe

  • :white_check_mark: État de Fail2ban et liste des IPs bannies

  • :white_check_mark: Alertes intelligentes selon le niveau de menace

:artist_palette: Indicateurs visuels de menace

  • :red_circle: EN COURS (< 1h) : Attaque active avec animation pulsante

  • :orange_circle: RĂ©cente (< 24h) : Attaque rĂ©cente probablement bloquĂ©e

  • :black_circle: Ancienne (> 24h) : Attaque dĂ©jĂ  gĂ©rĂ©e

:police_car_light: Alertes temps réel (optionnel)

Un second script surveille en continu et envoie une alerte immédiate si :

  • Volume d’attaques anormal dĂ©tectĂ©

  • Seuil configurable (dĂ©faut : 50 tentatives en 60 minutes)

  • Anti-spam intĂ©grĂ© (1 alerte/heure max)


:camera_with_flash: Aperçu du rapport

Je vous joins un exemple de rapport HTML (avec données anonymisées) pour que vous puissiez voir le rendu final. Le rapport est responsive et s’affiche parfaitement sur mobile !

Voir le fichier HTML joint ci-dessous :backhand_index_pointing_down:

demo_rapport_html_yunohost.pdf (740.2 KB)


:bar_chart: Exemple de statistiques (mon serveur)

Sur 7 jours :

  • :chart_increasing: 2010 tentatives d’attaque bloquĂ©es (287/jour en moyenne)

  • :white_check_mark: 0 connexion externe suspecte

  • :white_check_mark: Fail2ban actif : 2 IPs bannies actuellement

  • :e_mail: 365 mails envoyĂ©s (normal : majoritairement système)

Résultat : Mon serveur est bien protégé et je suis rassuré ! :blush:


:link::bullseye: À qui s’adresse ce script ?

:white_check_mark: Vous hébergez votre propre serveur mail YunoHost
:white_check_mark: Vous voulez monitorer la sécurité sans avoir à lire les logs
:white_check_mark: Vous voulez être alerté en cas d’attaque massive
:white_check_mark: Vous aimez les beaux rapports HTML :grinning_face_with_smiling_eyes:


:shield: Sécurité et confidentialité

  • :white_check_mark: Aucune donnĂ©e n’est envoyĂ©e Ă  l’extĂ©rieur (tout reste local)

  • :white_check_mark: Pas de dĂ©pendances externes (sauf mutt pour l’envoi d’emails)

  • :white_check_mark: Logs analysĂ©s uniquement en lecture

  • :white_check_mark: Script auditable (100% bash, ~350 lignes commentĂ©es)



:light_bulb: Idées pour futures versions (v2.0)

  • :bar_chart: Graphiques des attaques par jour (Chart.js)

  • :globe_showing_europe_africa: Carte des pays attaquants

  • :chart_increasing: Tendances sur plusieurs mois

  • :bell: IntĂ©gration Telegram/Discord pour alertes

  • :package: Package YunoHost officiel


:red_question_mark: Questions ?

N’hésitez pas à me poser vos questions dans ce fil ! Je serai ravi d’y répondre et d’améliorer le script selon vos besoins.

Merci à la communauté YunoHost pour cet excellent projet ! :folded_hands:PS : Le rapport HTML de démonstration est joint à ce message. N’hésitez pas à l’ouvrir pour voir le rendu !

demo_rapport_html_yunohost.pdf (740.2 KB)

lien du projet : GitHub - gamersalpha/yunohost-mail-security-audit: 🛡️ Daily HTML security reports and real-time alerts for YunoHost mail servers exposed to the Internet

7 Likes

Et le script est oĂą ?

je met Ă  jour le premier post

2 Likes

Intéressant.

Jettes un coup d’œil sur ceci, ça peut de donner des idées

(je l’utilise depuis un moment et je l’ai sur tous mes serveurs)

2 Likes

Merci pour le partage :wink: Je vais tester cela :wink:

C’est vraiment sympa !

Je vais essayer de le mettre en place.

Salut,
j’ai mis en place le script, et c’est très intéressant comme retour de métrique.
Maintenant, la vraie question et de savoir comment mettre en place plus de sécurité, ou simplement bloque les adresses IP abusives.

La documentation donne les infos pour debannir une IP, mais je ne peux pas en ajouter par moi-mĂŞme ?

Si tu souhaites bannir avec Fail2ban c’est exactement pareil que sur la documentation à l’exception que tu remplaces unbanip par banip.

Avec pflogsumm que j’utilise, j’avais rencontré le problème que les rapports étaient vides le W.E. avec la ligne suivant dans mon crontab :

55 0 * * * /usr/sbin/pflogsumm -u 5 -h 5 --problems_first -d yesterday /var/log/mail.log | mail -s "Rapport Postfix du  `date`" postmaster@domain.tld

Ce comportement est normal car logrotate effectue une rotation des logs, aussi il faut passer 2 lignes pour prendre en compte tous les jours de la semaine :

55 0 * * 1-6 /usr/sbin/pflogsumm -u 5 -h 5 --problems_first -d yesterday /var/log/mail.log | mail -s "Rapport Postfix du  `date`" postmaster@domain.tld
55 0 * * 7 /usr/sbin/pflogsumm -u 5 -h 5 --problems_first -d yesterday /var/log/mail.log.1 | mail -s "Rapport Postfix du  `date`" postmaster@domain.tld

J’ai survolé (très) rapidement le script mail-report, je n’ai pas vu que tu tenais compte de ça, vu que tu le place dans /etc/cron.daily, il faudrait le gérer directement dans le script pour tester la date et parcourir mail.log ou mail.log.1 selon le jour.

J’avais aussi eu ce problème, résolu par l’ajout de * à la fin du logfile pour inclure les logs rotés

1 Like

Quand j’ai dis que j’ai survolé, j’ai effectivement survolé :sweat_smile: Mea culpa.

1 Like

Oui, effectivement c’est long. C’était trois lignes au début mais au fur et à mesure que je testais j’ai ajouté des trucs. J’aurais dû mettre plus de commentaires expliquant le pourquoi de chaque ajout :sweat_smile:

1 Like

And how safe is your script? Is it vibe-coded?

Hello,
Yes, it was developed with Claude’s assistance. But I made sure to:

  • Read and understand every line
  • Test it thoroughly on my YunoHost server
  • Add comprehensive documentation
  • Include warnings and disclaimers
  • Make it read-only (no system modifications)

The script is intentionally simple: it reads logs, parses them, and generates HTML reports. No rocket science, but it does the job well for monitoring mail server security.

Feel free to audit the code - it’s only 200 lines of well-commented Bash.

Merci pour le partage, plus facile à lire que des rapports pflogsumm…

Tu l’as installé ?

Hello,
Tell me, this script is still relevant:

Does it work just as well in self-hosting as it does on a VPS?

I think there’s no problem with that. Linux can live in a vps and any other machine physical or logical, and will run your scripts without making a difference :wink:

I’m using it on my vps.

Don’t block the US, your server will suffer and don’t block Malaysia, your certificates won’t regenerate

2 Likes

It’s good to know,
In the US, I don’t have servers there, why would it suffer?
I just want to block some countries like (CN, RU, KP. KG, BY…). I know with a VPN they can bypass, but it will reduce the attacks a bit.

Thank You :folded_hands: