sécurité renforcée
This commit is contained in:
@@ -13,13 +13,18 @@ update_system
|
|||||||
echo "=== Installation d'Apache et des outils nécessaires ==="
|
echo "=== Installation d'Apache et des outils nécessaires ==="
|
||||||
apt install -y apache2 curl dnsutils certbot python3-certbot-apache
|
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 ==="
|
echo "=== Activation et démarrage d'Apache ==="
|
||||||
systemctl enable apache2
|
systemctl is-enabled apache2 || systemctl enable apache2
|
||||||
systemctl start apache2
|
systemctl is-active --quiet apache2 || systemctl start apache2
|
||||||
|
|
||||||
# Activer les modules nécessaires
|
# Activer les modules nécessaires uniquement s'ils ne le sont pas déjà
|
||||||
a2enmod rewrite ssl headers
|
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
|
systemctl reload apache2
|
||||||
|
|
||||||
# Récupérer le FQDN
|
# Récupérer le FQDN
|
||||||
@@ -29,22 +34,27 @@ echo "🔍 Serveur détecté : $FQDN"
|
|||||||
# Vérification DNS
|
# Vérification DNS
|
||||||
check_dns "$FQDN"
|
check_dns "$FQDN"
|
||||||
|
|
||||||
# Configurer le VirtualHost
|
# Configurer le VirtualHost uniquement si ce n'est pas déjà fait
|
||||||
echo "=== Configuration du Virtual Host pour $FQDN ==="
|
echo "=== Configuration du Virtual Host pour $FQDN ==="
|
||||||
./add_domain.sh "$FQDN"
|
if ! grep -q "ServerName $FQDN" /etc/apache2/sites-available/*.conf; then
|
||||||
EXIT_CODE=$?
|
./add_domain.sh "$FQDN"
|
||||||
|
EXIT_CODE=$?
|
||||||
if [[ $EXIT_CODE -ne 0 ]]; then
|
if [[ $EXIT_CODE -ne 0 ]]; then
|
||||||
echo "❌ Échec de la configuration du serveur ($FQDN). Code erreur : $EXIT_CODE"
|
echo "❌ Échec de la configuration du serveur ($FQDN). Code erreur : $EXIT_CODE"
|
||||||
exit $EXIT_CODE
|
exit $EXIT_CODE
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Configuration SSL
|
# Configuration SSL uniquement si nécessaire
|
||||||
setup_ssl "$FQDN"
|
setup_ssl "$FQDN"
|
||||||
|
|
||||||
# Sécurisation des accès
|
# Sécurisation des accès
|
||||||
echo "=== Sécurisation des accès ==="
|
echo "=== Sécurisation des accès ==="
|
||||||
cat <<EOF > /etc/apache2/conf-available/security.conf
|
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 />
|
<Directory />
|
||||||
AllowOverride None
|
AllowOverride None
|
||||||
Require all denied
|
Require all denied
|
||||||
@@ -54,23 +64,99 @@ cat <<EOF > /etc/apache2/conf-available/security.conf
|
|||||||
Require all denied
|
Require all denied
|
||||||
</FilesMatch>
|
</FilesMatch>
|
||||||
EOF
|
EOF
|
||||||
a2enconf security
|
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
|
# Renforcement des en-têtes HTTP
|
||||||
echo "=== Renforcement des en-têtes HTTP ==="
|
|
||||||
cat <<EOF >> /etc/apache2/conf-available/security.conf
|
|
||||||
ServerTokens Prod
|
ServerTokens Prod
|
||||||
ServerSignature Off
|
ServerSignature Off
|
||||||
TraceEnable Off
|
TraceEnable Off
|
||||||
Header always unset X-Powered-By
|
Header always unset X-Powered-By
|
||||||
EOF
|
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)
|
# Activer HTTP Strict Transport Security (HSTS) uniquement si nécessaire
|
||||||
echo "Header always set Strict-Transport-Security \"max-age=31536000; includeSubDomains; preload\"" >> /etc/apache2/sites-available/default-ssl.conf
|
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
|
||||||
|
|
||||||
# Limitation de la taille des requêtes
|
|
||||||
|
# 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 ==="
|
echo "=== Limitation de la taille des requêtes ==="
|
||||||
echo "LimitRequestBody 10485760" >> /etc/apache2/conf-available/security.conf
|
if ! grep -q "LimitRequestBody" "$SECURITY_CONF"; then
|
||||||
|
echo "LimitRequestBody 10485760" >> "$SECURITY_CONF"
|
||||||
|
fi
|
||||||
|
|
||||||
# Vérifier la configuration avant rechargement
|
# Vérifier la configuration avant rechargement
|
||||||
echo "=== Vérification de la configuration Apache ==="
|
echo "=== Vérification de la configuration Apache ==="
|
||||||
@@ -80,14 +166,14 @@ if [[ $? -ne 0 ]]; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Appliquer des permissions sécurisées
|
# Appliquer des permissions sécurisées (éviter les erreurs si déjà appliquées)
|
||||||
echo "=== Sécurisation des permissions des fichiers de configuration ==="
|
echo "=== Sécurisation des permissions des fichiers de configuration ==="
|
||||||
chmod 640 /etc/apache2/sites-available/*
|
chmod 640 /etc/apache2/sites-available/* 2>/dev/null
|
||||||
chmod 640 /etc/apache2/conf-available/*
|
chmod 640 /etc/apache2/conf-available/* 2>/dev/null
|
||||||
chown root:root /etc/apache2/sites-available/*
|
chown root:root /etc/apache2/sites-available/* 2>/dev/null
|
||||||
chown root:root /etc/apache2/conf-available/*
|
chown root:root /etc/apache2/conf-available/* 2>/dev/null
|
||||||
|
|
||||||
# Rechargement final d'Apache
|
# Rechargement final d'Apache
|
||||||
systemctl reload apache2
|
systemctl reload apache2
|
||||||
|
|
||||||
echo "✅ Installation et sécurisation d'Apache terminées !"
|
echo "✅ Installation et sécurisation d'Apache terminées !"
|
||||||
Reference in New Issue
Block a user