Logo Khaganat

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
fr:apache [2025/01/19 09:12] – [Faire des pages d'erreurs personnalisées] zatalyzfr:apache [2025/02/09 17:34] (Version actuelle) – [Content Security Policy (CSP)] Encore mieux zatalyz
Ligne 32: Ligne 32:
  
 Cela ressemblera à quelque chose comme ça :  Cela ressemblera à quelque chose comme ça : 
-<code>txt /etc/apache2/sites-available/monsite-org.conf+<code txt /etc/apache2/sites-available/monsite-org.conf>
 <VirtualHost *:80> <VirtualHost *:80>
     ServerName monsite.org     ServerName monsite.org
Ligne 51: Ligne 51:
  
 Le vhosts en https a un port différent, et c'est là qu'on configurera toutes les options : alias, etc. Le vhosts en https a un port différent, et c'est là qu'on configurera toutes les options : alias, etc.
-<code>txt /etc/apache2/sites-available/monsite-org-ssl.conf+<code txt /etc/apache2/sites-available/monsite-org-ssl.conf>
 <VirtualHost *:443> <VirtualHost *:443>
     ServerName monsite.org     ServerName monsite.org
Ligne 158: Ligne 158:
 En principe nos serveurs sont à jours, hein. Mais en cas d'oubli, ne facilitons pas la tâche des observateurs : En principe nos serveurs sont à jours, hein. Mais en cas d'oubli, ne facilitons pas la tâche des observateurs :
  
-  nano /etc/apache2/conf-available/security.conf +<code bash /etc/apache2/conf-available/security.conf> 
- +# Cacher la version d'Apache2
-<code># Cacher la version d'Apache2+
 ServerTokens Prod ServerTokens Prod
-ServerSignature Off</code>+# Cache la signature de "Apache" dans les pages d'erreurs et répertoires 
 +ServerSignature Off 
 +# Désactive la méthode HTTP TRACE utilisée dans des attaques XST 
 +TraceEnable Off 
 +</code>
  
-  service apache2 restart+  sudo apachectl a2enconf security
  
-À refaire sur chacun de ses serveurs ! 
  
-<WRAP center round tip 60%> 
-On peut aussi paramétrer (et modifier) ces options dans ''/etc/apache2/apache2.conf'' mais c'est moins élégant. 
-</WRAP> 
-<WRAP center round help 60%> 
-Il faut activer le fichier, non ? Cette partie du tuto demande à être vérifiée. 
-</WRAP> 
  
 +
 +==== Vhost avec variables ====
 +On peut utiliser des macros, ce qui va permettre d'utiliser des variables pour générer nos fichiers.
 +
 +  sudo a2enmod macro
 +
 +On crée ensuite les fichiers de "macros"
 +<code bash /etc/apache2/conf-available/macro_common_config_80.conf>
 +<Macro common_config_80 $domain>
 +# Les parties "tout le monde pareil" dans les configs apache. 
 +# Pour vhost 80
 + ServerName $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]
 + 
 +</Macro></code>
 +
 +<code bash /etc/apache2/conf-available/macro_common_config_443.conf>
 +
 +<Macro common_config_443 $domain>
 +# Les parties "tout le monde pareil" dans les configs apache. Pour vhost 443
 + ServerName $domain
 + 
 + # 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 (à condition d'avoir son DNS bien configuré aussi)
 + RewriteEngine On
 + RewriteCond %{HTTP_HOST} !^%{SERVER_NAME}$ [NC]
 + RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]
 +</Macro></code>
 +
 +Un vhost d'un site précis va ensuite ressembler à ceci (remplacez ''exemple.org''...) : 
 +<code bash /etc/apache2/sites-available/exemple.org.conf>
 +<VirtualHost *:80>
 + # Déclare la macro, son appel et la variable pour le nom de domaine
 + Use common_config_80 exemple.org
 + # Déclare les sous-domaines qui sont en réalité le même site
 + ServerAlias www.exemple.org
 +</VirtualHost>
 + 
 +<VirtualHost *:443>
 + Use common_config_443 exemple.org
 + ServerAlias www.exemple.org
 + # Si besoin d'alias 
 + #Alias /machin /var/www/html
 + DocumentRoot /var/www/exemple.org
 + <Directory /var/www/exemple.org/ >
 + Options FollowSymLinks MultiViews
 + AllowOverride All
 + Require all granted
 + </Directory>
 +</VirtualHost>
 +</code>
 +
 +On active ensuite :
 +<code>sudo a2enconf macro_common_config_443
 +sudo a2enconf macro_common_config_80
 +sudo a2ensite exemple.org.conf
 +sudo apachectl -t
 +sudo apachectl graceful</code>
 +
 +<WRAP center round tip %>
 +Cette configuration concerne un serveur "seul" ; s'il y a un proxy en amont, les règles autour de 443 seront différentes. 
 +</WRAP>
  
 ===== Activation et paramétrage des modules ===== ===== Activation et paramétrage des modules =====
