#!/bin/bash # Vérifier si le script est exécuté en root check_root() { if [[ $EUID -ne 0 ]]; then echo "❌ Ce script doit être exécuté en tant que root." exit 1 fi } update_system() { echo "=== Mise à jour du système ===" # Mise à jour des paquets APT if command -v apt &> /dev/null; then echo "🔄 Mise à jour des paquets APT..." sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y && sudo apt clean if [ $? -ne 0 ]; then echo "❌ Erreur lors de la mise à jour des paquets APT." >&2 exit 1 else echo "✅ Mise à jour terminée." fi fi # Mise à jour des paquets Flatpak si Flatpak est installé if command -v flatpak &> /dev/null; then echo "🔄 Mise à jour des paquets Flatpak..." flatpak update -y if [ $? -ne 0 ]; then echo "❌ Erreur lors de la mise à jour des paquets Flatpak." >&2 exit 1 else echo "✅ Mise à jour terminée." fi fi } # Récupérer le nom d’hôte complet (FQDN) et le domaine get_fqdn_and_domain() { local fqdn domain # Récupérer le FQDN en priorité avec hostname -f fqdn=$(hostname -f 2>/dev/null) || fqdn=$(cat /etc/hostname 2>/dev/null) # Vérifier si la récupération du FQDN a réussi if [[ -z "$fqdn" ]]; then echo "❌ Erreur : Impossible de déterminer le FQDN" >&2 return 1 fi # Extraire le domaine domain=${fqdn#*.} echo "$fqdn" "$domain" } # Vérification de la résolution DNS check_dns() { local server_name=$1 # Récupération de l'adresse IP publique du serveur SERVER_IP=$(curl -4 -s ifconfig.me || hostname -I | awk '{print $1}') # Récupération de l'adresse IP associée au FQDN FQDN_IP=$(dig +short A "$server_name" | tail -n1) # Vérification si l'IP du FQDN est récupérable if [[ -z "$FQDN_IP" ]]; then echo "❌ Erreur : Impossible de récupérer l'adresse IP associée à $server_name via DIG." echo "➡️ Vérifie la configuration DNS et l'existence du domaine." exit 1 fi # Comparaison des IPs if [[ "$SERVER_IP" != "$FQDN_IP" ]]; then echo "⚠️ Alerte DNS : L'adresse IP résolue ($FQDN_IP) ne correspond pas à l'IP publique actuelle ($SERVER_IP)." echo "➡️ Vérifie la configuration DNS et la propagation des enregistrements." exit 1 fi echo "✅ Vérification réussie : $server_name pointe correctement vers $SERVER_IP." } setup_ssl() { local fqdn=$1 local le_dir="/etc/letsencrypt/live/$fqdn" echo "=== Configuration du certificat SSL pour $fqdn ===" if [[ -f "$le_dir/fullchain.pem" ]]; then echo "✅ Certificat SSL déjà existant." openssl x509 -noout -text -in "$le_dir/fullchain.pem" | grep "Not After" return 0 fi echo "🔄 Test de génération d’un nouveau certificat SSL via HTTP..." while true; do certbot certonly --standalone --dry-run -d "$fqdn" --non-interactive --agree-tos --register-unsafely-without-email if [[ $? -eq 0 ]]; then echo "✅ Test réussi, génération réelle du certificat..." certbot certonly --standalone -d "$fqdn" --non-interactive --agree-tos --register-unsafely-without-email break else echo "⚠️ Échec du test via HTTP. Tentative via DNS..." echo "🔄 Test de génération d’un nouveau certificat SSL via challenge DNS..." echo "🛠️ Veuillez ajouter un enregistrement TXT pour _acme-challenge.$fqdn avec la valeur fournie par certbot." while true; do certbot certonly --manual --preferred-challenges dns --dry-run -d "$fqdn" --non-interactive --agree-tos --register-unsafely-without-email if [[ $? -eq 0 ]]; then echo "✅ Test DNS réussi. Veuillez maintenant ajouter le bon enregistrement TXT." echo "⏳ Appuyez sur une touche pour continuer après l'ajout de l'enregistrement TXT..." read -n 1 -s # Attente de l'appui sur une touche # Génération réelle du certificat avec DNS challenge echo "✅ Génération réelle du certificat via challenge DNS..." certbot certonly --manual --preferred-challenges dns -d "$fqdn" --non-interactive --agree-tos --register-unsafely-without-email break 2 # Sort de la boucle interne ET de la boucle externe else echo "❌ Échec de la génération du certificat SSL avec toutes les méthodes." read -p "Voulez-vous interrompre le processus ? (o/n) : " choix if [[ "$choix" == "o" ]]; then exit 1 fi fi done fi done echo "✅ Certificat SSL généré avec succès." } # Fonction pour récupérer et retourner les adresses IP de la machine get_server_ips() { local SERVER_IP SERVER_IPv6 SERVER_IP=$(curl -4 -s ifconfig.me || hostname -I | awk '{print $1}') SERVER_IPv6=$(curl -6 -s ifconfig.me || hostname -I | awk '{print $2}') echo "$SERVER_IP" "$SERVER_IPv6" }