Compare commits

...

4 Commits

4 changed files with 190 additions and 65 deletions

View File

@ -77,7 +77,8 @@ for TARGET_DIR in "${SELECTED_DIRS_ARRAY[@]}"; do
else
echo " ↳ Téléchargement de $FILE_NAME..."
fi
wget -q -O "$FILE_PATH" "$file"
echo "$file"
wget -q -O "$FILE_PATH" "$REPO_URL/$TARGET_DIR/$file"
done < "$LIST_PATH"
# Supprimer les fichiers obsolètes

View File

@ -1,28 +1,26 @@
#!/bin/bash
# Vérifier si le script est exécuté en root
if [[ $EUID -ne 0 ]]; then
echo "❌ Ce script doit être exécuté en tant que root."
exit 1
fi
# Vérifier si un domaine a été fourni
if [[ -z "$1" ]]; then
echo "❌ Usage : $0 <domaine>"
exit 2
fi
DOMAIN="$1"
# Importer les fonctions communes
source "$(dirname "$0")/../common/common_utils.sh"
# Vérifier si le script est exécuté en root
check_root
# Vérification DNS
check_dns "$DOMAIN"
REVERSED_DOMAIN=$(echo "$DOMAIN" | awk -F. '{for(i=NF; i>0; i--) printf "%s%s", $i, (i>1 ? "." : "")}')
VHOST_CONF="/etc/apache2/sites-available/$REVERSED_DOMAIN.conf"
LE_DIR="/etc/letsencrypt/live/$DOMAIN"
BACKUP_DIR="/etc/apache2/backups"
TEMPLATE_DIR="/etc/apache2/templates"
TEMPLATE="$TEMPLATE_DIR/vhost-template.conf"
CHALLENGE_DIR="/var/www/cedrix"
PATH_URL_CEDRIXCHALLENGE="cedrix-challenge"
CHALLENGE_DIR="/var/www/cedrix/.well-known/acme-challenge"
PATH_URL_ACME_CHALLENGE=".well-known/acme-challenge"
TEST_FILE="test-challenge"
TEST_URL="http://${DOMAIN}/.well-known/${PATH_URL_CEDRIXCHALLENGE}/${TEST_FILE}"
TEST_URL="http://${DOMAIN}/${PATH_URL_ACME_CHALLENGE}/${TEST_FILE}"
RANDOM_CONTENT=$(openssl rand -hex 12)
# Créer les dossiers nécessaires
@ -33,6 +31,8 @@ mkdir -p "/var/www/$REVERSED_DOMAIN"
chown -R www-data:www-data "/var/www/$REVERSED_DOMAIN"
chmod -R 755 "/var/www/$REVERSED_DOMAIN"
# Vérifier si le VirtualHost HTTP existe déjà
if [[ ! -f "$VHOST_CONF" ]]; then
echo "=== Création du fichier VirtualHost HTTP pour $DOMAIN ==="
@ -44,7 +44,7 @@ if [[ ! -f "$VHOST_CONF" ]]; then
CustomLog \${APACHE_LOG_DIR}/$REVERSED_DOMAIN-access.log combined
# Cedrix challenge
Alias /.well-known/${PATH_URL_CEDRIXCHALLENGE}/ $CHALLENGE_DIR/
Alias /${PATH_URL_ACME_CHALLENGE}/ $CHALLENGE_DIR/
<Directory $CHALLENGE_DIR>
Options +Indexes
AllowOverride None
@ -53,15 +53,16 @@ if [[ ! -f "$VHOST_CONF" ]]; then
</VirtualHost>
EOF
# Activer le VirtualHost et recharger Apache
a2ensite "$REVERSED_DOMAIN"
systemctl reload apache2
else
echo "✅ VirtualHost HTTP déjà configuré pour $DOMAIN."
fi
# Activer le VirtualHost et recharger Apache
a2ensite "$REVERSED_DOMAIN"
systemctl reload apache2
# Vérification d'accès au dossier Let's Encrypt
# Vérification d'accès au dossier cedric-challenge
echo "Vérification d'accès au dossier ${PATH_URL_ACME_CHALLENGE}"
echo "$RANDOM_CONTENT" | sudo tee "$CHALLENGE_DIR/$TEST_FILE" > /dev/null
chmod 644 "$CHALLENGE_DIR/$TEST_FILE"
RESPONSE=$(curl -s "$TEST_URL")
@ -71,7 +72,7 @@ if [[ "$RESPONSE" == "$RANDOM_CONTENT" ]]; then
else
echo "❌ Le dossier n'est pas accessible depuis l'extérieur."
echo "URL testée : $TEST_URL"
echo "Vérifiez votre configuration Apache/Nginx et les permissions."
echo "Vérifiez votre configuration Apache/Nginx, les firewalls, les proxy et les permissions."
#sudo rm -f "$CHALLENGE_DIR/$TEST_FILE"
exit 3
fi
@ -79,31 +80,6 @@ fi
# Suppression du fichier test
#sudo rm -f "$CHALLENGE_DIR/$TEST_FILE"
# Vérifier si le certificat SSL existe déjà
if [[ -d "$LE_DIR" ]]; then
echo "✅ Certificat SSL déjà installé pour $DOMAIN."
else
echo "=== Vérification avec un test dry-run de certbot ==="
if certbot certonly --dry-run --apache --redirect -d "$DOMAIN"; then
echo "✅ Test réussi, la configuration semble correcte."
else
echo "❌ Le test dry-run de certbot a échoué. Vérifiez votre configuration."
exit 4
fi
echo "=== Demande du certificat SSL avec Let's Encrypt ==="
certbot --apache --redirect -d "$DOMAIN" --non-interactive --agree-tos --register-unsafely-without-email
if [[ ! -f "$LE_DIR/fullchain.pem" ]]; then
echo "❌ Erreur lors de la génération du certificat SSL."
exit 5
fi
echo "✅ Certificat SSL installé avec succès."
fi
# Recharger Apache pour prendre en compte les changements
systemctl reload apache2
echo "✅ Virtual Host et certificat SSL configurés pour $DOMAIN avec succès !"
echo "✅ Virtual Host configuré pour $DOMAIN avec succès !"
exit 0

