151 lines
5.3 KiB
Bash
151 lines
5.3 KiB
Bash
#!/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"
|
||
}
|