Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| fr:apache [2025/02/09 16:36] – [Vhost avec variables] bonnes pratiques zatalyz | fr:apache [2025/06/26 20:41] (Version actuelle) – [Faire des pages d'erreurs personnalisées] zatalyz | ||
|---|---|---|---|
| Ligne 158: | Ligne 158: | ||
| En principe nos serveurs sont à jours, hein. Mais en cas d' | En principe nos serveurs sont à jours, hein. Mais en cas d' | ||
| - | nano / | + | <code bash / |
| - | + | # Cacher la version d' | |
| - | < | + | |
| ServerTokens Prod | ServerTokens Prod | ||
| - | ServerSignature Off</ | + | # Cache la signature de " |
| + | ServerSignature Off | ||
| + | # Désactive la méthode HTTP TRACE utilisée dans des attaques XST | ||
| + | TraceEnable Off | ||
| + | </ | ||
| + | |||
| + | sudo apachectl a2enconf security | ||
| - | service apache2 restart | ||
| - | À refaire sur chacun de ses serveurs ! | ||
| - | <WRAP center round tip 60%> | ||
| - | On peut aussi paramétrer (et modifier) ces options dans ''/ | ||
| - | </ | ||
| - | <WRAP center round help 60%> | ||
| - | Il faut activer le fichier, non ? Cette partie du tuto demande à être vérifiée. | ||
| - | </ | ||
| ==== Vhost avec variables ==== | ==== Vhost avec variables ==== | ||
| Ligne 219: | Ligne 216: | ||
| < | < | ||
| # Déclare la macro, son appel et la variable pour le nom de domaine | # Déclare la macro, son appel et la variable pour le nom de domaine | ||
| - | Use macro_common_config_80 | + | Use common_config_80 |
| # Déclare les sous-domaines qui sont en réalité le même site | # Déclare les sous-domaines qui sont en réalité le même site | ||
| ServerAlias www.exemple.org | ServerAlias www.exemple.org | ||
| Ligne 225: | Ligne 222: | ||
| < | < | ||
| - | Use macro_common_config_443 | + | Use common_config_443 |
| ServerAlias www.exemple.org | ServerAlias www.exemple.org | ||
| # Si besoin d' | # Si besoin d' | ||
| - | Alias /app / | + | #Alias /machin |
| DocumentRoot / | DocumentRoot / | ||
| < | < | ||
| Ligne 239: | Ligne 236: | ||
| On active ensuite : | On active ensuite : | ||
| - | < | + | < |
| - | sudo a2enconf macro_common_config_80.conf | + | sudo a2enconf macro_common_config_80 |
| sudo a2ensite exemple.org.conf | sudo a2ensite exemple.org.conf | ||
| sudo apachectl -t | sudo apachectl -t | ||
| Ligne 274: | Ligne 271: | ||
| * Le dernier morceau concerne OCSP qui accélère un peu les échanges en https, voir aussi [[https:// | * Le dernier morceau concerne OCSP qui accélère un peu les échanges en https, voir aussi [[https:// | ||
| - | < | + | < |
| SSLProtocol +TLSv1.2 | SSLProtocol +TLSv1.2 | ||
| SSLCompression off | SSLCompression off | ||
| Ligne 285: | Ligne 282: | ||
| SSLStaplingReturnResponderErrors off | SSLStaplingReturnResponderErrors off | ||
| SSLStaplingCache | SSLStaplingCache | ||
| + | #À partir de la version 2.4.11 d' | ||
| + | SSLSessionTickets Off | ||
| </ | </ | ||
| - | | ||
| Pour la liste '' | Pour la liste '' | ||
| - | À partir de la version 2.4.11 d' | ||
| - | |||
| - | < | ||
| - | SSLSessionTickets Off | ||
| - | </ | ||
| Ligne 363: | Ligne 356: | ||
| Puis modifiez le fichier ''/ | Puis modifiez le fichier ''/ | ||
| - | < | + | < |
| # Ce qui suit vient de | # Ce qui suit vient de | ||
| # https:// | # https:// | ||
| # Contrôler l’accès des bots de facon plus fine qu' | # Contrôler l’accès des bots de facon plus fine qu' | ||
| - | Header set X-Robots-Tag " | + | Header set X-Robots-Tag " |
| # Évite que le contenu soit interprété différemment que définit dans le mime Type | # Évite que le contenu soit interprété différemment que définit dans le mime Type | ||
| Header set X-Content-Type-Options nosniff | Header set X-Content-Type-Options nosniff | ||
| Ligne 376: | Ligne 369: | ||
| # Faille spécifique IE8, on espère que plus personne ne l' | # Faille spécifique IE8, on espère que plus personne ne l' | ||
| Header set X-Download-Options noopen; | Header set X-Download-Options noopen; | ||
| - | # Interdire l' | + | # Interdire l' |
| Header set X-Permitted-Cross-Domain-Policies none | Header set X-Permitted-Cross-Domain-Policies none | ||
| + | # Protège la vie privée en évitant de transmettre trop d' | ||
| + | Header set Referrer-Policy " | ||
| # X-Clacks, ça sert à rien, c'est donc vital. | # X-Clacks, ça sert à rien, c'est donc vital. | ||
| header set X-Clacks-Overhead "GNU Terry Pratchett" | header set X-Clacks-Overhead "GNU Terry Pratchett" | ||
| - | # Enfin, les CSP permettent de vérifier l' | ||
| - | # CSP, pour éviter de charger des scripts d' | ||
| - | Header set Content-Security-Policy " | ||
| </ | </ | ||
| Ligne 388: | Ligne 380: | ||
| * Header set X-Robots-Tag : http:// | * Header set X-Robots-Tag : http:// | ||
| * CSP : https:// | * CSP : https:// | ||
| + | |||
| === Content Security Policy (CSP) === | === Content Security Policy (CSP) === | ||
| Ligne 394: | Ligne 387: | ||
| Mais il est difficile de faire marcher les CMS tout en ayant une politique sécurisée sur les CSP. | Mais il est difficile de faire marcher les CMS tout en ayant une politique sécurisée sur les CSP. | ||
| + | |||
| + | Je conseille de faire des règles CSP différentes suivant les CMS... | ||
| Le site de référence est [[https:// | Le site de référence est [[https:// | ||
| Ligne 415: | Ligne 410: | ||
| add_header Content-Security-Policy " | add_header Content-Security-Policy " | ||
| - | Et voici une autre façon d' | + | Et voici une autre façon d' |
| < | < | ||
| Header set Content-Security-Policy " | Header set Content-Security-Policy " | ||
| - | # Tout provient du même domaine sauf mention contraire. | ||
| default-src ' | default-src ' | ||
| - | | + | script-src ' |
| - | # Permet les scripts inline et eval(), nécessaires pour certaines applications. | + | style-src ' |
| - | # script-src 'self' ' | + | |
| - | # Cette version est sécurisée mais... ben potentiellement certaines applis ne fonctionneront pas | + | |
| - | # Celles avec des potentielles failles :P | + | |
| - | script-src ' | + | |
| - | # L' | + | |
| - | | + | |
| - | # Pour faire marcher les sites mal branlés (style dans le html) | + | |
| - | #style-src 'self' ' | + | |
| - | # Sinon : | + | |
| - | style-src ' | + | |
| - | # Autorise les images venant du même domaine et de certaines sources externes via https. | + | |
| img-src ' | img-src ' | ||
| - | # Autorise les polices venant du même domaine. | ||
| font-src ' | font-src ' | ||
| - | # Permet les connexions vers des ressources externes suivantes | ||
| connect-src ' | connect-src ' | ||
| - | # Autorise l' | ||
| frame-src https:// | frame-src https:// | ||
| - | # Limite l' | ||
| object-src ' | object-src ' | ||
| - | # Interdit les soumissions de formulaire et le changement de base URL depuis un autre domaine. | ||
| base-uri ' | base-uri ' | ||
| form-action ' | form-action ' | ||
| - | # Empêche le site d' | ||
| frame-ancestors ' | frame-ancestors ' | ||
| " | " | ||
| </ | </ | ||
| + | Ces règles sont un compromis entre " | ||
| + | * '' | ||
| + | * Les scripts, au choix... | ||
| + | * '' | ||
| + | * '' | ||
| + | * L' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | |||
| ==== Activer la réécriture des URLs ==== | ==== Activer la réécriture des URLs ==== | ||
| Ligne 652: | Ligne 644: | ||
| On peut se faire un fichier de configuration appelant diverses modifs sur tous les sites, par exemple dans ''/ | On peut se faire un fichier de configuration appelant diverses modifs sur tous les sites, par exemple dans ''/ | ||
| - | Ensuite on peut l' | + | Ensuite on peut l' |
| + | sudo a2enconf bidouilles | ||
| + | sudo systemctl reload apache2 | ||
| + | Cela évite de réécrire les mêmes règles partout. | ||
| + | |||
| + | On peut aussi l' | ||
| Include / | Include / | ||
| + | Mais attention, suivant ce qu'on met dedans, cela peut mettre un peu de bazar (genre, la partie sur les logs plus bas, je ne sais pas trop comment les logs seront écrits avec l' | ||
| - | Cela évite de réécrire les mêmes règles partout. | ||
| ==== Virer le tracker de Facebook ==== | ==== Virer le tracker de Facebook ==== | ||
| Ligne 740: | Ligne 737: | ||
| Doc : https:// | Doc : https:// | ||
| + | |||
| + | === Partager les pages entre serveurs === | ||
| + | Là, je ne sais pas si c'est la bonne idée. Mais le plus efficace serait de monter le dossier des pages d' | ||
| + | |||
| + | Une autre solution est de faire un rsync, un truc Ansible... C'est sans doute aussi bien. | ||
| + | |||
| + | |||
| + | ==== Personnaliser les logs d' | ||
| + | |||
| + | Par défaut sur Debian (et sans doute d' | ||
| + | |||
| + | Cela peut se personnaliser au niveau du vhost en mettant par exemple ces deux lignes : | ||
| + | |||
| + | < | ||
| + | CustomLog ${APACHE_LOG_DIR}/ | ||
| + | |||
| + | En effet, un fichier de log par " | ||
| + | |||
| + | Finalement, tout laisser dans un seul fichier générique est aussi bien. On va donc laisser le fonctionnement par défaut. D' | ||
| + | |||
| + | === Un peu de théorie === | ||
| + | <WRAP center round todo 60%> | ||
| + | En cours de rédaction, mais je fais une pause. | ||
| + | </ | ||
| + | |||
| + | Avant tout : à quoi correspond les deux formats de fichiers ? | ||
| + | * error.log (lié à la directive [[https:// | ||
| + | * Si j'ai bien compris, ce qui s' | ||
| + | * access.log (lié à la directive [[https:// | ||
| + | * Ici on peut utiliser '' | ||
| + | |||
| + | Dans '' | ||
| + | < | ||
| + | LogFormat "%v:%p %h %l %u %t \" | ||
| + | LogFormat "%h %l %u %t \" | ||
| + | LogFormat "%h %l %u %t \" | ||
| + | LogFormat " | ||
| + | LogFormat " | ||
| + | </ | ||
| + | |||
| + | Le format est : | ||
| + | LogFormat " | ||
| + | |||
| + | Pour les arguments, ce n'est pas évident à déchiffrer ; la syntaxe détaillée est expliquée sur [[https:// | ||
| + | |||
| + | Ainsi par exemple, pour '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | La proposition pratique sera épurée par rapport à ce modèle. | ||
| + | === Et un exemple pratique === | ||
| + | Alors, on met quoi, dans nos logs ? | ||
| + | |||
| + | Oublions les logs déclarés dans les vhosts, on va faire ça de façon générale, dans notre '' | ||
| + | |||
| + | < | ||
| + | # Logs au format comme on veut | ||
| + | LogFormat "%h ☆ %v ☆ %t ☆ %>s ☆ %O ☆ \" | ||
| + | CustomLog ${APACHE_LOG_DIR}/ | ||
| + | </ | ||
| + | |||
| + | * l'ip en premier, c'est ainsi super facile d' | ||
| + | * ☆ pour séparer les arguments (ou tout autre caractère unicode). Aucun risque que ce soit utilisé dans les logs, sauf à la limite le Referer ou l' | ||
| + | * Je garde la requête en format long. Une alternative serait : | ||
| + | * '' | ||
| + | * Je garde l' | ||
| + | * Le Referer n'a pas forcément d' | ||
| + | |||
| + | Attention, ce format de log n'a rien de classique ; il ne sera pas facilement interprété par les logiciels à moins d' | ||
| ==== Could not reliably determine the server' | ==== Could not reliably determine the server' | ||
| À chaque modif du serveur, vous avez sans doute droit à ce message d' | À chaque modif du serveur, vous avez sans doute droit à ce message d' | ||





