Bonjour,
Comme beaucoup d’entre nous, j’ai plusieurs fichiers de zones à vérifier - j’ai ajouté/créé un autre script « qui vérifie plusieurs zones DNSSEC » et qui au cas où une des zone DNS est modifiée et seulement dans ce cas qui redémarrait, rechargerait le serveur DNS.
Sans trop connaître les sortie de commandes (j’ai opté pour un numéro « retour status » 150).
J’ai trouvé cette page : Linux bash exit status and how to set exit status in bash → paragraphe « List of common exit codes for GNU/Linux » qui explique comment faire et les valeurs de sortie bash.
Le code (c’est celui-ci à mettre en « crontab »):
# cat /root/dnssec-sign-myzones.bash
#!/bin/bash
#######################################################################
# Author : O.Romain.Jaillet-ramey (orj+bash+dnssec (at) lab3w.fr)
# Date Create : 20221005
# Date Modified : 20221005
# Desc : Checks several DNSSEC zones and restarts the DNS server
# Author's note : Useless script
#######################################################################
#####-------------------------- CONFIG ----------------------------#####
date_year="$(date +%Y)"
date_month="$(date +%m)"
date_day="$(date +%d)"
date_hour="$(date +%H:%M:%S)"
date="${date_year}-${date_month}-${date_day} ${date_hour}"
#month_more_1m=$((60 * 60 * 24 * 30))
#####-------------------------- CONFIG ----------------------------#####
script_desc() {
echo "#####---------------------------------------------------------"
echo "#"
echo "# DESC : Script to check expiration and sign zone (last day) DNSSEC"
echo "#"
echo "# ACTUAL DATE : ${date}"
#echo "# ACTUAL TIMESTAMP : ${timestamp}"
#echo "# ACTUAL TIMESTAMP + 1 MONTH : ${timestamp} + ${month_more_1m} = $((${timestamp} + ${month_more_1m}))\n"
#expire_timestamp="$((${timestamp} + ${month_more_1m}))"
#expire_date=$(date -d @${expire_timestamp} '+%Y-%m-%d %H:%M:%S')
#echo "# EXPIRE DATE : ${expire_date}"
echo "#"
echo -e "#####---------------------------------------------------------\n"
echo -e "#####---------------------------------------------------------"
}
# for restart or not restart DNS serveur
status=()
restart_server_dns=0
#------------------------------------------------------------------
script_desc
#------------------------------------------------------------------
#------------------------------------------------------------------
# Zone DNS SEC -> algorithm 8 = RSA SHA 256
#
# dnssec-keygen -a RSASHA256 -b 1024 -n ZONE zw3b.net
# dnssec-keygen -a RSASHA256 -f KSK -b 2048 -n ZONE zw3b.net
#
#------------------------------------------------------------------
domains_list="zw3b.fr zw3b.tv zw3b.net zw3b.site zw3b.blog lab3w.com lab3w.fr"
for domain in ${domains_list}
do
/root/dnssec-sign-zones.bash -d ${domain} -f /etc/bind/masters/${domain}.hosts -a 8
status+=( "$(printf "%d\n" $?)" )
done
#------------------------------------------------------------------
# Zone DNS SEC -> algorithm 13 = ECDSA P256 SHA256
#
# dnssec-keygen -a ECDSAP256SHA256 -n ZONE ipv10.net
# dnssec-keygen -a ECDSAP256SHA256 -f KSK -n ZONE ipv10.net
#
#------------------------------------------------------------------
domains_list="ipv10.net ipv01.net"
for domain in ${domains_list}
do
/root/dnssec-sign-zones.bash -d ${domain} -f /etc/bind/masters/${domain}.hosts -a 13
status+=( "$(printf "%d\n" $?)" )
done
#------------------------------------------------------------------
# Verify status return for restart or not restart DNS server
#------------------------------------------------------------------
for code in "${status[@]}"; do
#echo "Code : ${code}"
if [ ${code} -eq 150 ]; then
restart_server_dns=1
fi
done
#exit
#------------------------------------------------------------------
echo "#####---------------------------------------------------------"
if [ ${restart_server_dns} -eq 1 ]; then
/etc/init.d/bind9 restart
echo "+-> Bind server DNS reloading|restarting"
else
echo "+-> Bind server DNS do not restarting (no zone update)"
fi
echo "#####---------------------------------------------------------"
exit 0
J’ai modifié le script ("dnssec-sign-zones.bash" en commentaire 8) en ajoutant plusieurs répertoires de clefs selon les algorithmes de création DNSSEC et une getopts « -a 8|13 » pour envoyer le bon algorithme/répertoire de clefs.
Testez le retour du script en exécutant la commande /root/dnssec-sign-myzones.bash en changeant les noms de domaine par les vôtres.
Via la « crontab » pour vérifier tous les jours à minuit :
# +---------------- minute (0 - 59)
# | +------------- hour (0 - 23)
# | | +---------- day of month (1 - 31)
# | | | +------- month (1 - 12)
# | | | | +---- day of week (0 - 6) (Sunday=0 or 7)
# | | | | |
# * * * * * command to be executed
# sans envoie d'un mail à l'admin
0 0 * * * /root/dnssec-sign-myzones.bash 1>>/var/log/syslog 2>/dev/null 2>&1
# Avec envoie de mail à l'admin
#0 0 * * * /root/dnssec-sign-myzones.bash | mail -s "[TON_SERVER][DNSSEC]Check Zones" "admin_1@domain.tld, admin_2@domain.tld" 1>>/var/log/syslog 2>/dev/null 2>&1

Bonne journée à vous.
PS : Je modifie le « tar.gz » 
Salutations,
Romain