Ceci est une ancienne révision du document !


Apache

Cette page me sert de “tips”, pour des parties plus détaillées, voir https://khaganat.net/wikhan/fr:apache.

Commandes de base

Pour connaître sa version d'apache

apache -v

Pour vérifier avant tout que la syntaxe est propre :

sudo apachectl -t

Pour relancer proprement le serveur apache :

sudo apachectl graceful

Modules et configuration à activer

Faut pas mettre un “include” dans les vhost ?

/etc/apache2/conf-available/security.conf
# Cacher la version d'Apache2
ServerTokens Prod
ServerSignature Off
/etc/apache2/conf-available/tracker.conf
<IfModule mod_rewrite.c>
    RewriteEngine On
 
    # Supprimer les paramètres de tracking communs de la chaîne de requête (facebook, google, etc)
    # Facebook
    RewriteCond %{QUERY_STRING} (?:^|&)fbclid=[^&]+ [OR]
    # campagnes marketing Google Analytics
    RewriteCond %{QUERY_STRING} (?:^|&)utm_[^&]+ [OR]
    # Identifiant de clics Google Ads
    RewriteCond %{QUERY_STRING} (?:^|&)gclid=[^&]+ [OR]
    # Identifiant de clics Yandex
    RewriteCond %{QUERY_STRING} (?:^|&)yclid=[^&]+ [OR]
    # Paramètres de suivi Mailchimp
    RewriteCond %{QUERY_STRING} (?:^|&)mc_cid=[^&]+ [OR]
    RewriteCond %{QUERY_STRING} (?:^|&)mc_eid=[^&]+ [OR]
    # Paramètre de clic Microsoft Ads
    RewriteCond %{QUERY_STRING} (?:^|&)msclkid=[^&]+ [OR]
    # Paramètre de suivi Display Ads de Google.
    RewriteCond %{QUERY_STRING} (?:^|&)dclid=[^&]+
 
    # Rediriger vers l'URL sans les paramètres de tracking
    RewriteRule ^ %{REQUEST_URI}? [L,R=301]
</IfModule>
/etc/apache2/mods-available/ssl.conf
SSLProtocol +TLSv1.2
SSLCompression off
SSLCipherSuite HIGH:!aNULL:!eNULL:!LOW:!MEDIUM:!EXP:!RC4:!3DES:!MD5:!PSK:!kRSA:!SRP:-DH:+ECDH
SSLHonorCipherOrder On
 
# OCSP Stapling, only in httpd 2.3.3 and later
SSLUseStapling          on
SSLStaplingResponderTimeout 5
SSLStaplingReturnResponderErrors off
SSLStaplingCache        shmcb:/var/run/ocsp(128000)
SSLSessionTickets Off

Voir https://ssl-config.mozilla.org/ pour adapter la CipherSuite.

/etc/apache2/mods-available/headers.conf
# Contrôler l’accès des bots de facon plus fine qu'avec robots.txt :
Header set X-Robots-Tag "index,follow,noarchive"
# Évite que le contenu soit interprété différemment que définit dans le mime Type
Header set X-Content-Type-Options nosniff
# Protection contre le clickjacking
Header set X-Frame-Options "SAMEORIGIN"
# Protection contre les failles X-XSS
Header set X-XSS-Protection "1; mode=block"
# Faille spécifique IE8, on espère que plus personne ne l'utilise, mais...
Header set X-Download-Options noopen;
# Interdire l'embarquement de tout ou partie de votre site dans un site ou logiciel tiers 
Header set X-Permitted-Cross-Domain-Policies none
# X-Clacks, ça sert à rien, c'est donc vital.
Header set X-Clacks-Overhead "GNU Terry Pratchett"
# HSTS (15768000 seconds = 6 months)(63072000 = 24 mois) ; éviter le vol de cookies et le downgrade SSL.
Header set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
# Enfin, les CSP permettent de vérifier l'origine des éléments du site
# CSP, pour éviter de charger des scripts d'ailleurs. /!\ partie complexe à gérer suivant vos CMS
Header set Content-Security-Policy "default-src 'self' *.monsite.org 'unsafe-eval' 'unsafe-inline' "

Enfin, activer modules et conf :

sudo a2enmod headers ssl rewrite
sudo a2enconf security tracker
sudo apachectl -t
sudo apachectl graceful

Surplus sur les serveurs derrière un proxy

Donc, sur les vm, pas sur le proxy. C'est pour avoir les bonnes ip des visiteuses.

/etc/apache2/conf-available/remoteip.conf
RemoteIPHeader X-Forwarded-For
# Remplacer l'IP par celle du proxy
RemoteIPInternalProxy 192.168.20.PROXY
a2enmod remoteip
a2enconf remoteip
sudo apachectl -t
sudo apachectl graceful

Vhost

Convention de nommage : domaine.conf. Par exemple exemple.org.conf. On peut mettre le port 80 et 443 sur le même fichier, c'est aussi lisible et si on utilise let's encrypt en standalone, ça va très bien. Ne pas oublier sudo a2ensite exemple.org.conf puis de recharger apache ensuite.

Voir l'usage des macros pour générer le fichier en déclarant juste le nom de domaine (un truc d'apache).

/etc/apache2/sites-available/exemple.org.conf
<VirtualHost *:80>
    ServerName exemple.org
    # Déclare les sous-domaines qui sont en réalité le même site
    ServerAlias www.exemple.org
 
    # Redirection tout le trafic HTTP vers HTTPS
    RewriteEngine On
    RewriteCond %{REQUEST_URI} !.well-known/acme-challenge
    RewriteRule ^(.*)$ https://%{SERVER_NAME}$1 [R=301,L]
</VirtualHost>
 
<VirtualHost *:443>
    ServerName exemple.org
    ServerAlias www.exemple.org
 
    DocumentRoot /var/www/exemple.org/public_html
    Alias /application /var/www/exemple.org/undossier/monappli
 
        <Directory /var/www/exemple.org/ >
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>
 
    # Logs
    ErrorLog ${APACHE_LOG_DIR}/exemple.org_error.log
    CustomLog ${APACHE_LOG_DIR}/exemple.org_access.log combined
 
    # Configuration SSL avec Let’s Encrypt
    SSLEngine On
    SSLCertificateFile /etc/letsencrypt/live/exemple.org/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/exemple.org/privkey.pem
 
    # Redirection pour les sous-domaines non déclarés
    RewriteEngine On
    RewriteCond %{HTTP_HOST} !^exemple\.org$ [NC]
    RewriteCond %{HTTP_HOST} !^www\.exemple\.org$ [NC]
    RewriteRule ^ https://exemple.org%{REQUEST_URI} [L,R=301]
</VirtualHost>

Options propre au proxy

a2enmod proxy proxy_http

Variables utiles

  • ${APACHE_LOG_DIR} : le chemin du dossier des logs

 Ce texte est placé sous licence CC0

CC Attribution-Noncommercial-Share Alike 4.0 International Driven by DokuWiki
pratique/informatique/apache.1729947944.txt.gz · Dernière modification : 26/10/2024 15:05 de Zatalyz