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
pratique:informatique:apache [26/10/2024 16:52] – [Modules et configuration à activer] Zatalyzpratique:informatique:apache [26/10/2024 21:47] (Version actuelle) – [Options propre au proxy] Zatalyz
Ligne 12: Ligne 12:
  
 ===== Modules et configuration à activer ===== ===== Modules et configuration à activer =====
-<WRAP center round todo 60%> 
-Faut pas mettre un "include" dans les vhost ? 
-</WRAP> 
  
 <code txt /etc/apache2/conf-available/security.conf> <code txt /etc/apache2/conf-available/security.conf>
Ligne 82: Ligne 79:
 # HSTS (15768000 seconds = 6 months)(63072000 = 24 mois) ; éviter le vol de cookies et le downgrade SSL. # 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" Header set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
 +# Supprimer les en-têtes de serveur par défaut pour la sécurité
 +Header unset Server
 +Header unset X-Powered-By
 # Enfin, les CSP permettent de vérifier l'origine des éléments du site # 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 # 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' "+#Header set Content-Security-Policy "default-src 'self' *.monsite.org 'unsafe-eval' 'unsafe-inline' "
 </code> </code>
  
Ligne 114: Ligne 114:
  
 ===== Vhost ===== ===== 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.+Convention de nommage : le domaine du site+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. 
  
 <WRAP center round tip 60%> <WRAP center round tip 60%>
-Ici on utilise les macros, en déclarant les domaines à la fin. Il faut activer le module correspondant :  +Ici on utilise les macros, ce qui réduit un peu le nombre de trucs à répéter. Il faut activer le module correspondant :  
-  sudo a2enmod macro+ sudo a2enmod macro
 </WRAP> </WRAP>
  
 +<WRAP center round important 60%>
 +Ça c'est sur les serveurs backend, pas sur les parties proxy.
 +</WRAP>
  
-<code txt /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 +<code txt /etc/apache2/sites-available/common_config_80.conf>
- RewriteEngine On +
- RewriteCond %{REQUEST_URI} !.well-known/acme-challenge +
- RewriteRule ^(.*)$ https://%{SERVER_NAME}$1 [R=301,L] +
- </VirtualHost>+
  
- <VirtualHost *:443> +<Macro common_config_80 $domain> 
- ServerName $domain +# Les parties "tout le monde pareil" dans les configs apachePour vhost 80 
- ServerAlias www.$domain+ ServerName $domain
  
- DocumentRoot /var/www/$domain +Redirection tout le trafic HTTP vers HTTPS 
- Si besoin d'alias + RewriteEngine On 
- # Alias /application /var/www/$domain/undossier/monappli+ RewriteCond %{REQUEST_URI} !.well-known/acme-challenge 
 + RewriteRule ^(.*)$ https://%{SERVER_NAME}$1 [R=301,L]
  
- <Directory /var/www/$domain/ > +</Macro
- Options FollowSymLinks MultiViews +</code>
- AllowOverride All +
- Require all granted +
- </Directory>+
  
- # Logs +<code txt /etc/apache2/sites-available/common_config_443.conf> 
- ErrorLog ${APACHE_LOG_DIR}/$domain_error.log +<Macro common_config_443 $domain> 
- CustomLog ${APACHE_LOG_DIR}/$domain_access.log combined+# Les parties "tout le monde pareil" dans les configs apachePour vhost 443 
 + ServerName $domain
  
- Configuration SSL avec Let’s Encrypt + Logs 
- SSLEngine On + ErrorLog ${APACHE_LOG_DIR}/$domain_error.log 
- SSLCertificateFile /etc/letsencrypt/live/$domain/fullchain.pem + CustomLog ${APACHE_LOG_DIR}/$domain_access.log combined
- 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+
  
 + # 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> </code>
 +
 +Et les vhosts par site (à adapter donc au site, prendre les morceaux utiles) : 
 +<code txt /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 /app /var/www/html
 + DocumentRoot /var/www/exemple.org
 + <Directory /var/www/exemple.org/ >
 + Options FollowSymLinks MultiViews
 + AllowOverride All
 + Require all granted
 + </Directory>
 +  
 +</VirtualHost>
 +</code>
 +Ne pas oublier 
 +<code>sudo a2ensite common_config_443.conf
 +sudo a2ensite common_config_80.conf
 +sudo a2ensite exemple.org.conf
 +sudo apachectl -t
 +sudo apachectl graceful</code>
 +
 ==== Options propre au proxy ==== ==== Options propre au proxy ====
   a2enmod proxy proxy_http   a2enmod proxy proxy_http
 +<WRAP center round todo 60%>
 +Faut revoir, soit dans l'optique "le proxy demande les certifs", soit "le backend les gère". D'un point de vue anonymat c'est mieux si c'est chiffré tout du long mais d'un autre côté la femme du milieu, c'est moi...
  
 +Mise à jour : de toute façon c'est pas possible avec Apache. Et pas possible de faire un challenge dns automatisé avec bookmyname. Donc, on fera un transfert du certif post-hook. Mais je bidouille ça un autre jour.
 +</WRAP>
 +
 +Et la config sur la partie proxy : 
 +<code txt /etc/apache2/sites-available/exemple.org.conf>
 +<VirtualHost *:80>
 +    Use common_config exemple.org
 +    ServerAlias www.exemple.org
 +</VirtualHost>
 +
 +<VirtualHost *:443>
 +    Use common_config exemple.org
 +    ServerAlias www.exemple.org
 +    
 +    ProxyRequests Off
 +    ProxyPreserveHost On
 +    ProxyPass / http://192.168.20.IP_Interne_de_la_VM/
 +    ProxyPassReverse / http://192.168.20.IP_Interne_de_la_VM/
 + <Proxy *>
 + Require all granted
 + <Limit GET POST>
 + Require all granted
 + </Limit>
 + <Limit DELETE PUT>
 + Require all denied
 + </Limit>
 + </Proxy>
 +
 +
 +</VirtualHost>
 +
 +</code>
 ===== Variables utiles ===== ===== Variables utiles =====
   * ''${APACHE_LOG_DIR}'' : le chemin du dossier des logs   * ''${APACHE_LOG_DIR}'' : le chemin du dossier des logs
  
 +===== Certificat ssl =====
 +  sudo apt install certbot
 +
 +Éteindre apache avant ça (et le rallumer ensuite) :
 +  sudo certbot --pre-hook "service apache2 stop" --post-hook "service apache2 restart" certonly --standalone -d monsite.mondomaine.org 
 +
 +Renouvellement en éteignant/rallumant automatiquement la bête : 
 +  sudo certbot renew --pre-hook "service apache2 stop" --post-hook "service apache2 restart"
  
  
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