| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente |
| configuration_d_un_serveur_web_apache [2021/01/17 21:15] – [Redirection HTTP/HTTPS via Apache mod_proxy] superadmin | configuration_d_un_serveur_web_apache [2025/07/23 12:15] (Version actuelle) – superadmin |
|---|
| Sous Apache, tous les vhosts sont stockés dans le répertoire ''/etc/apache2/sites-available'' sous forme de fichiers texte. La commande ''a2ensite'' permet d'activer ces vhosts et de les publier. Une fois un vhost activé, un lien symbolique vers le fichier correspondant est créé dans le répertoire ''/etc/apache2/sites-enabled''. La commande inverse permettant de désactiver un vhost (et donc de supprimer le lien symbolique dans ''sites-enabled'') est ''a2dissite''. | Sous Apache, tous les vhosts sont stockés dans le répertoire ''/etc/apache2/sites-available'' sous forme de fichiers texte. La commande ''a2ensite'' permet d'activer ces vhosts et de les publier. Une fois un vhost activé, un lien symbolique vers le fichier correspondant est créé dans le répertoire ''/etc/apache2/sites-enabled''. La commande inverse permettant de désactiver un vhost (et donc de supprimer le lien symbolique dans ''sites-enabled'') est ''a2dissite''. |
| |
| :!: Rien n'empêche l'administrateur de créer directement ses vhosts dans le répertoire ''sites-enabled'', mais par convention, il est préférable de d'abord créer le vhost dans ''sites-available'', puis de l'activer afin qu'il apparaisse dans ''sites-enabled''. | <WRAP center round info 60%> |
| | Rien n'empêche l'administrateur de créer directement ses vhosts dans le répertoire ''sites-enabled'', mais par convention, il est préférable de d'abord créer le vhost dans ''sites-available'', puis de l'activer afin qu'il apparaisse dans ''sites-enabled''. |
| |
| :!: Il est recommandé de supprimer le vhost par défaut nommé ''000-default.conf'' dans ''/etc/apache2/sites-available'' pour des raisons de sécurité. | Il est recommandé de supprimer le vhost par défaut nommé ''000-default.conf'' dans ''/etc/apache2/sites-available'' pour des raisons de sécurité. |
| | </WRAP> |
| |
| Imaginons que l'on doivent publier un site web répondant à l'adresse **test.fr**. | Imaginons que l'on doivent publier un site web répondant à l'adresse **test.fr**. |
| <code>Options -Indexes</code> | <code>Options -Indexes</code> |
| |
| Pour bloquer les liens symboliques : | Pour bloquer les liens symboliques (attention certaines application en ont besoin!) : |
| |
| <code>Options -FollowSymLinks</code> | <code>Options -FollowSymLinks</code> |
| |
| Pour réactiver cette options, passer ''AllowOverride'' à ''All''. | Pour réactiver cette options, passer ''AllowOverride'' à ''All''. |
| ==== Mettre en place SSL (HTTPS) ==== | ==== Mettre en place SSL/TLS (HTTPS) ==== |
| |
| | HTTPS est l'implémentation du protocole HTTP à l'intérieur d'un tunnel SSL/TLS. Il permet de chiffrer les données transmises entre le client et le serveur web via HTTP. |
| | |
| | Pour mettre en place HTTPS pour un site, créer un vhost dédié à ce protocole pour ce site, en spécifiant bien un port d'écoute différent de celui utilisé par le vhost dédié à HTTP. Ne pas oublier de renseigner la directive ''servername'' avec le même nom que sur le certificat SSL/TLS (CN). |
| | |
| | Voici les deux directives à ajouter afin d'indiquer au serveur le certificat et la clé qu'il doit utiliser : |
| | |
| | <code> |
| | SSLCertificateFile /etc/letsencrypt/live/cloud.mdekoninck.fr/fullchain.pem |
| | SSLCertificateKeyFile /etc/letsencrypt/live/cloud.mdekoninck.fr/privkey.pem |
| | </code> |
| ==== Activer l'en-tête HSTS ==== | ==== Activer l'en-tête HSTS ==== |
| |
| | HSTS permet d'indiquer aux navigateurs clients se connectant à un site via HTTP qu'ils doivent impérativement s'y connecter en HTTPS. Ainsi, on force l'utilisation de SSL/TLS, par conséquent les navigateurs incompatibles avec HTTPS ne pourront pas afficher le site en question. |
| | |
| | Une fois HTTPS activé, ajouter le code suivant dans la configurations des vhosts HTTP et HTTPS : |
| | |
| | <code> |
| | <IfModule mod_headers.c> |
| | Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains" |
| | </IfModule> |
| | </code> |
| | |
| | Redémarrer le service apache, HSTS est activé ! |
| ==== Autoriser ou Interdire l'accès à un site à des hôtes ==== | ==== Autoriser ou Interdire l'accès à un site à des hôtes ==== |
| |
| * Require ip xx.xx.xx.xx/xx : Permet d'autoriser un hôte précis ou un hôte sur un réseau précis (adresse IP simple ou adresse de réseau en notation CIDR). | * Require ip xx.xx.xx.xx/xx : Permet d'autoriser un hôte précis ou un hôte sur un réseau précis (adresse IP simple ou adresse de réseau en notation CIDR). |
| * Require not ip xx.xx.xx.xx/xx : L'inverse de ci-dessus, on bloque l'hôte ou le réseau indiqué (adresse IP simple ou adresse de réseau en notation CIDR). | * Require not ip xx.xx.xx.xx/xx : L'inverse de ci-dessus, on bloque l'hôte ou le réseau indiqué (adresse IP simple ou adresse de réseau en notation CIDR). |
| * Require all granted : Autoriser tout le monde à se connecter au site. | * Require all granted : Autoriser tout le monde à accéder au répertoire web. |
| * Require all denied : Interdire à tout le monde de se connecter au site. | * Require all denied : Interdire à tout le monde à accéder au répertoire web. |
| |
| Pour interdire l'accès au site à un hôte ou à un hôte depuis un réseau spécifique, on utiliseras une règle pour tout autoriser, puis bloquera l'adresse IP ou l'hôte concerné (le site ici est stocké dans ''/var/www'') : | Pour interdire l'accès au site à un hôte ou à un hôte depuis un réseau spécifique, on utiliseras une règle pour tout autoriser, puis bloquera l'adresse IP ou l'hôte concerné (le site ici est stocké dans ''/var/www'') : |
| <Directory /var/www> | <Directory /var/www> |
| <RequireAll> | <RequireAll> |
| Require all granted #Autorise tous les hôtes à se connecter | Require all granted #Autorise tous les hôtes à accéder au répertoire web |
| Require not ip 192.168.1.0/24 #Interdit aux hôtes du réseau mentionné d'accéder au répertoire web | Require not ip 192.168.1.0/24 #Interdit aux hôtes du réseau mentionné d'accéder au répertoire web |
| </RequireAll> | </RequireAll> |
| </Directory> | </Directory> |
| </code> | </code> |
| | |
| | Ici, tout le monde, à l'exception des hôtes du réseau 192.168.1.0/24 pourront accèder au répertoire web. |
| |
| Cette fois-ci, on souhaite interdire l'accès à tout le monde sauf aux hôtes sur 2 réseaux différents : | Cette fois-ci, on souhaite interdire l'accès à tout le monde sauf aux hôtes sur 2 réseaux différents : |
| <Directory /var/www> | <Directory /var/www> |
| <RequireAny> #On utilise RequireAny car cette fois toutes les règles n'ont pas besoin de matcher pour s'appliquer. | <RequireAny> #On utilise RequireAny car cette fois toutes les règles n'ont pas besoin de matcher pour s'appliquer. |
| Require all denied #Interdit à tout le monde de se connecter | Require all denied #Interdit à tout le monde à accéder au répertoire web |
| Require ip 192.168.1.0/24 #Autorise les hôtes du réseau mentionné à accéder au répertoire web | Require ip 192.168.1.0/24 #Autorise les hôtes du réseau mentionné à accéder au répertoire web |
| Require ip 10.50.0.0/16 #Autorise les hôtes du réseau mentionné à accéder au répertoire web | Require ip 10.50.0.0/16 #Autorise les hôtes du réseau mentionné à accéder au répertoire web |