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 à activer
- /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