Ligne 201: Ligne 271:
   * Le dernier morceau concerne OCSP qui accélère un peu les échanges en https, voir aussi [[https://www.octopuce.fr/accelerer-votre-ssl-tls-avec-ocsp-stapling/|Accélérer votre réponse SSL/TLS avec l’OCSP Stapling]]   * Le dernier morceau concerne OCSP qui accélère un peu les échanges en https, voir aussi [[https://www.octopuce.fr/accelerer-votre-ssl-tls-avec-ocsp-stapling/|Accélérer votre réponse SSL/TLS avec l’OCSP Stapling]]
  
-<code>+<code bash /etc/apache2/mods-available/ssl.conf>
 SSLProtocol +TLSv1.2 SSLProtocol +TLSv1.2
 SSLCompression off SSLCompression off
Ligne 212: Ligne 282:
 SSLStaplingReturnResponderErrors off SSLStaplingReturnResponderErrors off
 SSLStaplingCache        shmcb:/var/run/ocsp(128000) SSLStaplingCache        shmcb:/var/run/ocsp(128000)
 +#À partir de la version 2.4.11 d'apache
 +SSLSessionTickets Off
 </code> </code>
-   
  
 Pour la liste ''SSLCipherSuite'', consulter les préconisations de [[https://mozilla.github.io/server-side-tls/ssl-config-generator/|Mozilla SSL Configuration Generator]] et lire tranquillement l'explication si dessous avant de modifier la proposition <wrap hi>mise à jour le 29 novembre 2017.</wrap> Pour la liste ''SSLCipherSuite'', consulter les préconisations de [[https://mozilla.github.io/server-side-tls/ssl-config-generator/|Mozilla SSL Configuration Generator]] et lire tranquillement l'explication si dessous avant de modifier la proposition <wrap hi>mise à jour le 29 novembre 2017.</wrap>
  
  
-À partir de la version 2.4.11 d'apache, vous pouvez ajouter dans le fichier ''/etc/apache2/mods-available/ssl.conf'' : 
- 
-<code> 
-SSLSessionTickets Off 
-</code> 
  
  
Ligne 290: Ligne 356:
 Puis modifiez le fichier ''/etc/apache2/mods-available/headers.conf'' : Puis modifiez le fichier ''/etc/apache2/mods-available/headers.conf'' :
  
-<code>+<code bash /etc/apache2/mods-available/headers.conf>
 # Ce qui suit vient de # Ce qui suit vient de
 # https://blog.adminrezo.fr/2016/12/securiser-serveur-apache-https-headers/ # https://blog.adminrezo.fr/2016/12/securiser-serveur-apache-https-headers/
 # Contrôler l’accès des bots de facon plus fine qu'avec robots.txt : # Contrôler l’accès des bots de facon plus fine qu'avec robots.txt :
-Header set X-Robots-Tag "index,follow,noarchive"+Header set X-Robots-Tag "index,follow,noarchive,notranslate"
 # É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 303: Ligne 369:
 # Faille spécifique IE8, on espère que plus personne ne l'utilise, mais... # Faille spécifique IE8, on espère que plus personne ne l'utilise, mais...
 Header set X-Download-Options noopen; Header set X-Download-Options noopen;
-# Interdire l'embarquement de tout ou partie de votre site dans un site ou logiciel tiers +# Interdire l'embarquement de tout ou partie du site dans un site ou logiciel tiers 
 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'infos lorsqu'on naviguer vers une autre page.
 +Header set Referrer-Policy "strict-origin-when-cross-origin"
 # 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'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' " 
 </code> </code>
  
Ligne 315: Ligne 380:
   * Header set X-Robots-Tag : http://robots-txt.com/x-robots-tag/   * Header set X-Robots-Tag : http://robots-txt.com/x-robots-tag/
   * CSP : https://ole.michelsen.dk/blog/secure-your-website-with-content-security-policy.html    * CSP : https://ole.michelsen.dk/blog/secure-your-website-with-content-security-policy.html 
 +
  
 === Content Security Policy (CSP) === === Content Security Policy (CSP) ===
Ligne 321: 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://content-security-policy.com/]]. En anglais, mais il contient toute la documentation officielle sur le sujet. Le site de référence est [[https://content-security-policy.com/]]. En anglais, mais il contient toute la documentation officielle sur le sujet.
Ligne 342: Ligne 410:
   add_header Content-Security-Policy "default-src 'self' *.monsite.org 'unsafe-eval' 'unsafe-inline'; ";   add_header Content-Security-Policy "default-src 'self' *.monsite.org 'unsafe-eval' 'unsafe-inline'; ";
  
 +Et voici une autre façon d'écrire les Content-Security-Policy, un peu plus "lisible". Cela couvre des besoins normaux de façon relativement sécurisée, mais comme on l'a vu, il faudra adapter aux pads, à OnlyOffice... 
 +<code> 
 +Header set Content-Security-Policy " 
 +  default-src 'self'; 
 +  script-src 'self';  
 +  style-src 'self'; 
 +  img-src 'self' https: ; 
 +  font-src 'self'; 
 +  connect-src 'self' https://bosh.jabberfr.org/ *.numenaute.org; 
 +  frame-src https://chat.jabberfr.org/ *.numenaute.org/; 
 +  object-src 'self'; 
 +  base-uri 'self'; 
 +  form-action 'self'; 
 +  frame-ancestors 'none'; 
 +
 +</code> 
 +Ces règles sont un compromis entre "fonctionnel" et "sécurisé" (avec quelques suggestions de "quoi mettre d'autre") :  
 +  * ''default-src 'self';''Tout provient du même domaine sauf mention contraire. 
 +  * Les scripts, au choix... 
 +    * ''script-src 'self' 'unsafe-inline' 'unsafe-eval';'' Permet les scripts inline et eval(), nécessaires pour certaines applications. 
 +    * ''script-src 'self';'' Cette version est sécurisée mais... ben potentiellement certaines applis ne fonctionneront pas. Celles avec des potentielles failles :P 
 +    * L'usage de Hashes et Nonces serait idéale mais avec les cms, c'est compliqué. 
 +  * ''style-src 'self';'' Permet les styles inline. 
 +    * ''style-src 'self' 'unsafe-inline';'' Pour faire marcher les sites mal branlés (style dans le html) 
 +  * ''img-src 'self' https: ;'' Autorise les images venant du même domaine et de certaines sources externes via https. 
 +  * ''font-src 'self';'' Autorise les polices venant du même domaine. 
 +  * ''connect-src 'self' https://bosh.jabberfr.org/ *.numenaute.org;'' Permet les connexions vers des ressources externes indiquées 
 +  * ''frame-src https://chat.jabberfr.org/ *.numenaute.org/;'' Autorise l'encadrement (frames) par certains domaines 
 +  * ''object-src 'self';'' Limite l'utilisation des éléments <object>, <embed>, et <applet> dans les pages à notre domaine. 
 +  * ''base-uri 'self';'' et ''form-action 'self';'' Interdit les soumissions de formulaire et le changement de base URL depuis un autre domaine. 
 +  * ''frame-ancestors 'none';'' Empêche le site d'être chargé dans un iframe 
 + 
  
 ==== Activer la réécriture des URLs ==== ==== Activer la réécriture des URLs ====
Ligne 497: Ligne 596:
 Créer ''/etc/apache2/conf-available/remoteip.conf'' et lui donner ceci : Créer ''/etc/apache2/conf-available/remoteip.conf'' et lui donner ceci :
 <code> <code>
 +RemoteIPInternalProxy 10.0.0.10
 RemoteIPHeader X-Forwarded-For RemoteIPHeader X-Forwarded-For
-RemoteIPInternalProxy 192.168.20.35 
 </code> </code>
  
-Remplacer ''192.168.20.35'' par l'IP interne de la VM pare-feu.+Remplacer ''10.0.0.10'' par l'IP interne de la VM pare-feu. 
 + 
 +Si le proxy est externe, on le déclare autrement :  
 + 
 +<code>RemoteIPTrustedProxy 203.0.113.1</code>
  
 Activer le [[https://httpd.apache.org/docs/trunk/mod/mod_remoteip.html|module remoteip]] qui fait ça : Activer le [[https://httpd.apache.org/docs/trunk/mod/mod_remoteip.html|module remoteip]] qui fait ça :
Ligne 570: Ligne 673:
  
 ==== Faire des pages d'erreurs personnalisées ==== ==== Faire des pages d'erreurs personnalisées ====
-Les pages par défaut d'apache sont tristes, on peut personnaliser celles qu'on a le plus de risque de croiser. Dans mon cas, j'ai préféré un truc très générique propre à l'hébergeur ([[numenaute.org|Numenaute]]) mais on peut aussi faire ça par domaine. Dans ce dernier cas, le plus simple sera d'indiquer le chemin des pages web d'erreur dans le virtualhost, avec la même syntaxe que ci-dessous. +Les pages par défaut d'apache sont tristes, on peut personnaliser celles qu'on a le plus de risque de croiser. Dans mon cas, j'ai préféré un truc très générique propre à l'hébergeur ([[https://numenaute.org|Numenaute]]) mais on peut aussi faire ça par domaine. Dans ce dernier cas, le plus simple sera d'indiquer le chemin des pages web d'erreur dans le virtualhost, avec la même syntaxe que ci-dessous. 
  
 J'ajoute les lignes suivantes à ''bidouilles.conf'' pour que tous mes services aient les mêmes pages.  J'ajoute les lignes suivantes à ''bidouilles.conf'' pour que tous mes services aient les mêmes pages. 
Ligne 595: Ligne 698:
 </code> </code>
  
-Mes diverses pages sont statiques et toutes simples. Il serait possible de faire des pages incluant des éléments SSI (Apache ajoutant des informations) mais cela ne me semble pas vital. Et bonus : tout cela est logué normalement.+Mes diverses pages sont statiques et toutes simples. Il serait possible de faire des pages [[https://httpd.apache.org/docs/current/fr/howto/ssi.html|incluant des éléments SSI]] (Apache ajoutant des informations) mais cela ne me semble pas vital. Et bonus : tout cela est logué normalement.
  
 <code html5 /var/www/numenaute/error.numenaute.org/404.html> <code html5 /var/www/numenaute/error.numenaute.org/404.html>
CC Attribution-Share Alike 4.0 International Driven by DokuWiki
fr/apache.1737277946.txt.gz · Dernière modification : 2025/01/19 09:12 de zatalyz

Licences Mentions légales Accueil du site Contact