Deblan blog

Tag #DNS

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 😊


PDNS-Console is released!

Je viens de finaliser la première version de pdns-console, un outil en ligne de commande qui permet de gérer un serveur PowerDNS : un puissant serveur DNS qui repose sur des bases de données comme MySQL.

La particularité de pdns-console est qu'il permet de versionner ses zones.

  • On peut donc écrire différentes zones
  • On peut associer une zone à plusieurs domaines
  • Une zone est composée d'une ou plusieurs version dont l'une d'elle pourra être activée
  • La version activée d'une zone sera appliquée aux noms de domaine associés

pdns-console ajoute également des contraintes dans la base de données pour rendre les enregistrements cohérents.

Sous licence BSD, les sources et la procédure d'installation sont dispos sur Github. Je vous invite à tester, forker et bien sur contribuer !

Voici un exemple qui provient du README (en anglais) :

Specifications

  • We want to mange the domain example.tld
  • We need 3 records:
    • example.tld -> 1.2.3.4
    • www.example.tld -> same as example.tld
    • The MX of example.tld is mail.foo.net

Add the domain

$ ./app/console domain:add
Name: example.tld
MASTER [null]:
Type [NATIVE]:
Domain added
$ ./app/console domain:list
DOMAIN: example.tld
ID    : 5             # This ID is important
TYPE  : NATIVE
MASTER:

Create a zone

Interactive (or not)
$ ./app/console zone:add
Name: Example zone
Description: My example zone
Zone added.
The list is updated
$ ./app/console zone:list
Example zone
------------
My example zone
ID: 4                 # This ID is important

No version found
New version for "Example zone" (ID=4)
$ ./app/console zone:version:add 4 # My zone ID
Zone version added.
$ ./app/console zone:list
Example zone
------------
My example zone
ID: 4

Version: 1 - Active: No

No record found.

Add the records

"SOA" record (no interactive)
$ ./app/console zone:record:add 4 1 --name @ --type SOA --content "localhost. postmaster@localhost 0 10800 3600 604800 3600" --ttl 3600 --prio null
"A" record (interactive)
$ ./app/console zone:record:add 4 1
Name: @
Content: 1.2.3.4

Available types: A AAAA CNAME MX NS TXT SPF WKS SRV LOC SOA
Type: A
TTL: 3600
Prio [null]:
Zone record added.
"CNAME" record. "--ttl" is missing
$ ./app/console zone:record:add 4 1 --name www --type CNAME --content example.tld. --prio null
TTL: 3600
Zone record added.
"MX" record. The validation of "--prio" failed
$ ./app/console zone:record:add 4 1 --name @ --type MX --content mail.foo.net. --ttl 3600 --prio badValue
Prio [null]: badValueAgain
Prio [null]: 10
Zone record added.
My version is now ready
$ ./app/console zone:list
Example zone
------------
My example zone
ID: 4

Version: 1 - Active: No

   ID | NAME                  | TYPE      | TTL    | PRIO    | CONTENT
----------------------------------------------------------------------
   13 | @                     | SOA       | 3600   |         | localhost postmaster@localhost 0 10800 3600 604800 3600
   14 | @                     | A         | 3600   |         | 1.2.3.4
   15 | www                   | CNAME     | 3600   |         | example.tld.
   16 | @                     | MX        | 3600   | 10      | mail.foo.net.

Active and assign the new zone

$ ./app/console zone:version:active 4 1
Zone version activated.
$ ./app/console zone:assign 4 5
Domain zone updated.
./app/console domain:list --zone
DOMAIN: example.tld
ID    : 5
TYPE  : NATIVE
MASTER: 


      > Example zone
      > ------------
      > My example zone
      > ID: 4
      > 
      > Version: 1 - Active: Yes
      > 
      >    ID | NAME                  | TYPE      | TTL    | PRIO    | CONTENT
      > ----------------------------------------------------------------------
      >    13 | @                     | SOA       | 3600   |         | localhost postmaster@localhost 0 10800 3600 604800 3600
      >    14 | @                     | A         | 3600   |         | 1.2.3.4
      >    15 | www                   | CNAME     | 3600   |         | example.tld.
      >    16 | @                     | MX        | 3600   | 10      | mail.foo.net.
      > 

Push modifications

./app/console zone:push

Test :)

$ dig +short -t A @localhost example.tld
1.2.3.4
$ dig +short -t CNAME @localhost www.example.tld
example.tld.
$ dig +short -t MX @localhost example.tld
10 mail.foo.net.

[TIP] Générateur SPF

SPF est une des solutions techniques qui permet d'identifier un serveur comme légitime pour envoyer un email avec un nom de domaine précis. On s'appuie sur les DNS pour effectuer cette configuration. Pour plus d'informations, je vous invite à consulter l'article SPF sur Wikipedia.

La syntaxe n'est pas très compliquée mais il a quelques subtilités qui nécessitent de regarder de la doc avant de valider les modifications. Par conséquent, j'ai écrit un script shell qui permet de générer facilement une entrée SPF.

Voici quelques exemples d'utilisation :

$ spfgenerator -d '*' -mx -ip 109.190.159.83 -ip 5.135.190.125 -p fail
*	IN	TXT	"v=spf1 mx ip4:109.190.159.83 ip4:5.135.190.125 -all"
$ spfgenerator -a "" -mx -ip 1.2.3.4 -ip fe80::7e7a:91ff:fe27:d29c/64 -i example.com -s
v=spf1 mx a ip4:1.2.3.4 ip6:fe80::7e7a:91ff:fe27:d29c/64 include:example.com ?all

Et le code source : https://gitnet.fr/deblan/spfgenerator.deb/src/master/usr/bin/spfgenerator.

Enjoy :)


DNSLookup, nouveau service deblan !

Quand vous travaillez dans le web et que vous gérez des noms de domaines, vous vous posez toujours la même question pendant une propagation DNS : où est-ce que ça en est ?

Sur le principe de What's My DNS?, je vous propose un service qui permet de connaître l'enregistrement DNS de votre nom sur quelques serveurs majeurs Français.

DNSLookup est un programme (et un service en ligne) sous licence BSD. Vous pourrez le modifier et l'installer sur votre serveur si vous en avez envie.

Essayez tout de suite DNSLookup :)

DNSLookup


Update: cerise sur le gâteau, DNSLookup supporte à présent les requêtes Whois !