View File

@ -0,0 +1,14 @@
#!/bin/bash
DOMAIN="$1"
# Importer les fonctions communes
source "$(dirname "$0")/../common/common_utils.sh"
# Vérifier si le script est exécuté en root
check_root
# Vérification DNS
check_dns "$DOMAIN"
setup_ssl "$DOMAIN"

View File

@ -13,13 +13,18 @@ update_system
echo "=== Installation d'Apache et des outils nécessaires ==="
apt install -y apache2 curl dnsutils certbot python3-certbot-apache
# Activer et démarrer Apache
# Activer et démarrer Apache uniquement si ce n'est pas déjà fait
echo "=== Activation et démarrage d'Apache ==="
systemctl enable apache2
systemctl start apache2
systemctl is-enabled apache2 || systemctl enable apache2
systemctl is-active --quiet apache2 || systemctl start apache2
# Activer les modules nécessaires
a2enmod rewrite ssl headers
# Activer les modules nécessaires uniquement s'ils ne le sont pas déjà
MODULES=(rewrite ssl headers http2 socache_shmcb proxy proxy_http setenvif)
for MODULE in "${MODULES[@]}"; do
if ! a2query -m "$MODULE" >/dev/null 2>&1; then
a2enmod "$MODULE"
fi
done
systemctl reload apache2
# Récupérer le FQDN
@ -29,17 +34,146 @@ echo "🔍 Serveur détecté : $FQDN"
# Vérification DNS
check_dns "$FQDN"
# Configuration SSL
setup_ssl "$FQDN"
# Configurer le VirtualHost
echo "=== Configuration du Virtual Host et SSL pour $FQDN ==="
./add_domain.sh "$FQDN"
EXIT_CODE=$?
if [[ $EXIT_CODE -ne 0 ]]; then
echo "❌ Échec de la configuration du serveur ($FQDN). Code erreur : $EXIT_CODE"
exit $EXIT_CODE
# Configurer le VirtualHost uniquement si ce n'est pas déjà fait
echo "=== Configuration du Virtual Host pour $FQDN ==="
if ! grep -q "ServerName $FQDN" /etc/apache2/sites-available/*.conf; then
./add_domain.sh "$FQDN"
EXIT_CODE=$?
if [[ $EXIT_CODE -ne 0 ]]; then
echo "❌ Échec de la configuration du serveur ($FQDN). Code erreur : $EXIT_CODE"
exit $EXIT_CODE
fi
fi
echo "✅ Installation et configuration réussies !"
# Configuration SSL uniquement si nécessaire
setup_ssl "$FQDN"
# Sécurisation des accès
echo "=== Sécurisation des accès ==="
SECURITY_CONF="/etc/apache2/conf-available/security.conf"
# Vérifier si le fichier existe et contient déjà la configuration
if [ ! -f "$SECURITY_CONF" ]; then
echo "Création de $SECURITY_CONF avec les paramètres de sécurité."
cat <<EOF > "$SECURITY_CONF"
<Directory />
AllowOverride None
Require all denied
</Directory>
<FilesMatch "\.(htaccess|htpasswd|env|ini|log|sh|bak)$">
Require all denied
</FilesMatch>
EOF
a2enconf security
systemctl reload apache2
echo "Configuration de sécurité appliquée et rechargement d'Apache."
else
echo "Le fichier $SECURITY_CONF existe déjà. Aucune modification nécessaire."
fi
# Vérifier si le fichier de configuration existe
if [ -f "$SECURITY_CONF" ]; then
# Vérifier si les directives sont déjà présentes pour éviter les doublons
if ! grep -q "Header always unset X-Powered-By" "$SECURITY_CONF"; then
echo "Ajout des directives de sécurité HTTP à $SECURITY_CONF."
cat <<EOF >> "$SECURITY_CONF"
# Renforcement des en-têtes HTTP
ServerTokens Prod
ServerSignature Off
TraceEnable Off
Header always unset X-Powered-By
EOF
echo "Configuration mise à jour et rechargement d'Apache."
else
echo "Les directives de sécurité HTTP sont déjà présentes. Aucune modification nécessaire."
fi
else
echo "Erreur : le fichier $SECURITY_CONF n'existe pas. Assurez-vous que la configuration de sécurité est en place."
fi
# Activer HTTP Strict Transport Security (HSTS) uniquement si nécessaire
SSL_CONF="/etc/apache2/sites-available/default-ssl.conf"
if ! grep -q "Strict-Transport-Security" "$SSL_CONF"; then
echo "Header always set Strict-Transport-Security \"max-age=31536000; includeSubDomains; preload\"" >> "$SSL_CONF"
fi
# Activation de l'OCSP Stapling uniquement si nécessaire
echo "=== Activation de l'OCSP Stapling ==="
# Vérifier si le fichier de configuration SSL existe
if [ -f "$SSL_CONF" ]; then
# Vérifier si l'option est déjà activée pour éviter les doublons
if ! grep -q "^SSLUseStapling on" "$SSL_CONF"; then
echo "Ajout des directives OCSP Stapling à $SSL_CONF."
cat <<EOF >> "$SSL_CONF"
# Configuration OCSP Stapling
SSLUseStapling on
SSLStaplingResponderTimeout 5
SSLStaplingReturnResponderErrors off
SSLStaplingCache shmcb:/var/run/ocsp(128000)
EOF
systemctl reload apache2
echo "Configuration OCSP Stapling mise à jour et rechargement d'Apache."
else
echo "OCSP Stapling est déjà activé. Aucune modification nécessaire."
fi
else
echo "Erreur : le fichier $SSL_CONF n'existe pas. Assurez-vous que le module SSL est bien installé."
fi
# Désactivation des chiffres faibles et renforcement TLS
echo "=== Renforcement de la configuration SSL/TLS ==="
SSL_MOD_CONF="/etc/apache2/mods-available/ssl.conf"
# Vérifier si le fichier de configuration SSL existe
if [ -f "$SSL_MOD_CONF" ]; then
# Vérifier si la configuration est déjà appliquée pour éviter les doublons
if ! grep -q "^SSLProtocol -all +TLSv1.2 +TLSv1.3" "$SSL_MOD_CONF"; then
echo "Ajout des directives SSL/TLS sécurisées à $SSL_MOD_CONF."
cat <<EOF >> "$SSL_MOD_CONF"
# Renforcement de la configuration SSL/TLS
SSLProtocol -all +TLSv1.2 +TLSv1.3
SSLCipherSuite TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
SSLHonorCipherOrder on
SSLCompression off
SSLSessionTickets off
EOF
systemctl reload apache2
echo "Configuration SSL/TLS mise à jour et rechargement d'Apache."
else
echo "La configuration SSL/TLS est déjà sécurisée. Aucune modification nécessaire."
fi
else
echo "Erreur : le fichier $SSL_MOD_CONF n'existe pas. Assurez-vous que le module SSL est bien installé."
fi
# Limitation de la taille des requêtes (éviter les doublons)
echo "=== Limitation de la taille des requêtes ==="
if ! grep -q "LimitRequestBody" "$SECURITY_CONF"; then
echo "LimitRequestBody 10485760" >> "$SECURITY_CONF"
fi
# Vérifier la configuration avant rechargement
echo "=== Vérification de la configuration Apache ==="
apachectl configtest
if [[ $? -ne 0 ]]; then
echo "❌ Erreur dans la configuration Apache !"
exit 1
fi
# Appliquer des permissions sécurisées (éviter les erreurs si déjà appliquées)
echo "=== Sécurisation des permissions des fichiers de configuration ==="
chmod 640 /etc/apache2/sites-available/* 2>/dev/null
chmod 640 /etc/apache2/conf-available/* 2>/dev/null
chown root:root /etc/apache2/sites-available/* 2>/dev/null
chown root:root /etc/apache2/conf-available/* 2>/dev/null
# Rechargement final d'Apache
systemctl reload apache2
echo "✅ Installation et sécurisation d'Apache terminées !"