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' "
/etc/apache2/conf-available/full-qualified-domain-name.conf
ServerName localhost

Enfin, activer modules et conf :

sudo a2enmod headers ssl rewrite
sudo a2enconf security tracker full-qualified-domain-name
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.

Ici on utilise les macros, en déclarant les domaines à la fin. Il faut activer le module correspondant :

sudo a2enmod macro
/etc/apache2/sites-available/exemple.org.conf
<Macro my_macro $domain>
	<VirtualHost *:80>
		ServerName $domain
		# Déclare les sous-domaines qui sont en réalité le même site
		ServerAlias www.$domain
 
		# 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 $domain
		ServerAlias www.$domain
 
		DocumentRoot /var/www/$domain
		# Si besoin d'alias
		# Alias /application /var/www/$domain/undossier/monappli
 
			<Directory /var/www/$domain/ >
					Options FollowSymLinks MultiViews
					AllowOverride All
					Require all granted
			</Directory>
 
		# Logs
		ErrorLog ${APACHE_LOG_DIR}/$domain_error.log
		CustomLog ${APACHE_LOG_DIR}/$domain_access.log combined
 
		# Configuration SSL avec Let’s Encrypt
		SSLEngine On
		SSLCertificateFile /etc/letsencrypt/live/$domain/fullchain.pem
		SSLCertificateKeyFile /etc/letsencrypt/live/$domain/privkey.pem
 
		# Redirection pour les sous-domaines non déclarés
		RewriteEngine On
		RewriteCond %{HTTP_HOST} !^$domain$ [NC]
		RewriteCond %{HTTP_HOST} !^www\.$domain$ [NC]
		RewriteRule ^ https://$domain%{REQUEST_URI} [L,R=301]
	</VirtualHost>
Use my_macro exemple.org
Use my_macro exemple.com

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.1729954324.txt.gz · Dernière modification : 26/10/2024 16:52 de Zatalyz