Deblan blog

Vérifier la date d'expiration de noms de domaine

Que ce soit à titre personnel ou dans le cadre de mon travail, je dois gérer une liste relativement importante de noms de domaine et m'assurer qu'ils sont renouvelés à temps.

Les prestataires vers qui sont achetés les noms sont divers et il n'y a pas d'homogénéité des alertes qui notifient d'une expiration prochaine.

Par conséquent, j'ai écris un projet qui a pour seul et unique objectif de me donner la date d'expiration d'un ou plusieurs noms de domaine. Cette date prendra une couleur selon de l'échéance : rouge si on est dans les 2 dernières semaines, jaune si c'est dans les 30 prochains jours ou ou vert si c'est au délà.

$ domain-expiration check google.com amazon.com facebook.com apple.com microsoft.com
+---------------+---------------------+
| Domain        | Date                |
+---------------+---------------------+
| google.com    | 2020-09-14 04:00:00 |
| apple.com     | 2021-02-20 05:00:00 |
| microsoft.com | 2021-03-05 04:00:00 |
| amazon.com    | 2022-10-31 04:00:00 |
| facebook.com  | 2028-03-30 04:00:00 |
+---------------+---------------------+

Grâce à ansi2html, on peut réaliser une conversion du rendu en HTML afin générer un mail coloré.

$ domain-expiration --ansi check [...] | ansi2html | mail \
  -a "Content-type: text/html" \
  -s "Dates d'expirations des domaines" \
  admin@example.com

Le projet est écrit avec PHP 7.3. Les dépendances sont traitées avec composer et il faut le programme whois.

$ git clone https://gitnet.fr/deblan/domain-expiration.git
$ cd domain-expiration
$ composer install
$ php7.3 ./domain-expiration check mon-site.fr

Le code n'est pas parfait mais ça fonctionne 😊


  • PoluX
    • ,
    • Voir aussi check_whois dans le paquet nagios-plugins-contrib.

      $ for domain in google.com amazon.com facebook.com apple.com microsoft.com; do echo -n "$domain: " && /usr/lib/nagios/plugins/check_whois $domain; done
      google.com: WHOIS OK: Expires 2020-09-14 at markmonitor, inc.
      amazon.com: WHOIS OK: Expires 2022-10-31 at markmonitor, inc.
      facebook.com: WHOIS OK: Expires 2028-03-30 at registrarsafe, llc
      apple.com: WHOIS OK: Expires 2021-02-20 at csc corporate domains, inc.
      microsoft.com: WHOIS OK: Expires 2021-05-03 at markmonitor, inc.
      

      Ça gère de plus nombreux cas de syntaxes whois à parser.

      Par contre chez certains TLD le whois est limité en débit ; et chez d'autres il ne fournit pas l'info d'expiration :

      $ /usr/lib/nagios/plugins/check_whois agendadulibre.ch
      WHOIS CRITICAL: Didn't find Registrar
      
  • Simon
    • ,
    • En m'appuyant sur (check_whois.pl), j'ai ajouté quelques formats. Ça mérite cependant des tests…

      Concernant les TLD de mes noms de domaine et leur whois, j'ai systématiquement Expiry Date alors je ne me suis pas plus posé de questions.

      Merci pour ton retour !

  • Fab
    • ,
    • Bonjour,

      Je vais être très critique, le projet est super pour avoir une synthèse des expirations mais hormis ce cas la, je ne vois pas trop l’intérêt. Depuis quand le monitoring se fait pas e-mail dans un contexte d'entreprise. Le plugin check_ssl_cert de nagios existe et répond à ton besoin. Pour ceux qui n'ont pas nagios, un bash avec openssl fait le travail également, pourquoi complexifier le traitement avec du php...

      Je respecte le travail et j’applaudis le résultat plutôt jolie. J'ai beaucoup de mal à comprendre les choix techniques qui ont été fait.

  • Simon
    • ,
    • Bonjour Fab,

      Dans l'ensemble, je suis d'accord avec ton commentaire. Quelques remarques cependant : dans l'article, je ne parle pas de monitoring. Il s'agit avant tout d'un outil qui présente la date d'expiration d'un ou plusieurs noms de domaine et en l'état, il ne doit/peut pas faire office d'outil de monitoring. Ensuite, je ne cherche pas à analyser la date de validité d'un certificat mais l'expiration d'un nom de domaine.

      Le projet va évoluer de sorte à ajouter des indicateurs et des modes d'affichage pour le coupler à ce qu'on veut (genre Zabbix si on veut faire du monitoring) :

      • CSV, Json
      • un exit code != 0
      • nombre de jours entre maintenant et la date de renouvellement

      Enfin, pour le choix du langage, toutes les machines que je gère délivrent PHP. Je développe en PHP depuis pas mal d'années et je pense être plus performant et faire moins de code qui "juste marche mais faut pas trop le lire"…même si je suis un grand fan des scripts shell. Il fonctionne très bien en ligne de commande.

      À bientôt,


Ajouter un commentaire

Votre commentaire - Vous pouvez utiliser du markdown [?]