130 lines
4.4 KiB
Bash
130 lines
4.4 KiB
Bash
#!/bin/bash
|
|
|
|
domain="$1"
|
|
port="${2:-443}" # Utilise 443 par défaut si le 3ème paramètre (port) n'est pas fourni
|
|
|
|
# Fonction pour effectuer le test SSL/TLS et obtenir la différence en jours jusqu'à l'expiration
|
|
get_days_until_expiration() {
|
|
local domain="$1"
|
|
local port="$2"
|
|
|
|
# Tester la date d'expiration du domaine sur le port spécifié
|
|
expiration_date=$(echo | openssl s_client -connect "$domain":"$port" -servername "$domain" 2>/dev/null | openssl x509 -noout -enddate | cut -d= -f2)
|
|
|
|
# Convertir la date d'expiration en timestamp
|
|
expiration_timestamp=$(date -d "$expiration_date" +%s)
|
|
|
|
# Calculer le nombre de jours restants jusqu'à l'expiration
|
|
today_timestamp=$(date +%s)
|
|
local diff=$(( (expiration_timestamp - today_timestamp) / 86400 ))
|
|
echo $diff
|
|
}
|
|
|
|
|
|
check_date() {
|
|
local domain="$1"
|
|
local port="$2"
|
|
|
|
echo "Tester la date d'expiration du domaine $domain sur le port $port"
|
|
|
|
# Obtenir la différence en jours jusqu'à l'expiration
|
|
days_until_expiration=$(get_days_until_expiration "$domain" "$port")
|
|
|
|
echo $days_until_expiration
|
|
|
|
# Vérifier si $days_until_expiration est supérieur à 126
|
|
if [ "$days_until_expiration" -gt 126 ]; then
|
|
exit 127
|
|
else
|
|
exit $days_until_expiration
|
|
fi
|
|
}
|
|
|
|
|
|
|
|
# Fonction pour tester si un MX existe et le tester
|
|
check_domain_mx() {
|
|
local domain="$1"
|
|
local port="$2"
|
|
|
|
# Vérifier si le domaine commence par "www" ou s'il n'a pas de sous-domaine (domain.tld)
|
|
if [[ "$domain" == *.* && ! "$domain" == *.*.* ]]; then
|
|
|
|
echo -e "Tester l'existence du champ MX pour le domaine $domain"
|
|
|
|
# Récupérer toutes les réponses MX pour le domaine
|
|
mx_domains=$(dig +short MX "$domain" | awk '{sub(/\.$/, "", $2); print $2}')
|
|
|
|
if [ -n "$mx_domains" ]; then
|
|
# Tester chaque domaine MX trouvé sur le port 993
|
|
for mx_domain in $mx_domains; do
|
|
# Vérifier que le port 993 est ouvert
|
|
if echo -e "QUIT" | timeout 2 nc -z -w2 "$mx_domain" 993; then
|
|
check_date "$mx_domain" "993" "$email"
|
|
else
|
|
echo -e " ⚠️ Le port 993 n'est pas ouvert sur le domaine MX $mx_domain."
|
|
fi
|
|
done
|
|
for mx_domain in $mx_domains; do
|
|
# Vérifier que le port 465 est ouvert et tester la connexion SSL
|
|
if echo -e "QUIT" | timeout 2 nc -z -w2 "$mx_domain" 465; then
|
|
check_date "$mx_domain" "465" "$email"
|
|
else
|
|
echo -e " ⚠️ Le port 465 (SMTPS) n'est pas ouvert sur le domaine MX $mx_domain."
|
|
fi
|
|
done
|
|
else
|
|
if [ -n "$email" ]; then
|
|
echo " ⚠️ Le domaine $domain n'a pas d'enregistrement MX valide." | mail -s " ⚠️ [ALERTE] MX absent pour $domain:$port" "$email"
|
|
fi
|
|
echo -e " ⚠️ Le domaine $domain n'a pas d'enregistrement MX valide."
|
|
fi
|
|
else
|
|
|
|
echo -e "Tester l'existence du champ MX pour le domaine ${domain#*.}"
|
|
|
|
# Récupérer toutes les réponses MX pour le domaine
|
|
mx_domains=$(dig +short MX "${domain#*.}" | awk '{sub(/\.$/, "", $2); print $2}')
|
|
|
|
if [ -n "$mx_domains" ]; then
|
|
# Tester chaque domaine MX trouvé sur le port 993
|
|
for mx_domain in $mx_domains; do
|
|
# Vérifier que le port 993 est ouvert
|
|
if echo -e "QUIT" | timeout 2 nc -z -w2 "$mx_domain" 993; then
|
|
check_date "$mx_domain" "993" "$email"
|
|
else
|
|
echo -e " ⚠️ Le port 993 n'est pas ouvert sur le domaine MX $mx_domain."
|
|
fi
|
|
done
|
|
for mx_domain in $mx_domains; do
|
|
# Vérifier que le port 465 est ouvert et tester la connexion SSL
|
|
if echo -e "QUIT" | timeout 2 nc -z -w2 "$mx_domain" 465; then
|
|
check_date "$mx_domain" "465" "$email"
|
|
else
|
|
echo -e " ⚠️ Le port 465 (SMTPS) n'est pas ouvert sur le domaine MX $mx_domain."
|
|
fi
|
|
done
|
|
else
|
|
if [ -n "$email" ]; then
|
|
echo " ⚠️ Le domaine $domain n'a pas d'enregistrement MX valide." | mail -s " ⚠️ [ALERTE] MX absent pour $domain:$port" "$email"
|
|
fi
|
|
echo -e " ⚠️ Le domaine $domain n'a pas d'enregistrement MX valide."
|
|
fi
|
|
fi
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
# Vérifier si le nom de domaine est accessible en utilisant "curl"
|
|
if curl --output /dev/null --silent --head --fail "$domain"; then
|
|
# Appel initial pour le domaine spécifié
|
|
check_date "$domain" "$port"
|
|
# Vérifier le domaine MX s'il existe
|
|
#check_domain_mx "$domain" "$port"
|
|
else
|
|
echo " ⚠️ Le domaine $domain n'est pas accessible."
|
|
exit -1
|
|
fi
|