VirtualHosts des domaines enregistrés
Aller à la navigation
Aller à la recherche
Le wiki : Accueil - Administrateur - Bureautique - Développeur - Intégrateur - Marketing - Multimédia - Objets numériques - Jeux - We make Hack
VirtualHosts des domaines enregistrés
Les VirtualHosts suivants ont été ajoutés sur le serveur VPS
# Les hôtes virtuels sont placés par défaut dans le dossier /etc/apache2/sites-available/. cd /etc/apache2/sites-available/
# Les fichiers de configuration des VirtualHosts sont à donner à l'utiliser et au groupe root. # Les dossiers et fichiers du site à l'utilisateur et au groupe www-data.
# Activer mod rewrite et mod ssl : sudo a2enmod rewrite sudo a2enmod ssl sudo systemctl restart apache2
# Le script Bad Bot Blocker a également été installé pour limiter le passage des indésirables.
Optimiser les VirtualHost en supprimant les commentaires
# Sauvegarder une copie de la configuration existante par défaut : sudo cp domaine.ext.conf domaine.ext.conf.defaut
# Enlever les commentaires par défaut sur le fichier de production : sudo su sudo more domaine.ext.conf.defaut | sed '/ *#/d; /^ *$/d' > domaine.ext.conf exit
# Redémarrer Apache2 : sudo service apache2 restart
000-default.conf
Désactiver la configuration par défaut. sudo a2dissite 000-default.conf
Consulter la configuration par défaut : sudo nano 000-default.conf <VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
Supprimer le fichier 000-default.conf. cd /etc/apache2/sites-available sudo rm 000-default.conf
Recharger la configuration de Apache2
# Recharger la configuration de Apache2 pour appliquer la nouvelle configuration. sudo service apache2 restart # Privilégier cette commande pour redémarrer Apache2. sudo apache2ctl restart
# Recharger PHP FPM si nécessaire. sudo service php7.2-fpm restart
127.0.0.1.conf
Ce VirtualHost a pour objectif de loguer les requêtes effectuées par Apache en local. Cela permet de gérer les messages Internal dummy connection dans un fichier séparé. Normalement, ce message est uniquement affiché lors de connexions qui ne sont pas https. Par exemple, lors de l'utilisation du serveur FTP via le navigateur, un message est sûrement écrit. En fait, non, je ne vois pas d'écriture de message quand j'utilise le domaine redirigé qui mène aux fichiers du FTP. Source : https://www.visionduweb.eu/wiki/index.php?title=Gestion_des_logs#Internal_dummy_connection
# Créer le fichier de configuration pour le VirtualHost. sudo touch 127.0.0.1.conf sudo chown root:root 127.0.0.1.conf sudo chmod 644 127.0.0.1.conf
# Créer le fichier de log erreurs_local sudo touch /var/log/apache2/access_local.log sudo touch /var/log/apache2/erreurs_local.log sudo chown root:adm /var/log/apache2/access_local.log sudo chown root:adm /var/log/apache2/erreurs_local.log
# Ajouter la configuration suivante dans le fichier 127.0.0.1.conf sudo nano 127.0.0.1.conf
Capturer les requêtes locales
<VirtualHost 127.0.0.1:80 [::1]:80> # Capturer les requêtes locales : ErrorLog ${APACHE_LOG_DIR}/erreurs_local.log CustomLog ${APACHE_LOG_DIR}/access_local.log combined </VirtualHost>
# Activer le site et redémarrer Apache2 pour appliquer la nouvelle configuration. sudo a2ensite 127.0.0.1.conf sudo systemctl reload apache2
ethernium.fun
# Le site ethernium.fun possède son propre dossier sur le serveur Apache2. # /var/www/ethernium.fun
# Créer le fichier de configuration pour le VirtualHost. sudo touch ethernium.fun.conf sudo chown root:root ethernium.fun.conf sudo chmod 644 ethernium.fun.conf
# Activer le site et redémarrer Apache2 pour appliquer la nouvelle configuration. sudo a2ensite ethernium.fun.conf sudo service apache2 restart
# Ajouter la configuration suivante dans le fichier ethernium.fun.conf sudo nano ethernium.fun.conf
ethernium.fun écoute du port HTTP 80
# VirtualHost du domaine ethernium.fun ## ## ## Port 80 ## ## ## <VirtualHost ethernium.fun:80> ServerName ethernium.fun ServerAlias www.ethernium.fun # Ce vhost redirige de http vers https. 100% du trafic doit passer par https. # Les informations complémentaires sont inutiles. Pas de documentRoot, pas de logs. # La ligne suivante peut-être conservée dans le cas suivant : # Forcer le renouvellement ou recréer le certificat Let's Encrypt. # Renouveler avec : sudo certbot --force-renewal renew DocumentRoot /var/www/ethernium.fun <IfModule mod_rewrite.c> RewriteEngine on # Redirection de http vers https. RewriteCond %{HTTPS} off # Le dossier .well-know de certbot doit être exclu de la réécriture d'URL. RewriteRule (^|/)\.(?!well-known) - [F] RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent] </IfModule> </VirtualHost>
ethernium.fun écoute du port SSL 443
## ## ## Port 443 ## ## ## <VirtualHost ethernium.fun:443> ServerName ethernium.fun ServerAdmin mail@visionduweb.com DocumentRoot /var/www/ethernium.fun # Comportement par défaut du niveau d'alerte retourné. # LogLevel warn ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined # CSP - Politique de sécurité du contenu. <IfModule mod_headers.c> # Charger l'entête HSTS. Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" # Sécuriser les Cookies. # Interdire l’utilisation du cookie côté client avec l’instruction HttpOnly. # Interdire l’utilisation du cookie sans HTTPs avec le flag Secure. Header always edit Set-Cookie (.*) "$1;HttpOnly;Secure" # Protéger des failles X-XSS X-Frame X-Content. Header set X-XSS-Protection "1; mode=block" Header always set X-Frame-Options "SAMEORIGIN" Header set X-Content-Type-Options nosniff # Certaines adresses ne sont pas ajoutées comme étant autorisées, comme celle de https://static.doubleclick.net/instream/ad_status.js” appelée lors de la consultation de ma playlist de Youtube. Header set Access-Control-Allow-Origin: "default-src 'self' https://www.ethernium.fun" # Header set Content-Security-Policy: "default-src 'self' https://www.ethernium.fun; script-src 'self' 'unsafe-inline' https://www.ethernium.fun https://www.youtube.com https://s.ytimg.com https://www.google.com https://www.gstatic.com; object-src 'self' https://www.ethernium.fun; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; img-src 'self' https://www.ethernium.fun https://i.ytimg.com https://secure.gravatar.com; media-src 'self' https://www.ethernium.fun https://youtu.be; frame-src 'self' https://www.ethernium.fun https://www.youtube.com https://www.coingecko.com https://hackbbs.org:7777 https://www.spreaker.com https://widget.spreaker.com https://www.google.com; font-src 'self' 'unsafe-inline' https://www.ethernium.fun https://fonts.gstatic.com data:; connect-src 'self' https://www.ethernium.fun; frame-ancestors 'self'" # Le navigateur n'enverra pas l'en-tête du référent lors de la navigation de HTTPS vers HTTP. Header always set Referrer-Policy 'no-referrer-when-downgrade' # Identique à CSP mais au lieu de contrôler la sécurité c'est un contrôle des fonctionnalités. Header always set Feature-Policy "geolocation none;midi none;notifications none;push none;sync-xhr self;microphone none;camera none;magnetometer none;gyroscope none;speaker self;vibrate none;fullscreen self;payment none;" # Contrôle du cache navigateur. # Ne pas mettre en cache si ces fichiers le sont déjà. SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip # Désactiver le cache pour les scripts et fichiers dynamiques. <FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$"> Header unset Cache-Control </FilesMatch> # Mettre en cache les éléments suivants. <filesmatch "\.(gif|ico|jpe?g|png)$"> # Mise en cache de une année. Header set Cache-Control "max-age=33566400, public" # Économiser des requêtes de cookie sur les images. RequestHeader unset Cookie Header unset Cookie Header unset Set-Cookie </filesmatch> <filesmatch "\.(html|htm|css)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=604800, public" </filesmatch> <filesmatch "\.(js)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=604800, private" </filesmatch> <filesmatch "\.(gz|pdf|ttf)$"> # Mise en cache de une année. (Je n'ai pas le type gz présent dans les entêtes Expires.) Header set Cache-Control "max-age=33566400, public" </filesmatch> <filesmatch "\.(flv|swf)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=33566400, public" </filesmatch> </IfModule> # Charger le certificat Let's Encrypt. <IfModule mod_ssl.c> SSLEngine on SSLCertificateFile /etc/letsencrypt/live/ethernium.fun/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/ethernium.fun/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/ethernium.fun/chain.pem SSLProtocol all -SSLv2 -SSLv3 SSLHonorCipherOrder on SSLCompression off SSLOptions +StrictRequire SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA </IfModule> # La première règle évaluée par Apache2 consiste à limiter l'accès à toute l'arborescence du système Linux (/). <Directory /> Require all denied </Directory> <Directory /var/www/ethernium.fun> # Empêcher le suivi des liens symboliques. # Suivre les liens symboliques pour prendre en compte le script bad bot blocker. Options +FollowSymLinks # Protéger l'accès aux répertoires. Options -Indexes # Désactiver Inclusions Côté Serveur - Server Side Includes - SSI. Options -Includes # Permet la prise en compte du fichier .htaccess. AllowOverride All # Définir le fichier à appeler par défaut. DirectoryIndex index.php index.html ## Contrôle d'accès Apache 2.4 : # Toutes les requêtes sont autorisées. Je commente pour permettre au script Bad Bot Blocker de travailler. # Fonctionne depuis que j'ai renseigné DirectoryIndex. ## Require all granted # Require par IP permet uniquement l'accès au site depuis l'adresse IP fournie. # Require ip xx.xx.xx.xx # Inclure le script de liste noire anti bad bots : # https://github.com/mitchellkrogza/apache-ultimate-bad-bot-blocker/blob/master/Apache_2.4/README.md Include custom.d/globalblacklist.conf </Directory> # Autoriser uniquement mon IP locale pour l'accès à l'administration. <Directory /var/www/visionduweb.fr/administrator> Require all denied Require ip xx.xx.xxx.xx </Directory> # Protéger le fichier .htaccess : <files .htaccess> # Apache version 2.4 : Require all denied </files> # Toujours autoriser la consultation du fichier robots.txt : <Files robots.txt> Require all granted </Files> <IfModule mod_rewrite.c> RewriteEngine on # Redirection de https www vers https sans www RewriteCond %{HTTP_HOST} ^www\.(.+)$ RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L,NE,QSA] # Interdire l'affichage des types de fichiers suivants sur les sites non autorisés. # ethernium fun est autorisé. RewriteCond %{HTTP_REFERER} !^https://ethernium.fun/ [NC] # Dans le cas d'un entête réécrit, une URL de provenance vide sera autorisée. RewriteCond %{HTTP_REFERER} !^$ # Rediriger les fichiers vers une image de hotlinking. RewriteRule .*.(jpe?g|gif|bmp|png)$ https://www.visionduweb.fr/images/structure/no-hotlinking.png [L] </IfModule> # Désactiver Etag. FileETag none # Activer la compression. <IfModule mod_deflate.c> SetOutputFilter DEFLATE AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/vnd.ms-fontobject AddOutputFilterByType DEFLATE application/x-font AddOutputFilterByType DEFLATE application/x-font-opentype AddOutputFilterByType DEFLATE application/x-font-otf AddOutputFilterByType DEFLATE application/x-font-truetype AddOutputFilterByType DEFLATE application/x-font-ttf AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE font/opentype AddOutputFilterByType DEFLATE font/otf AddOutputFilterByType DEFLATE font/ttf AddOutputFilterByType DEFLATE image/svg+xml AddOutputFilterByType DEFLATE image/x-icon AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/javascript AddOutputFilterByType DEFLATE text/plain </IfModule> # DEFLATE pour les navigateurs non compatibles. BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html # Mise en cache du navigateur. <IfModule mod_expires.c> ExpiresActive On # Mise en cache par défaut du navigateur. ExpiresDefault "access plus 1 month" # Images. ExpiresByType image/gif "access plus 1 year" ExpiresByType image/jpg "access plus 1 year" ExpiresByType image/jpeg "access plus 1 year" ExpiresByType image/png "access plus 1 year" AddType image/svg+xml .svg ExpiresByType image/svg+xml "access plus 1 year" AddType image/x-icon .ico ExpiresByType image/ico "access plus 1 year" ExpiresByType image/icon "access plus 1 year" ExpiresByType image/x-icon "access plus 1 year" # Structure du site. ExpiresByType application/xhtml+xml "access plus 1 week" ExpiresByType text/html "access plus 1 week" ExpiresByType text/css "access plus 1 week" ExpiresByType application/javascript "access plus 1 week" ExpiresByType text/x-javascript "access plus 1 week" ExpiresByType application/javascript "access plus 1 week" ExpiresByType application/x-javascript "access plus 1 week" ExpiresByType application/x-shockwave-flash "access plus 30 days" # Documents. ExpiresByType application/pdf "access plus 1 year" # Polices. AddType application/vnd.ms-fontobject .eot AddType application/x-font-ttf .ttf AddType application/x-font-opentype .otf AddType application/x-font-woff .woff ExpiresByType application/vnd.ms-fontobject "access 1 year" ExpiresByType application/x-font-ttf "access 1 year" ExpiresByType application/x-font-opentype "access 1 year" ExpiresByType application/x-font-woff "access 1 year" </IfModule> # Limitations contre les DoS. KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 5 # Toujours refuser la lecture des fichiers de log. <Files *.log> Require all denied </Files> # Toujours autoriser la consultation de ce message en cas d'erreur 403. <Files 403-forbidden*> Require all granted </Files> # Erreur 403 - Forbidden. # Une adresse absolue charge l'url vers la nouvelle page. # Une adresse relative ne change pas l'url mais uniquement le contenu. ErrorDocument 403 https://ethernium.fun/403-forbidden.php </VirtualHost>
Recharger la configuration de Apache2
# Recharger la configuration de Apache2 pour appliquer la nouvelle configuration. sudo apache2ctl restart
ftp.visionduweb.fr
# VirtualHost pour le sous domaine pour rediriger vers le partage FTP de visionduweb.fr : ftp.visionduweb.fr
# Créer le fichier de configuration pour le VirtualHost. sudo touch ftp.visionduweb.fr.conf sudo chown root:root ftp.visionduweb.fr.conf sudo chmod 644 ftp.visionduweb.fr.conf
# Activer le site et redémarrer Apache2 pour appliquer la nouvelle configuration. sudo a2ensite ftp.visionduweb.fr.conf sudo apache2ctl restart
# Ajouter la configuration suivante dans le fichier ftp.visionduweb.fr.conf sudo nano ftp.visionduweb.fr.conf
ftp.visionduweb.fr écoute du port HTTP 80
<VirtualHost ftp.visionduweb.fr:80> ServerName ftp.visionduweb.fr ServerAdmin mail@visionduweb.com # Ce vhost redirige de http vers https. 100% du trafic doit passer par https. # Les informations complémentaires sont inutiles. Pas de documentRoot, pas de logs. # La ligne suivante peut-être conservée dans le cas suivant : # Forcer le renouvellement ou recréer le certificat Let's Encrypt. # Renouveler avec : sudo certbot --force-renewal renew DocumentRoot /var/www/ftp.visionduweb.fr/ftp/www <IfModule mod_rewrite.c> RewriteEngine on # Redirection de http vers https. RewriteCond %{HTTPS} off # Le dossier .well-know de certbot doit être exclu de la réécriture d'URL. RewriteRule (^|/)\.(?!well-known) - [F] RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent] </IfModule> </VirtualHost>
# Suite à l'activation de PHP-FPM, je ne peux pas redémarrer Apache2 suite à la commande invalide suivante : # Nov 23 01:40:25 vps178370 apachectl[17462]: AH00526: Syntax error on line 16 of /etc/apache2/sites-enabled/ftp.visionduweb.fr.conf: # Nov 23 01:40:25 vps178370 apachectl[17462]: Invalid command 'php_admin_value', perhaps misspelled or defined by a module not included in the server configura # Je met en commentaire la ligne : php_admin_value open_basedir "/tmp:/var/lib/php:/home/partageproftpd/www" # Apache2 redémarre correctement en utilisant maintenant PHP-FPM.
ftp.visionduweb.fr écoute du port SSL 443
## ## ## Port 443 ## ## ## <VirtualHost ftp.visionduweb.fr:443> ServerName ftp.visionduweb.fr ServerAdmin mail@visionduweb.com DocumentRoot /var/www/ftp.visionduweb.fr/ftp/www # Comportement par défaut du niveau d'alerte retourné. # LogLevel warn ErrorLog ${APACHE_LOG_DIR}/error_ftp.log CustomLog ${APACHE_LOG_DIR}/access_ftp.log combined # CSP - Politique de sécurité du contenu. <IfModule mod_headers.c> # Charger l'entête HSTS. Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" # Sécuriser les Cookies. # Interdire l’utilisation du cookie côté client avec l’instruction HttpOnly. # Interdire l’utilisation du cookie sans HTTPs avec le flag Secure. Header always edit Set-Cookie (.*) "$1;HttpOnly;Secure" # Protéger des failles X-XSS X-Frame X-Content. Header set X-XSS-Protection "1; mode=block" Header always set X-Frame-Options "SAMEORIGIN" Header set X-Content-Type-Options nosniff Header set Access-Control-Allow-Origin: "default-src 'self' https://ftp.visionduweb.fr" # La directive frame-ancestror permet de créer une exception pour le domaine gratuit du FTP et d'ignorer la commande Header always set X-Frame-Options "SAMEORIGIN". # Le mieux sera de gérer directement un sous domaine pour gérer son adresse FTP. Header set Content-Security-Policy: "frame-ancestors 'self' https://ftp.visionduweb.fr" # Header set Content-Security-Policy: "default-src 'self' https://www.green-nrj.com; script-src 'self' 'unsafe-inline' https://www.green-nrj.com; object-src 'self' https://www.green-nrj.com; style-src 'self' 'unsafe-inline'; img-src 'self' https://www.green-nrj.com; media-src 'self' https://www.green-nrj.com; frame-src 'self' https://www.green-nrj.com; font-src 'self' 'unsafe-inline' https://www.green-nrj.com; connect-src 'self' https://www.green-nrj.com; frame-ancestors 'self' http://visionduweb.user.fr" # Le navigateur n'enverra pas l'en-tête du référent lors de la navigation de HTTPS vers HTTP. Header always set Referrer-Policy 'no-referrer-when-downgrade' # Identique à CSP mais au lieu de contrôler la sécurité c'est un contrôle des fonctionnalités. # Header always set Feature-Policy "geolocation none;midi none;notifications none;push none;sync-xhr self;microphone none;camera none;magnetometer none;gyroscope none;speaker self;vibrate none;fullscreen self;payment none;" # Contrôle du cache navigateur. # Ne pas mettre en cache si ces fichiers le sont déjà. SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip # Désactiver le cache pour les scripts et fichiers dynamiques. <FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$"> Header unset Cache-Control </FilesMatch> # Mettre en cache les éléments suivants. <filesmatch "\.(gif|ico|jpe?g|png)$"> # Mise en cache de une année. Header set Cache-Control "max-age=33566400, public" # Économiser des requêtes de cookie sur les images. # Si je décommente, je peux me connecter mais pas naviguer. # https://forum.joomla.fr/forum/joomla-3-x/gestion-des-templates-design-css-et-bootstrap/2002540-boker-le-template-gratuit-de-globbersthemes ## RequestHeader unset Cookie Header unset Cookie Header unset Set-Cookie </filesmatch> <filesmatch "\.(html|htm|css)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=604800, public" </filesmatch> <filesmatch "\.(js)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=604800, private" </filesmatch> <filesmatch "\.(gz|pdf|ttf)$"> # Mise en cache de une année. (Je n'ai pas le type gz présent dans les entêtes Expires.) Header set Cache-Control "max-age=33566400, public" </filesmatch> <filesmatch "\.(flv|swf)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=33566400, public" </filesmatch> # Ne pas mettre en cache si ces fichiers le sont déjà. SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip </IfModule> # Charger le certificat Let's Encrypt. <IfModule mod_ssl.c> SSLEngine on SSLCertificateFile /etc/letsencrypt/live/ftp.visionduweb.fr/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/ftp.visionduweb.fr/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/ftp.visionduweb.fr/chain.pem SSLProtocol all -SSLv2 -SSLv3 SSLHonorCipherOrder on SSLCompression off SSLOptions +StrictRequire SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA </IfModule> # La première règle évaluée par Apache2 consiste à limiter l'accès à toute l'arborescence du système Linux (/). <Directory /> Require all denied </Directory> <Directory /var/www/ftp.visionduweb.fr/ftp/www> # Empêcher le suivi des liens symboliques. # Suivre les liens symboliques pour Bad Bot Blocker. Options +FollowSymLinks # Protéger l'accès aux répertoires. Options -Indexes # Désactiver Inclusions Côté Serveur - Server Side Includes - SSI. Options -Includes # Permet la prise en compte du fichier .htaccess. # AllowOverride All # Définir le fichier à appeler par défaut. DirectoryIndex index.php index.html ## Contrôle d'accès Apache 2.4 : # Toutes les requêtes sont autorisées. # Fonctionne depuis que j'ai renseigné DirectoryIndex. # Ne pas appliquer pour permettre Bad Bot Blocker. # Require all granted # Require par IP permet uniquement l'accès au site depuis l'adresse IP fournie. # Require ip xx.xx.xx.xx
# Inclure le script de liste noire anti bad bots : # https://github.com/mitchellkrogza/apache-ultimate-bad-bot-blocker/blob/master/Apache_2.4/README.md Include custom.d/globalblacklist.conf </Directory> # Protéger le fichier .htaccess : <files .htaccess> # Apache version 2.4 : Require all denied </files> # Toujours autoriser la consultation du fichier robots.txt : <Files robots.txt> Require all granted </Files> <IfModule mod_rewrite.c> RewriteEngine on # Interdire l'affichage des types de fichiers suivants sur les sites non autorisés. # Visionduweb fr est autorisé. # RewriteCond %{HTTP_REFERER} !^https://(.+.)?green-nrj.com/ [NC] # Dans le cas d'un entête réécrit, une URL de provenance vide sera autorisée. # RewriteCond %{HTTP_REFERER} !^$ # Rediriger les fichiers vers une image de hotlinking. # RewriteRule .*.(jpe?g|gif|bmp|png)$ /images/structure/no-hotlinking.png [L] </IfModule> # Désactiver Etag. FileETag none
# Activer la compression. <IfModule mod_deflate.c> SetOutputFilter DEFLATE AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/vnd.ms-fontobject AddOutputFilterByType DEFLATE application/x-font AddOutputFilterByType DEFLATE application/x-font-opentype AddOutputFilterByType DEFLATE application/x-font-otf AddOutputFilterByType DEFLATE application/x-font-truetype AddOutputFilterByType DEFLATE application/x-font-ttf AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE font/opentype AddOutputFilterByType DEFLATE font/otf AddOutputFilterByType DEFLATE font/ttf AddOutputFilterByType DEFLATE image/svg+xml AddOutputFilterByType DEFLATE image/x-icon AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/javascript AddOutputFilterByType DEFLATE text/plain </IfModule> # DEFLATE pour les navigateurs non compatibles. BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html # Mise en cache du navigateur. <IfModule mod_expires.c> ExpiresActive On # Mise en cache par défaut du navigateur. ExpiresDefault "access plus 1 month" # Images. ExpiresByType image/gif "access plus 1 year" ExpiresByType image/jpg "access plus 1 year" ExpiresByType image/jpeg "access plus 1 year" ExpiresByType image/png "access plus 1 year" AddType image/svg+xml .svg ExpiresByType image/svg+xml "access plus 1 year" AddType image/x-icon .ico ExpiresByType image/ico "access plus 1 year" ExpiresByType image/icon "access plus 1 year" ExpiresByType image/x-icon "access plus 1 year" # Structure du site. ExpiresByType application/xhtml+xml "access plus 1 week" ExpiresByType text/html "access plus 1 week" ExpiresByType text/css "access plus 1 week" ExpiresByType application/javascript "access plus 1 week" ExpiresByType text/x-javascript "access plus 1 week" ExpiresByType application/javascript "access plus 1 week" ExpiresByType application/x-javascript "access plus 1 week" ExpiresByType application/x-shockwave-flash "access plus 30 days" # Documents. ExpiresByType application/pdf "access plus 1 year" # Polices. AddType application/vnd.ms-fontobject .eot AddType application/x-font-ttf .ttf AddType application/x-font-opentype .otf AddType application/x-font-woff .woff ExpiresByType application/vnd.ms-fontobject "access 1 year" ExpiresByType application/x-font-ttf "access 1 year" ExpiresByType application/x-font-opentype "access 1 year" ExpiresByType application/x-font-woff "access 1 year" </IfModule> # Limitations contre les DoS. KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 5 # Toujours refuser la lecture des fichiers de log. <Files *.log> Require all denied </Files> # Toujours autoriser la consultation de ce message en cas d'erreur 403. <Files 403-forbidden*> Require all granted </Files> # Erreur 403 - Forbidden. # Une adresse absolue charge l'url vers la nouvelle page. # Une adresse relative ne change pas l'url mais uniquement le contenu. ErrorDocument 403 https://ftp.visionduweb.fr/403-forbidden.php </VirtualHost>
Recharger la configuration de Apache2
# Recharger la configuration de Apache2 pour appliquer la nouvelle configuration. sudo apache2ctl reload
AJOUTER gitignore.fr
# Une redirection visible est effectuée depuis OVH vers le sommaire de la page Git sur le wiki.
green-adn.com
# Créer le fichier de configuration pour le VirtualHost. sudo touch green-adn.com.conf sudo chown root:root green-adn.com.conf sudo chmod 644 green-adn.com.conf
# Activer le site et redémarrer Apache2 pour appliquer la nouvelle configuration. sudo a2ensite green-adn.com.conf sudo service apache2 restart
# Ajouter la configuration suivante dans le fichier green-adn.com sudo nano green-adn.com.conf
green-adn.com écoute du port HTTP 80
# VirtualHost du domaine green-adn.com ## ## ## Port 80 ## ## ## <VirtualHost green-adn.com:80> ServerName green-adn.com ServerAlias www.green-adn.com # Ce vhost redirige de http vers https. 100% du trafic doit passer par https. # Les informations complémentaires sont inutiles. Pas de documentRoot, pas de logs. # La ligne suivante peut-être conservée dans le cas suivant : # Forcer le renouvellement ou recréer le certificat Let's Encrypt. # Renouveler avec : sudo certbot --force-renewal renew DocumentRoot /var/www/html <IfModule mod_rewrite.c> RewriteEngine on # Redirection de http vers https. RewriteCond %{HTTPS} off # Le dossier .well-know de certbot doit être exclu de la réécriture d'URL. RewriteRule (^|/)\.(?!well-known) - [F] RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent] </IfModule> </VirtualHost>
green-adn.com écoute du port SSL 443
## ## ## Port 443 ## ## ## <VirtualHost green-adn.com:443> ServerName green-adn.com ServerAlias www.green-adn.com ServerAdmin mail@visionduweb.com DocumentRoot /var/www/html # Comportement par défaut du niveau d'alerte retourné. # LogLevel warn ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined # CSP - Politique de sécurité du contenu. <IfModule mod_headers.c> # Charger l'entête HSTS. Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" # Sécuriser les Cookies. # Interdire l’utilisation du cookie côté client avec l’instruction HttpOnly. # Interdire l’utilisation du cookie sans HTTPs avec le flag Secure. Header always edit Set-Cookie (.*) "$1;HttpOnly;Secure" # Protéger des failles X-XSS X-Frame X-Content. Header set X-XSS-Protection "1; mode=block" Header always set X-Frame-Options "SAMEORIGIN" Header set X-Content-Type-Options nosniff Header set Access-Control-Allow-Origin: "default-src 'self' https://www.green-adn.com" # La directive frame-ancestror permet de créer une exception pour le domaine gratuit du FTP et d'ignorer la commande Header always set X-Frame-Options "SAMEORIGIN". # Le mieux sera de gérer directement un sous domaine pour gérer son adresse FTP. # Header set Content-Security-Policy: "frame-ancestors 'self' http://visionduweb.user.fr" # Header set Content-Security-Policy: "default-src 'self' https://www.green-adn.com; script-src 'self' 'unsafe-inline' https://www.green-adn.com; object-src 'self' https://www.green-adn.com; style-src 'self' 'unsafe-inline'; img-src 'self' https://www.green-adn.com; media-src 'self' https://www.green-adn.com; frame-src 'self' https://www.green-adn.com; font-src 'self' 'unsafe-inline' https://www.green-adn.com; connect-src 'self' https://www.green-adn.com; frame-ancestors 'self' http://visionduweb.user.fr" # Le navigateur n'enverra pas l'en-tête du référent lors de la navigation de HTTPS vers HTTP. Header always set Referrer-Policy 'no-referrer-when-downgrade' # Identique à CSP mais au lieu de contrôler la sécurité c'est un contrôle des fonctionnalités. Header always set Feature-Policy "geolocation none;midi none;notifications none;push none;sync-xhr self;microphone none;camera none;magnetometer none;gyroscope none;speaker self;vibrate none;fullscreen self;payment none;" # Contrôle du cache navigateur. # Ne pas mettre en cache si ces fichiers le sont déjà. SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip # Désactiver le cache pour les scripts et fichiers dynamiques. <FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$"> Header unset Cache-Control </FilesMatch> # Mettre en cache les éléments suivants. <filesmatch "\.(gif|ico|jpe?g|png)$"> # Mise en cache de une année. Header set Cache-Control "max-age=33566400, public" # Économiser des requêtes de cookie sur les images. # Si je décommente, je peux me connecter mais pas naviguer. # https://forum.joomla.fr/forum/joomla-3-x/gestion-des-templates-design-css-et-bootstrap/2002540-boker-le-template-gratuit-de-globbersthemes ## RequestHeader unset Cookie Header unset Cookie Header unset Set-Cookie </filesmatch> <filesmatch "\.(html|htm|css)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=604800, public" </filesmatch> <filesmatch "\.(js)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=604800, private" </filesmatch> <filesmatch "\.(gz|pdf|ttf)$"> # Mise en cache de une année. (Je n'ai pas le type gz présent dans les entêtes Expires.) Header set Cache-Control "max-age=33566400, public" </filesmatch> <filesmatch "\.(flv|swf)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=33566400, public" </filesmatch> # Ne pas mettre en cache si ces fichiers le sont déjà. SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip </IfModule> # Charger le certificat Let's Encrypt. <IfModule mod_ssl.c> SSLEngine on SSLCertificateFile /etc/letsencrypt/live/green-adn.com/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/green-adn.com/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/green-adn.com/chain.pem SSLProtocol all -SSLv2 -SSLv3 SSLHonorCipherOrder on SSLCompression off SSLOptions +StrictRequire SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA </IfModule> # La première règle évaluée par Apache2 consiste à limiter l'accès à toute l'arborescence du système Linux (/). <Directory /> Require all denied </Directory> # Autoriser uniquement mon IP locale pour l'accès à l'administration. <Directory /var/www/green-adn.com/administrator> Require all denied Require ip xx.xx.xxx.xx </Directory> <Directory /var/www/html> # Empêcher le suivi des liens symboliques. Options -FollowSymLinks # Protéger l'accès aux répertoires. Options -Indexes # Désactiver Inclusions Côté Serveur - Server Side Includes - SSI. Options -Includes # Permet la prise en compte du fichier .htaccess. AllowOverride All # Définir le fichier à appeler par défaut. DirectoryIndex index.php index.html ## Contrôle d'accès Apache 2.2 : # Toutes les requêtes sont autorisées. # Fonctionne aussi sur Apache 2.4. # Order allow,deny # allow from all #### Require forward-dns (Retour de la commande host hostname) ## Contrôle d'accès Apache 2.4 : # Toutes les requêtes sont autorisées. # Fonctionne depuis que j'ai renseigné DirectoryIndex. Require all granted # Contrôle d'accès Apache 2.4 : # Require par IP permet uniquement l'accès au site depuis l'adresse IP fournie. # Require ip xx.xx.xx.xx
# Inclure le script de liste noire anti bad bots : # https://github.com/mitchellkrogza/apache-ultimate-bad-bot-blocker/blob/master/Apache_2.4/README.md Include custom.d/globalblacklist.conf </Directory> # Protéger le fichier .htaccess : <files .htaccess> # Apache version 2.4 : Require all denied </files> # Toujours autoriser la consultation du fichier robots.txt : <Files robots.txt> Require all granted </Files> <IfModule mod_rewrite.c> RewriteEngine on # Redirection de https non-www vers https www RewriteCond %{SERVER_NAME} !^www\.(.*)$ [NC] RewriteRule ^ https://www.%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent] # Interdire l'affichage des types de fichiers suivants sur les sites non autorisés. # Visionduweb fr est autorisé. # RewriteCond %{HTTP_REFERER} !^https://(.+.)?green-adn.com/ [NC] # Dans le cas d'un entête réécrit, une URL de provenance vide sera autorisée. # RewriteCond %{HTTP_REFERER} !^$ # Rediriger les fichiers vers une image de hotlinking. # RewriteRule .*.(jpe?g|gif|bmp|png)$ /images/structure/no-hotlinking.png [L] </IfModule> # Désactiver Etag. FileETag none
# Activer la compression. <IfModule mod_deflate.c> SetOutputFilter DEFLATE AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/vnd.ms-fontobject AddOutputFilterByType DEFLATE application/x-font AddOutputFilterByType DEFLATE application/x-font-opentype AddOutputFilterByType DEFLATE application/x-font-otf AddOutputFilterByType DEFLATE application/x-font-truetype AddOutputFilterByType DEFLATE application/x-font-ttf AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE font/opentype AddOutputFilterByType DEFLATE font/otf AddOutputFilterByType DEFLATE font/ttf AddOutputFilterByType DEFLATE image/svg+xml AddOutputFilterByType DEFLATE image/x-icon AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/javascript AddOutputFilterByType DEFLATE text/plain </IfModule> # DEFLATE pour les navigateurs non compatibles. BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html # Mise en cache du navigateur. <IfModule mod_expires.c> ExpiresActive On # Mise en cache par défaut du navigateur. ExpiresDefault "access plus 1 month" # Images. ExpiresByType image/gif "access plus 1 year" ExpiresByType image/jpg "access plus 1 year" ExpiresByType image/jpeg "access plus 1 year" ExpiresByType image/png "access plus 1 year" AddType image/svg+xml .svg ExpiresByType image/svg+xml "access plus 1 year" AddType image/x-icon .ico ExpiresByType image/ico "access plus 1 year" ExpiresByType image/icon "access plus 1 year" ExpiresByType image/x-icon "access plus 1 year" # Structure du site. ExpiresByType application/xhtml+xml "access plus 1 week" ExpiresByType text/html "access plus 1 week" ExpiresByType text/css "access plus 1 week" ExpiresByType application/javascript "access plus 1 week" ExpiresByType text/x-javascript "access plus 1 week" ExpiresByType application/javascript "access plus 1 week" ExpiresByType application/x-javascript "access plus 1 week" ExpiresByType application/x-shockwave-flash "access plus 30 days" # Documents. ExpiresByType application/pdf "access plus 1 year" # Polices. AddType application/vnd.ms-fontobject .eot AddType application/x-font-ttf .ttf AddType application/x-font-opentype .otf AddType application/x-font-woff .woff ExpiresByType application/vnd.ms-fontobject "access 1 year" ExpiresByType application/x-font-ttf "access 1 year" ExpiresByType application/x-font-opentype "access 1 year" ExpiresByType application/x-font-woff "access 1 year" </IfModule> # Limitations contre les DoS. KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 5 # Toujours refuser la lecture des fichiers de log. <Files *.log> Require all denied </Files> # Toujours autoriser la consultation de ce message en cas d'erreur 403. <Files 403-forbidden*> Require all granted </Files> # Erreur 403 - Forbidden. # Une adresse absolue charge l'url vers la nouvelle page. # Une adresse relative ne change pas l'url mais uniquement le contenu. ErrorDocument 403 https://www.green-adn.com/403-forbidden.php </VirtualHost>
Recharger la configuration de Apache2
# Recharger la configuration de Apache2 pour appliquer la nouvelle configuration. sudo apache2ctl restart
green-adn.fr
# Créer le fichier de configuration pour le VirtualHost. sudo touch green-adn.fr.conf sudo chown root:root green-adn.fr.conf sudo chmod 644 green-adn.fr.conf
# Activer le site et redémarrer Apache2 pour appliquer la nouvelle configuration. sudo a2ensite green-adn.fr.conf sudo service apache2 restart
# Ajouter la configuration suivante dans le fichier green-adn.fr sudo nano green-adn.fr.conf
green-adn.fr écoute du port HTTP 80
# VirtualHost du domaine green-adn.fr ## ## ## Port 80 ## ## ## <VirtualHost green-adn.fr:80> ServerName green-adn.fr ServerAlias www.green-adn.fr # Ce vhost redirige de http vers https. 100% du trafic doit passer par https. # Les informations complémentaires sont inutiles. Pas de documentRoot, pas de logs. # La ligne suivante peut-être conservée dans le cas suivant : # Forcer le renouvellement ou recréer le certificat Let's Encrypt. # Renouveler avec : sudo certbot --force-renewal renew DocumentRoot /var/www/html <IfModule mod_rewrite.c> RewriteEngine on # Redirection de http vers https. RewriteCond %{HTTPS} off # Le dossier .well-know de certbot doit être exclu de la réécriture d'URL. RewriteRule (^|/)\.(?!well-known) - [F] RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent] </IfModule> </VirtualHost>
green-adn.fr écoute du port SSL 443
## ## ## Port 443 ## ## ## <VirtualHost green-adn.fr:443> ServerName green-adn.fr ServerAlias www.green-adn.fr ServerAdmin mail@visionduweb.com DocumentRoot /var/www/html # Comportement par défaut du niveau d'alerte retourné. # LogLevel warn ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined # CSP - Politique de sécurité du contenu. <IfModule mod_headers.c> # Charger l'entête HSTS. Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" # Sécuriser les Cookies. # Interdire l’utilisation du cookie côté client avec l’instruction HttpOnly. # Interdire l’utilisation du cookie sans HTTPs avec le flag Secure. Header always edit Set-Cookie (.*) "$1;HttpOnly;Secure" # Protéger des failles X-XSS X-Frame X-Content. Header set X-XSS-Protection "1; mode=block" Header always set X-Frame-Options "SAMEORIGIN" Header set X-Content-Type-Options nosniff Header set Access-Control-Allow-Origin: "default-src 'self' https://www.green-adn.fr" # La directive frame-ancestror permet de créer une exception pour le domaine gratuit du FTP et d'ignorer la commande Header always set X-Frame-Options "SAMEORIGIN". # Le mieux sera de gérer directement un sous domaine pour gérer son adresse FTP. # Header set Content-Security-Policy: "frame-ancestors 'self' http://visionduweb.user.fr" # Header set Content-Security-Policy: "default-src 'self' https://www.green-adn.fr; script-src 'self' 'unsafe-inline' https://www.green-adn.fr; object-src 'self' https://www.green-adn.fr; style-src 'self' 'unsafe-inline'; img-src 'self' https://www.green-adn.fr; media-src 'self' https://www.green-adn.fr; frame-src 'self' https://www.green-adn.fr; font-src 'self' 'unsafe-inline' https://www.green-adn.fr; connect-src 'self' https://www.green-adn.fr; frame-ancestors 'self' http://visionduweb.user.fr" # Le navigateur n'enverra pas l'en-tête du référent lors de la navigation de HTTPS vers HTTP. Header always set Referrer-Policy 'no-referrer-when-downgrade' # Identique à CSP mais au lieu de contrôler la sécurité c'est un contrôle des fonctionnalités. Header always set Feature-Policy "geolocation none;midi none;notifications none;push none;sync-xhr self;microphone none;camera none;magnetometer none;gyroscope none;speaker self;vibrate none;fullscreen self;payment none;" # Contrôle du cache navigateur. # Ne pas mettre en cache si ces fichiers le sont déjà. SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip # Désactiver le cache pour les scripts et fichiers dynamiques. <FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$"> Header unset Cache-Control </FilesMatch> # Mettre en cache les éléments suivants. <filesmatch "\.(gif|ico|jpe?g|png)$"> # Mise en cache de une année. Header set Cache-Control "max-age=33566400, public" # Économiser des requêtes de cookie sur les images. # Si je décommente, je peux me connecter mais pas naviguer. # https://forum.joomla.fr/forum/joomla-3-x/gestion-des-templates-design-css-et-bootstrap/2002540-boker-le-template-gratuit-de-globbersthemes ## RequestHeader unset Cookie Header unset Cookie Header unset Set-Cookie </filesmatch> <filesmatch "\.(html|htm|css)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=604800, public" </filesmatch> <filesmatch "\.(js)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=604800, private" </filesmatch> <filesmatch "\.(gz|pdf|ttf)$"> # Mise en cache de une année. (Je n'ai pas le type gz présent dans les entêtes Expires.) Header set Cache-Control "max-age=33566400, public" </filesmatch> <filesmatch "\.(flv|swf)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=33566400, public" </filesmatch> # Ne pas mettre en cache si ces fichiers le sont déjà. SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip </IfModule> # Charger le certificat Let's Encrypt. <IfModule mod_ssl.c> SSLEngine on SSLCertificateFile /etc/letsencrypt/live/green-adn.fr/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/green-adn.fr/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/green-adn.fr/chain.pem SSLProtocol all -SSLv2 -SSLv3 SSLHonorCipherOrder on SSLCompression off SSLOptions +StrictRequire SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA </IfModule> # La première règle évaluée par Apache2 consiste à limiter l'accès à toute l'arborescence du système Linux (/). <Directory /> Require all denied </Directory> # Autoriser uniquement mon IP locale pour l'accès à l'administration. <Directory /var/www/green-adn.fr/administrator> Require all denied Require ip xx.xx.xxx.xx </Directory> <Directory /var/www/html> # Empêcher le suivi des liens symboliques. Options -FollowSymLinks # Protéger l'accès aux répertoires. Options -Indexes # Désactiver Inclusions Côté Serveur - Server Side Includes - SSI. Options -Includes # Permet la prise en compte du fichier .htaccess. AllowOverride All # Définir le fichier à appeler par défaut. DirectoryIndex index.php index.html ## Contrôle d'accès Apache 2.2 : # Toutes les requêtes sont autorisées. # Fonctionne aussi sur Apache 2.4. # Order allow,deny # allow from all #### Require forward-dns (Retour de la commande host hostname) ## Contrôle d'accès Apache 2.4 : # Toutes les requêtes sont autorisées. # Fonctionne depuis que j'ai renseigné DirectoryIndex. Require all granted # Contrôle d'accès Apache 2.4 : # Require par IP permet uniquement l'accès au site depuis l'adresse IP fournie. # Require ip xx.xx.xx.xx
# Inclure le script de liste noire anti bad bots : # https://github.com/mitchellkrogza/apache-ultimate-bad-bot-blocker/blob/master/Apache_2.4/README.md Include custom.d/globalblacklist.conf </Directory> # Protéger le fichier .htaccess : <files .htaccess> # Apache version 2.4 : Require all denied </files> # Toujours autoriser la consultation du fichier robots.txt : <Files robots.txt> Require all granted </Files> <IfModule mod_rewrite.c> RewriteEngine on # Redirection de https non-www vers https www RewriteCond %{SERVER_NAME} !^www\.(.*)$ [NC] RewriteRule ^ https://www.%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent] # Interdire l'affichage des types de fichiers suivants sur les sites non autorisés. # Visionduweb fr est autorisé. # RewriteCond %{HTTP_REFERER} !^https://(.+.)?green-adn.fr/ [NC] # Dans le cas d'un entête réécrit, une URL de provenance vide sera autorisée. # RewriteCond %{HTTP_REFERER} !^$ # Rediriger les fichiers vers une image de hotlinking. # RewriteRule .*.(jpe?g|gif|bmp|png)$ /images/structure/no-hotlinking.png [L] </IfModule> # Désactiver Etag. FileETag none
# Activer la compression. <IfModule mod_deflate.c> SetOutputFilter DEFLATE AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/vnd.ms-fontobject AddOutputFilterByType DEFLATE application/x-font AddOutputFilterByType DEFLATE application/x-font-opentype AddOutputFilterByType DEFLATE application/x-font-otf AddOutputFilterByType DEFLATE application/x-font-truetype AddOutputFilterByType DEFLATE application/x-font-ttf AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE font/opentype AddOutputFilterByType DEFLATE font/otf AddOutputFilterByType DEFLATE font/ttf AddOutputFilterByType DEFLATE image/svg+xml AddOutputFilterByType DEFLATE image/x-icon AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/javascript AddOutputFilterByType DEFLATE text/plain </IfModule> # DEFLATE pour les navigateurs non compatibles. BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html # Mise en cache du navigateur. <IfModule mod_expires.c> ExpiresActive On # Mise en cache par défaut du navigateur. ExpiresDefault "access plus 1 month" # Images. ExpiresByType image/gif "access plus 1 year" ExpiresByType image/jpg "access plus 1 year" ExpiresByType image/jpeg "access plus 1 year" ExpiresByType image/png "access plus 1 year" AddType image/svg+xml .svg ExpiresByType image/svg+xml "access plus 1 year" AddType image/x-icon .ico ExpiresByType image/ico "access plus 1 year" ExpiresByType image/icon "access plus 1 year" ExpiresByType image/x-icon "access plus 1 year" # Structure du site. ExpiresByType application/xhtml+xml "access plus 1 week" ExpiresByType text/html "access plus 1 week" ExpiresByType text/css "access plus 1 week" ExpiresByType application/javascript "access plus 1 week" ExpiresByType text/x-javascript "access plus 1 week" ExpiresByType application/javascript "access plus 1 week" ExpiresByType application/x-javascript "access plus 1 week" ExpiresByType application/x-shockwave-flash "access plus 30 days" # Documents. ExpiresByType application/pdf "access plus 1 year" # Polices. AddType application/vnd.ms-fontobject .eot AddType application/x-font-ttf .ttf AddType application/x-font-opentype .otf AddType application/x-font-woff .woff ExpiresByType application/vnd.ms-fontobject "access 1 year" ExpiresByType application/x-font-ttf "access 1 year" ExpiresByType application/x-font-opentype "access 1 year" ExpiresByType application/x-font-woff "access 1 year" </IfModule> # Limitations contre les DoS. KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 5 # Toujours refuser la lecture des fichiers de log. <Files *.log> Require all denied </Files> # Toujours autoriser la consultation de ce message en cas d'erreur 403. <Files 403-forbidden*> Require all granted </Files> # Erreur 403 - Forbidden. # Une adresse absolue charge l'url vers la nouvelle page. # Une adresse relative ne change pas l'url mais uniquement le contenu. ErrorDocument 403 https://www.green-adn.fr/403-forbidden.php </VirtualHost>
Recharger la configuration de Apache2
# Recharger la configuration de Apache2 pour appliquer la nouvelle configuration. sudo apache2ctl restart
green-nrj.com
# Créer le fichier de configuration pour le VirtualHost. sudo touch green-nrj.com.conf sudo chown root:root green-nrj.com.conf sudo chmod 644 green-nrj.com.conf
# Activer le site et redémarrer Apache2 pour appliquer la nouvelle configuration. sudo a2ensite green-nrj.com.conf sudo service apache2 restart
# Ajouter la configuration suivante dans le fichier green-nrj.com.conf sudo nano green-nrj.com.conf
green-nrj.com écoute du port HTTP 80
### curl -I https://www.green-nrj.com ### HTTP/1.1 503 Service Unavailable ### Pourtant la page d'accueil de Joomla (Site hors ligne) est accessible. ### Si je passe le site en ligne, cette erreur disparaît. ### curl -I https://www.green-nrj.com ### HTTP/1.1 200 OK ### Résolu.
# VirtualHost du domaine green-nrj.com ## ## ## Port 80 ## ## ## <VirtualHost green-nrj.com:80> ServerName green-nrj.com ServerAlias www.green-nrj.com # Ce vhost redirige de http vers https. 100% du trafic doit passer par https. # Les informations complémentaires sont inutiles. Pas de documentRoot, pas de logs. # La ligne suivante peut-être conservée dans le cas suivant : # Forcer le renouvellement ou recréer le certificat Let's Encrypt. # Renouveler avec : sudo certbot --force-renewal renew DocumentRoot /var/www/html/ <IfModule mod_rewrite.c> RewriteEngine on # Redirection de http vers https. RewriteCond %{HTTPS} off # Le dossier .well-know de certbot doit être exclu de la réécriture d'URL. RewriteRule (^|/)\.(?!well-known) - [F] RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent] </IfModule> </VirtualHost>
green-nrj.com écoute du port SSL 443
## ## ## Port 443 ## ## ## <VirtualHost green-nrj.com:443> ServerName green-nrj.com ServerAlias www.green-nrj.com ServerAdmin mail@visionduweb.com DocumentRoot /var/www/html # Comportement par défaut du niveau d'alerte retourné. # LogLevel warn ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined # CSP - Politique de sécurité du contenu. <IfModule mod_headers.c> # Charger l'entête HSTS. Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" # Sécuriser les Cookies. # Interdire l’utilisation du cookie côté client avec l’instruction HttpOnly. # Interdire l’utilisation du cookie sans HTTPs avec le flag Secure. Header always edit Set-Cookie (.*) "$1;HttpOnly;Secure" # Protéger des failles X-XSS X-Frame X-Content. Header set X-XSS-Protection "1; mode=block" Header always set X-Frame-Options "SAMEORIGIN" Header set X-Content-Type-Options nosniff Header set Access-Control-Allow-Origin: "default-src 'self' https://www.green-nrj.com" # La directive frame-ancestror permet de créer une exception pour le domaine gratuit du FTP et d'ignorer la commande Header always set X-Frame-Options "SAMEORIGIN". # Le mieux sera de gérer directement un sous domaine pour gérer son adresse FTP. Header set Content-Security-Policy: "frame-ancestors 'self' http://visionduweb.user.fr" # Header set Content-Security-Policy: "default-src 'self' https://www.green-nrj.com; script-src 'self' 'unsafe-inline' https://www.green-nrj.com; object-src 'self' https://www.green-nrj.com; style-src 'self' 'unsafe-inline'; img-src 'self' https://www.green-nrj.com; media-src 'self' https://www.green-nrj.com; frame-src 'self' https://www.green-nrj.com; font-src 'self' 'unsafe-inline' https://www.green-nrj.com; connect-src 'self' https://www.green-nrj.com; frame-ancestors 'self' http://visionduweb.user.fr" # Le navigateur n'enverra pas l'en-tête du référent lors de la navigation de HTTPS vers HTTP. Header always set Referrer-Policy 'no-referrer-when-downgrade' # Identique à CSP mais au lieu de contrôler la sécurité c'est un contrôle des fonctionnalités. Header always set Feature-Policy "geolocation none;midi none;notifications none;push none;sync-xhr self;microphone none;camera none;magnetometer none;gyroscope none;speaker self;vibrate none;fullscreen self;payment none;" # Contrôle du cache navigateur. # Ne pas mettre en cache si ces fichiers le sont déjà. SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip # Désactiver le cache pour les scripts et fichiers dynamiques. <FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$"> Header unset Cache-Control </FilesMatch> # Mettre en cache les éléments suivants. <filesmatch "\.(gif|ico|jpe?g|png)$"> # Mise en cache de une année. Header set Cache-Control "max-age=33566400, public" # Économiser des requêtes de cookie sur les images. # Si je décommente, je peux me connecter mais pas naviguer. # https://forum.joomla.fr/forum/joomla-3-x/gestion-des-templates-design-css-et-bootstrap/2002540-boker-le-template-gratuit-de-globbersthemes ## RequestHeader unset Cookie Header unset Cookie Header unset Set-Cookie </filesmatch> <filesmatch "\.(html|htm|css)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=604800, public" </filesmatch> <filesmatch "\.(js)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=604800, private" </filesmatch> <filesmatch "\.(gz|pdf|ttf)$"> # Mise en cache de une année. (Je n'ai pas le type gz présent dans les entêtes Expires.) Header set Cache-Control "max-age=33566400, public" </filesmatch> <filesmatch "\.(flv|swf)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=33566400, public" </filesmatch> # Ne pas mettre en cache si ces fichiers le sont déjà. SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip </IfModule> # Charger le certificat Let's Encrypt. <IfModule mod_ssl.c> SSLEngine on SSLCertificateFile /etc/letsencrypt/live/unis-pour-la-planete.com/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/unis-pour-la-planete.com/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/unis-pour-la-planete.com/chain.pem SSLProtocol all -SSLv2 -SSLv3 SSLHonorCipherOrder on SSLCompression off SSLOptions +StrictRequire SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA </IfModule> # La première règle évaluée par Apache2 consiste à limiter l'accès à toute l'arborescence du système Linux (/). <Directory /> Require all denied </Directory> # Autoriser uniquement mon IP locale pour l'accès à l'administration. <Directory /var/www/visionduweb.fr/administrator> Require all denied Require ip xx.xx.xxx.xx </Directory> <Directory /var/www/html> # Empêcher le suivi des liens symboliques. Options -FollowSymLinks # Protéger l'accès aux répertoires. Options -Indexes # Désactiver Inclusions Côté Serveur - Server Side Includes - SSI. Options -Includes # Permet la prise en compte du fichier .htaccess. AllowOverride All # Définir le fichier à appeler par défaut. DirectoryIndex index.php index.html ## Contrôle d'accès Apache 2.2 : # Toutes les requêtes sont autorisées. # Fonctionne aussi sur Apache 2.4. # Order allow,deny # allow from all #### Require forward-dns (Retour de la commande host hostname) ## Contrôle d'accès Apache 2.4 : # Toutes les requêtes sont autorisées. # Fonctionne depuis que j'ai renseigné DirectoryIndex. Require all granted # Contrôle d'accès Apache 2.4 : # Require par IP permet uniquement l'accès au site depuis l'adresse IP fournie. # Require ip xx.xx.xx.xx
# Inclure le script de liste noire anti bad bots : # https://github.com/mitchellkrogza/apache-ultimate-bad-bot-blocker/blob/master/Apache_2.4/README.md Include custom.d/globalblacklist.conf </Directory> # Protéger le fichier .htaccess : <files .htaccess> # Apache version 2.4 : Require all denied </files> # Toujours autoriser la consultation du fichier robots.txt : <Files robots.txt> Require all granted </Files> <IfModule mod_rewrite.c> RewriteEngine on # Redirection de https non-www vers https www RewriteCond %{SERVER_NAME} !^www\.(.*)$ [NC] RewriteRule ^ https://www.%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent] # Interdire l'affichage des types de fichiers suivants sur les sites non autorisés. # Visionduweb fr est autorisé. # RewriteCond %{HTTP_REFERER} !^https://(.+.)?green-nrj.com/ [NC] # Dans le cas d'un entête réécrit, une URL de provenance vide sera autorisée. # RewriteCond %{HTTP_REFERER} !^$ # Rediriger les fichiers vers une image de hotlinking. # RewriteRule .*.(jpe?g|gif|bmp|png)$ /images/structure/no-hotlinking.png [L] </IfModule> # Désactiver Etag. FileETag none
# Activer la compression. <IfModule mod_deflate.c> SetOutputFilter DEFLATE AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/vnd.ms-fontobject AddOutputFilterByType DEFLATE application/x-font AddOutputFilterByType DEFLATE application/x-font-opentype AddOutputFilterByType DEFLATE application/x-font-otf AddOutputFilterByType DEFLATE application/x-font-truetype AddOutputFilterByType DEFLATE application/x-font-ttf AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE font/opentype AddOutputFilterByType DEFLATE font/otf AddOutputFilterByType DEFLATE font/ttf AddOutputFilterByType DEFLATE image/svg+xml AddOutputFilterByType DEFLATE image/x-icon AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/javascript AddOutputFilterByType DEFLATE text/plain </IfModule> # DEFLATE pour les navigateurs non compatibles. BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html # Mise en cache du navigateur. <IfModule mod_expires.c> ExpiresActive On # Mise en cache par défaut du navigateur. ExpiresDefault "access plus 1 month" # Images. ExpiresByType image/gif "access plus 1 year" ExpiresByType image/jpg "access plus 1 year" ExpiresByType image/jpeg "access plus 1 year" ExpiresByType image/png "access plus 1 year" AddType image/svg+xml .svg ExpiresByType image/svg+xml "access plus 1 year" AddType image/x-icon .ico ExpiresByType image/ico "access plus 1 year" ExpiresByType image/icon "access plus 1 year" ExpiresByType image/x-icon "access plus 1 year" # Structure du site. ExpiresByType application/xhtml+xml "access plus 1 week" ExpiresByType text/html "access plus 1 week" ExpiresByType text/css "access plus 1 week" ExpiresByType application/javascript "access plus 1 week" ExpiresByType text/x-javascript "access plus 1 week" ExpiresByType application/javascript "access plus 1 week" ExpiresByType application/x-javascript "access plus 1 week" ExpiresByType application/x-shockwave-flash "access plus 30 days" # Documents. ExpiresByType application/pdf "access plus 1 year" # Polices. AddType application/vnd.ms-fontobject .eot AddType application/x-font-ttf .ttf AddType application/x-font-opentype .otf AddType application/x-font-woff .woff ExpiresByType application/vnd.ms-fontobject "access 1 year" ExpiresByType application/x-font-ttf "access 1 year" ExpiresByType application/x-font-opentype "access 1 year" ExpiresByType application/x-font-woff "access 1 year" </IfModule> # Limitations contre les DoS. KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 5 # Toujours refuser la lecture des fichiers de log. <Files *.log> Require all denied </Files> # Toujours autoriser la consultation de ce message en cas d'erreur 403. <Files 403-forbidden*> Require all granted </Files> # Erreur 403 - Forbidden. # Une adresse absolue charge l'url vers la nouvelle page. # Une adresse relative ne change pas l'url mais uniquement le contenu. ErrorDocument 403 https://www.green-nrj.com/403-forbidden.php </VirtualHost>
Configuration de l'écoute du port TCP 3000
# Ne fonctionne pas. A voir par la suite.
# Aucun ajout de configuration. # Le port 3000 est accessible, sans passer par une connexion sécurisée https. # http://green-nrj.com:3000 # C'est au niveau de DemocracyOS (Installation avec Docker.) qu'il faudra chercher à configurer le SSL et une éventuelle redirection.
Recharger la configuration de Apache2
# Recharger la configuration de Apache2 pour appliquer la nouvelle configuration. sudo apache2ctl restart
privatebin.visionduweb.fr
# Le site privatebin.visionduweb.fr possède son propre dossier sur le serveur Apache2. # /var/www/privatebin.visionduweb.fr
# Créer le fichier de configuration pour le VirtualHost. sudo touch privatebin.visionduweb.fr.conf sudo chown root:root privatebin.visionduweb.fr.conf sudo chmod 644 privatebin.visionduweb.fr.conf # Créer les fichiers de log : sudo su touch /var/log/apache2/privatebin_erreurs.log touch /var/log/apache2/privatebin_access.log chown root:adm /var/log/apache2/privatebin_erreurs.log chown root:adm /var/log/apache2/privatebin_access.log exit # Activer le site et redémarrer Apache2 pour appliquer la nouvelle configuration. sudo a2ensite privatebin.visionduweb.fr.conf sudo service apache2 restart
# Ajouter la configuration suivante dans le fichier privatebin.visionduweb.fr.conf sudo nano privatebin.visionduweb.fr.conf
privatebin.visionduweb.fr écoute du port HTTP 80
# VirtualHost du domaine privatebin.visionduweb.fr ## ## ## Port 80 ## ## ## <VirtualHost privatebin.visionduweb.fr:80> ServerName privatebin.visionduweb.fr # Ce vhost redirige de http vers https. 100% du trafic doit passer par https. # Les informations complémentaires sont inutiles. Pas de documentRoot, pas de logs. # La ligne suivante peut-être conservée dans le cas suivant : # Forcer le renouvellement ou recréer le certificat Let's Encrypt. # Renouveler avec : sudo certbot --force-renewal renew DocumentRoot /var/www/privatebin.visionduweb.fr <IfModule mod_rewrite.c> RewriteEngine on # Redirection de http vers https. RewriteCond %{HTTPS} off # Le dossier .well-know de certbot doit être exclu de la réécriture d'URL. RewriteRule (^|/)\.(?!well-known) - [F] RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent] </IfModule> </VirtualHost>
privatebin.visionduweb.fr écoute du port SSL 443
## ## ## Port 443 ## ## ## <VirtualHost privatebin.visionduweb.fr:443> ServerName privatebin.visionduweb.fr ServerAdmin contacter@visionduweb.fr DocumentRoot /var/www/privatebin.visionduweb.fr # Définir la valeur open_basedir pour le wiki. ( A suivre. ) #SetEnv PHP_ADMIN_VALUE "open_basedir=/var/www/privatebin.visionduweb.fr/:/tmp/:/var/lib/php/sessions" #SetEnv PHP_ADMIN_VALUE "open_basedir=none" # Comportement par défaut du niveau d'alerte retourné. # LogLevel warn ErrorLog ${APACHE_LOG_DIR}/privatebin_erreurs.log CustomLog ${APACHE_LOG_DIR}/privatebin_access.log combined # CSP - Politique de sécurité du contenu. <IfModule mod_headers.c> # Charger l'entête HSTS. Header always set Strict-Transport-Security "max-age=63072000; preload" # Sécuriser les Cookies. # Interdire l’utilisation du cookie côté client avec l’instruction HttpOnly. # Interdire l’utilisation du cookie sans HTTPs avec le flag Secure. Header always edit Set-Cookie (.*) "$1;HttpOnly;Secure" # Protéger des failles X-XSS X-Frame X-Content. Header set X-XSS-Protection "1; mode=block" Header always set X-Frame-Options "SAMEORIGIN" Header set X-Content-Type-Options nosniff Header set Access-Control-Allow-Origin: "default-src 'self' https://privatebin.visionduweb.fr" Header set Content-Security-Policy: "default-src 'self' https://privatebin.visionduweb.fr; script-src 'self' 'unsafe-eval' 'unsafe-inline' https://privatebin.visionduweb.fr; object-src 'self' https://privatebin.visionduweb.fr; style-src 'self' 'unsafe-inline'; img-src 'self' https://privatebin.visionduweb.fr; media-src 'self' https://privatebin.visionduweb.fr; frame-src 'self' https://privatebin.visionduweb.fr; font-src 'self' 'unsafe-inline' https://privatebin.visionduweb.fr data:; connect-src 'self' https://privatebin.visionduweb.fr; frame-ancestors 'self'; upgrade-insecure-requests;" # Le navigateur n'enverra pas l'en-tête du référent lors de la navigation de HTTPS vers HTTP. Header always set Referrer-Policy 'no-referrer-when-downgrade' # Identique à CSP mais au lieu de contrôler la sécurité c'est un contrôle des fonctionnalités. Header always set Feature-Policy "geolocation none;midi none;notifications none;push none;sync-xhr self;microphone none;camera none;magnetometer none;gyroscope none;speaker self;vibrate none;fullscreen self;payment none;" # Contrôle du cache navigateur. # Ne pas mettre en cache si ces fichiers le sont déjà. SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip # Désactiver le cache pour les scripts et fichiers dynamiques. <FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$"> Header unset Cache-Control </FilesMatch> # Mettre en cache les éléments suivants. <filesmatch "\.(gif|ico|jpe?g|png)$"> # Mise en cache de une année. Header set Cache-Control "max-age=33566400, public" </filesmatch> <filesmatch "\.(html|htm|css)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=604800, public" </filesmatch> <filesmatch "\.(js)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=604800, private" </filesmatch> <filesmatch "\.(gz|pdf|ttf)$"> # Mise en cache de une année. (Je n'ai pas le type gz présent dans les entêtes Expires.) Header set Cache-Control "max-age=33566400, public" </filesmatch> <filesmatch "\.(flv|swf)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=33566400, public" </filesmatch> # Économiser les requêtes de cookies. # L'extension php n'est pas ajoutée, sinon, impossible de se connecter au site. <filesMatch "\.(ico|jpe?g|png|gif|svg|swf|gz|ttf|eot|woff|html|htm|css|js|pl|cgi|spl|scgi|fcgi)$"> RequestHeader unset Cookie Header unset Cookie Header unset Set-Cookie </filesMatch> </IfModule> # Charger le certificat Let's Encrypt. <IfModule mod_ssl.c> SSLEngine on SSLCertificateFile /etc/letsencrypt/live/privatebin.visionduweb.fr/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/privatebin.visionduweb.fr/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/privatebin.visionduweb.fr/chain.pem SSLProtocol all -SSLv2 -SSLv3 SSLHonorCipherOrder on SSLCompression off SSLOptions +StrictRequire SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA </IfModule> # La première règle évaluée par Apache2 consiste à limiter l'accès à toute l'arborescence du système Linux (/). <Directory /> Options None AllowOverride None Require all denied </Directory>
# Autoriser uniquement mon IP locale pour l'accès à l'administration. # <Directory /var/www/privatebin.visionduweb.fr/administrator> # Require all denied # Require ip xx.xx.xxx.xx # </Directory> # Ensuite, on relâche un minimum de possibilités en fonction des besoins du site. <Directory /var/www/privatebin.visionduweb.fr> # Empêcher le suivi des liens symboliques. # J'autorise le suivi des liens symboliques : # Permet l'inclusion de la liste noire anti bad bots blocker. # Depuis le fichier de configuration complémentaire. Options +FollowSymLinks # Protéger l'accès aux répertoires. Options -Indexes # Désactiver Inclusions Côté Serveur (Server Side Includes / SSI) Options -Includes # Permet la prise en compte du fichier .htaccess AllowOverride All # Définir le fichier à appeler par défaut. DirectoryIndex index.php index.html ## Contrôle d'accès Apache 2.4 : # Require forward-dns 19.252.11.80.in-addr.arpa domain name pointer lmontsouris-657-1-225-19.w80-11.abo.wanadoo.fr. ## Contrôle d'accès Apache 2.4 : # Toutes les requêtes sont autorisées. Est commenté pour prendre en compte le script anti bad bot blocker. # Fonctionne depuis que j'ai renseigné DirectoryIndex. ## Require all granted # Require par IP permet uniquement l'accès au site depuis l'adresse IP fournie. # Require ip xx.xx.xx.xx # Inclure le script de liste noire anti bad bots : # https://github.com/mitchellkrogza/apache-ultimate-bad-bot-blocker/blob/master/Apache_2.4/README.md # Include custom.d/globalblacklist.conf </Directory> # Protéger le fichier .htaccess : <files .htaccess> # Apache version 2.4 : Require all denied </files> # Sur le même principe le fichier configuration.php du CMS peut être protégé. # Interdire la lecture de certains fichiers : <files ~ "\.(log|bak|defaut)$"> Require all denied </files> # Toujours autoriser la consultation de ce message en cas d'erreur 403. <Files 403-forbidden.*> Require all granted </Files> # Toujours autoriser le favicon. <Files favicon.ico> Require all granted </Files> # Toujours autoriser la consultation du fichier robots.txt : <Files robots.txt> Require all granted </Files> # <IfModule mod_rewrite.c> # RewriteEngine on # Redirection de https www vers https sans www # RewriteCond %{HTTP_HOST} ^www\.(.+)$ # RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L,NE,QSA] # Interdire l'affichage des types de fichiers suivants sur les sites non autorisés. # Visionduweb fr est autorisé. # RewriteCond %{HTTP_REFERER} !^https://(.+.)?privatebin.visionduweb.fr/ [NC] # Dans le cas d'un entête réécrit, une URL de provenance vide sera autorisée. # RewriteCond %{HTTP_REFERER} !^$ # Rediriger les fichiers vers une image de hotlinking. # RewriteRule .*.(jpe?g|gif|bmp|png)$ /images/structure/no-hotlinking.png [L] # </IfModule> # Désactiver Etag. FileETag none # Activer la compression. <IfModule mod_deflate.c> SetOutputFilter DEFLATE AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/vnd.ms-fontobject AddOutputFilterByType DEFLATE application/x-font AddOutputFilterByType DEFLATE application/x-font-opentype AddOutputFilterByType DEFLATE application/x-font-otf AddOutputFilterByType DEFLATE application/x-font-truetype AddOutputFilterByType DEFLATE application/x-font-ttf AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE font/opentype AddOutputFilterByType DEFLATE font/otf AddOutputFilterByType DEFLATE font/ttf AddOutputFilterByType DEFLATE image/svg+xml AddOutputFilterByType DEFLATE image/x-icon AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/javascript AddOutputFilterByType DEFLATE text/plain </IfModule> # DEFLATE pour les navigateurs non compatibles. BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html # Mise en cache du navigateur. <IfModule mod_expires.c> ExpiresActive On # Mise en cache par défaut du navigateur. ExpiresDefault "access plus 1 month" # Images. ExpiresByType image/gif "access plus 1 year" ExpiresByType image/jpg "access plus 1 year" ExpiresByType image/jpeg "access plus 1 year" ExpiresByType image/png "access plus 1 year" AddType image/svg+xml .svg ExpiresByType image/svg+xml "access plus 1 year" AddType image/x-icon .ico ExpiresByType image/ico "access plus 1 year" ExpiresByType image/icon "access plus 1 year" ExpiresByType image/x-icon "access plus 1 year" # Structure du site. ExpiresByType application/xhtml+xml "access plus 1 week" ExpiresByType text/html "access plus 1 week" ExpiresByType text/css "access plus 1 week" ExpiresByType application/javascript "access plus 1 week" ExpiresByType text/x-javascript "access plus 1 week" ExpiresByType application/javascript "access plus 1 week" ExpiresByType application/x-javascript "access plus 1 week" ExpiresByType application/x-shockwave-flash "access plus 30 days" # Documents. ExpiresByType application/pdf "access plus 1 year" # Polices. AddType application/vnd.ms-fontobject .eot AddType application/x-font-ttf .ttf AddType application/x-font-opentype .otf AddType application/x-font-woff .woff ExpiresByType application/vnd.ms-fontobject "access 1 year" ExpiresByType application/x-font-ttf "access 1 year" ExpiresByType application/x-font-opentype "access 1 year" ExpiresByType application/x-font-woff "access 1 year" </IfModule> # Limitations contre les DoS. KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 5 # Toujours autoriser la consultation de ce message en cas d'erreur 403. <Files 403-forbidden.php> Require all granted </Files> # Erreur 403 - Forbidden. # Une adresse absolue charge l'url vers la nouvelle page. # Une adresse relative ne change pas l'url mais uniquement le contenu. ErrorDocument 403 https://privatebin.visionduweb.fr/403-forbidden.php </VirtualHost>
Recharger la configuration de Apache2
# Recharger la configuration de Apache2 pour appliquer la nouvelle configuration. sudo apache2ctl restart
redmine.lecannabiste.fr
# Créer le fichier de configuration pour le VirtualHost. sudo touch redmine.lecannabiste.fr.conf sudo chown root:root redmine.lecannabiste.fr.conf sudo chmod 644 redmine.lecannabiste.fr.conf
# Activer le site et redémarrer Apache2 pour appliquer la nouvelle configuration. sudo a2ensite redmine.lecannabiste.fr.conf sudo service apache2 restart
# Ajouter la configuration suivante dans le fichier redmine.lecannabiste.fr.conf sudo nano redmine.lecannabiste.fr.conf
redmine visionduweb.fr écoute du port HTTP 80
# VirtualHost du domaine redmine.lecannabiste.fr ## ## ## Port 80 ## ## ## <VirtualHost redmine.lecannabiste.fr:80> ServerName redmine.lecannabiste.fr # Ce vhost redirige de http vers https. 100% du trafic doit passer par https. # Les informations complémentaires sont inutiles. Pas de documentRoot, pas de logs. # La ligne suivante peut-être conservée dans le cas suivant : # Forcer le renouvellement ou recréer le certificat Let's Encrypt. # Situation actuelle : Multi-domaines sur un seul certificat. DocumentRoot /opt/redmine/canna/public/
# Renouveler avec : sudo certbot --force-renewal renew <IfModule mod_rewrite.c> RewriteEngine on # Redirection de http vers https. RewriteCond %{HTTPS} off # Le dossier .well-know de certbot doit être exclu de la réécriture d'URL. RewriteRule (^|/)\.(?!well-known) - [F] RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent] </IfModule> </VirtualHost>
redmine.lecannabiste.fr écoute du port SSL 443
## ## ## Port 443 ## ## ## <VirtualHost redmine.lecannabiste.fr:443> ServerName redmine.lecannabiste.fr ServerAdmin mail@visionduweb.fr DocumentRoot /opt/redmine/canna/public/ RailsBaseURI / PassengerAppRoot /opt/redmine/canna PassengerUser www-data PassengerGroup www-data # Comportement par défaut du niveau d'alerte retourné. # LogLevel warn ErrorLog ${APACHE_LOG_DIR}/redmine.error.log CustomLog ${APACHE_LOG_DIR}/redmine.access.log combined # CSP - Politique de sécurité du contenu. <IfModule mod_headers.c> # Charger l'entête HSTS. Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" # Sécuriser les Cookies. # Interdire l’utilisation du cookie côté client avec l’instruction HttpOnly. # Interdire l’utilisation du cookie sans HTTPs avec le flag Secure. Header always edit Set-Cookie (.*) "$1;HttpOnly;Secure" # Protéger des failles X-XSS X-Frame X-Content. Header set X-XSS-Protection "1; mode=block" Header always set X-Frame-Options "SAMEORIGIN" Header set X-Content-Type-Options nosniff Header set Access-Control-Allow-Origin: "default-src 'self' https://redmine.lecannabiste.fr" # Header set Content-Security-Policy: "default-src 'self' https://www.visionduweb.fr; script-src 'self' 'unsafe-inline' https://www.visionduweb.fr https://www.youtube.com https://s.ytimg.com https://www.google.com https://www.gstatic.com; object-src 'self' https://www.visionduweb.fr; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; img-src 'self' https://www.visionduweb.fr https://i.ytimg.com https://secure.gravatar.com; media-src 'self' https://www.visionduweb.fr https://youtu.be; frame-src 'self' https://www.visionduweb.fr https://www.youtube.com https://www.coingecko.com https://hackbbs.org:7777 https://www.spreaker.com https://widget.spreaker.com https://www.google.com; font-src 'self' 'unsafe-inline' https://www.visionduweb.fr https://fonts.gstatic.com data:; connect-src 'self' https://www.visionduweb.fr; frame-ancestors 'self'" # Le navigateur n'enverra pas l'en-tête du référent lors de la navigation de HTTPS vers HTTP. Header always set Referrer-Policy 'no-referrer-when-downgrade' # Identique à CSP mais au lieu de contrôler la sécurité c'est un contrôle des fonctionnalités. Header always set Feature-Policy "geolocation none;midi none;notifications none;push none;sync-xhr self;microphone none;camera none;magnetometer none;gyroscope none;speaker self;vibrate none;fullscreen self;payment none;" # Contrôle du cache navigateur. # Ne pas mettre en cache si ces fichiers le sont déjà. SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip # Désactiver le cache pour les scripts et fichiers dynamiques. <FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$"> Header unset Cache-Control </FilesMatch> # Mettre en cache les éléments suivants. <filesmatch "\.(gif|ico|jpe?g|png)$"> # Mise en cache de une année. Header set Cache-Control "max-age=33566400, public" # Économiser des requêtes de cookie sur les images. RequestHeader unset Cookie Header unset Cookie Header unset Set-Cookie </filesmatch> <filesmatch "\.(html|htm|css)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=604800, public" </filesmatch> <filesmatch "\.(js)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=604800, private" </filesmatch> <filesmatch "\.(gz|pdf|ttf)$"> # Mise en cache de une année. (Je n'ai pas le type gz présent dans les entêtes Expires.) Header set Cache-Control "max-age=33566400, public" </filesmatch> <filesmatch "\.(flv|swf)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=33566400, public" </filesmatch> </IfModule> # Charger le certificat Let's Encrypt. <IfModule mod_ssl.c> SSLEngine on SSLCertificateFile /etc/letsencrypt/live/redmine.lecannabiste.fr/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/redmine.lecannabiste.fr/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/redmine.lecannabiste.fr/chain.pem SSLProtocol all -SSLv2 -SSLv3 SSLHonorCipherOrder on SSLCompression off SSLOptions +StrictRequire SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA </IfModule>
# La première règle évaluée par Apache2 consiste à limiter l'accès à toute l'arborescence du système Linux (/). <Directory /> Require all denied </Directory> <Directory /opt/redmine/canna/public/> Options +Indexes +FollowSymLinks -MultiViews AllowOverride All # Je commente les lignes pour Apache 2.2. # Order allow,deny # Allow from all # Je remplace par les lignes pour Apache 2.4 Require all granted
# Inclure le script de liste noire anti bad bots : # https://github.com/mitchellkrogza/apache-ultimate-bad-bot-blocker/blob/master/Apache_2.4/README.md Include custom.d/globalblacklist.conf </Directory> # Protéger le fichier .htaccess : <files .htaccess> # Apache version 2.4 : Require all denied </files> # Toujours autoriser la consultation du fichier robots.txt : <Files robots.txt> Require all granted </Files> # <IfModule mod_rewrite.c> # RewriteEngine on # Redirection de https non-www vers https www # RewriteCond %{SERVER_NAME} !^www\.(.*)$ [NC] # RewriteRule ^ https://www.%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent] # Interdire l'affichage des types de fichiers suivants sur les sites non autorisés. # Visionduweb fr est autorisé. # RewriteCond %{HTTP_REFERER} !^https://(.+.)?visionduweb.fr/ [NC] # Dans le cas d'un entête réécrit, une URL de provenance vide sera autorisée. # RewriteCond %{HTTP_REFERER} !^$ # Rediriger les fichiers vers une image de hotlinking. # RewriteRule .*.(jpe?g|gif|bmp|png)$ /images/structure/no-hotlinking.png [L] # </IfModule> # Désactiver Etag. FileETag none
# Activer la compression. <IfModule mod_deflate.c> SetOutputFilter DEFLATE AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/vnd.ms-fontobject AddOutputFilterByType DEFLATE application/x-font AddOutputFilterByType DEFLATE application/x-font-opentype AddOutputFilterByType DEFLATE application/x-font-otf AddOutputFilterByType DEFLATE application/x-font-truetype AddOutputFilterByType DEFLATE application/x-font-ttf AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE font/opentype AddOutputFilterByType DEFLATE font/otf AddOutputFilterByType DEFLATE font/ttf AddOutputFilterByType DEFLATE image/svg+xml AddOutputFilterByType DEFLATE image/x-icon AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/javascript AddOutputFilterByType DEFLATE text/plain </IfModule> # DEFLATE pour les navigateurs non compatibles. BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html # Mise en cache du navigateur. <IfModule mod_expires.c> ExpiresActive On # Mise en cache par défaut du navigateur. ExpiresDefault "access plus 1 month" # Images. ExpiresByType image/gif "access plus 1 year" ExpiresByType image/jpg "access plus 1 year" ExpiresByType image/jpeg "access plus 1 year" ExpiresByType image/png "access plus 1 year" AddType image/svg+xml .svg ExpiresByType image/svg+xml "access plus 1 year" AddType image/x-icon .ico ExpiresByType image/ico "access plus 1 year" ExpiresByType image/icon "access plus 1 year" ExpiresByType image/x-icon "access plus 1 year" # Structure du site. ExpiresByType application/xhtml+xml "access plus 1 week" # Couper le temps d'expiration en le passant à 0 seconds. # Met fin au problème du wiki qui ne rafraîchit pas les informations texte entre deux éditions. ExpiresByType text/html "access plus 0 seconds" ExpiresByType text/css "access plus 1 week" ExpiresByType application/javascript "access plus 1 week" ExpiresByType text/x-javascript "access plus 1 week" ExpiresByType application/javascript "access plus 1 week" ExpiresByType application/x-javascript "access plus 1 week" ExpiresByType application/x-shockwave-flash "access plus 30 days" # Documents. ExpiresByType application/pdf "access plus 1 year" # Polices. AddType application/vnd.ms-fontobject .eot AddType application/x-font-ttf .ttf AddType application/x-font-opentype .otf AddType application/x-font-woff .woff ExpiresByType application/vnd.ms-fontobject "access 1 year" ExpiresByType application/x-font-ttf "access 1 year" ExpiresByType application/x-font-opentype "access 1 year" ExpiresByType application/x-font-woff "access 1 year" </IfModule>
# Limitations contre les DoS. KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 5
# Toujours autoriser la consultation de ce message en cas d'erreur 403. <Files 403-forbidden.php> Require all granted </Files> # Erreur 403 - Forbidden. ErrorDocument 403 https://www.visionduweb.fr/403-forbidden.php </VirtualHost>
Recharger la configuration de Apache2
# Recharger la configuration de Apache2 pour appliquer la nouvelle configuration. sudo apache2ctl restart
redmine.unis-pour-la-planete.com
# Créer le fichier de configuration pour le VirtualHost. sudo touch redmine.unis-pour-la-planete.com.conf sudo chown root:root redmine.unis-pour-la-planete.com.conf sudo chmod 644 redmine.unis-pour-la-planete.com.conf
# Activer le site et redémarrer Apache2 pour appliquer la nouvelle configuration. sudo a2ensite redmine.unis-pour-la-planete.com.conf sudo service apache2 restart
# Ajouter la configuration suivante dans le fichier redmine.unis-pour-la-planete.com.conf sudo nano redmine.unis-pour-la-planete.com.conf
redmine unis-pour-la-planete.com écoute du port HTTP 80
# VirtualHost du domaine redmine.unis-pour-la-planete.com ## ## ## Port 80 ## ## ## <VirtualHost redmine.unis-pour-la-planete.com:80> ServerName redmine.unis-pour-la-planete.com # Ce vhost redirige de http vers https. 100% du trafic doit passer par https. # Les informations complémentaires sont inutiles. Pas de documentRoot, pas de logs. # La ligne suivante peut-être conservée dans le cas suivant : # Forcer le renouvellement ou recréer le certificat Let's Encrypt. # Situation actuelle : Multi-domaines sur un seul certificat. DocumentRoot /opt/redmine/unis/public/
# Renouveler avec : sudo certbot --force-renewal renew <IfModule mod_rewrite.c> RewriteEngine on # Redirection de http vers https. RewriteCond %{HTTPS} off # Le dossier .well-know de certbot doit être exclu de la réécriture d'URL. RewriteRule (^|/)\.(?!well-known) - [F] RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent] </IfModule> </VirtualHost>
redmine.unis-pour-la-planete.com écoute du port SSL 443
## ## ## Port 443 ## ## ## <VirtualHost redmine.unis-pour-la-planete.com:443> ServerName redmine.unis-pour-la-planete.com ServerAdmin mail@visionduweb.com DocumentRoot /opt/redmine/unis/public/ RailsBaseURI / PassengerAppRoot /opt/redmine/unis PassengerUser www-data PassengerGroup www-data # Comportement par défaut du niveau d'alerte retourné. # LogLevel warn ErrorLog ${APACHE_LOG_DIR}/redmine.error.log CustomLog ${APACHE_LOG_DIR}/redmine.access.log combined # CSP - Politique de sécurité du contenu. <IfModule mod_headers.c> # Charger l'entête HSTS. Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" # Sécuriser les Cookies. # Interdire l’utilisation du cookie côté client avec l’instruction HttpOnly. # Interdire l’utilisation du cookie sans HTTPs avec le flag Secure. Header always edit Set-Cookie (.*) "$1;HttpOnly;Secure" # Protéger des failles X-XSS X-Frame X-Content. Header set X-XSS-Protection "1; mode=block" Header always set X-Frame-Options "SAMEORIGIN" Header set X-Content-Type-Options nosniff Header set Access-Control-Allow-Origin: "default-src 'self' https://redmine.unis-pour-la-planete.com" # Header set Content-Security-Policy: "default-src 'self' https://www.unis-pour-la-planete.com; script-src 'self' 'unsafe-inline' https://www.unis-pour-la-planete.com https://www.youtube.com https://s.ytimg.com https://www.google.com https://www.gstatic.com; object-src 'self' https://www.unis-pour-la-planete.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; img-src 'self' https://www.unis-pour-la-planete.com https://i.ytimg.com https://secure.gravatar.com; media-src 'self' https://www.unis-pour-la-planete.com https://youtu.be; frame-src 'self' https://www.unis-pour-la-planete.com https://www.youtube.com https://www.coingecko.com https://hackbbs.org:7777 https://www.spreaker.com https://widget.spreaker.com https://www.google.com; font-src 'self' 'unsafe-inline' https://www.unis-pour-la-planete.com https://fonts.gstatic.com data:; connect-src 'self' https://www.unis-pour-la-planete.com; frame-ancestors 'self'" # Le navigateur n'enverra pas l'en-tête du référent lors de la navigation de HTTPS vers HTTP. Header always set Referrer-Policy 'no-referrer-when-downgrade' # Identique à CSP mais au lieu de contrôler la sécurité c'est un contrôle des fonctionnalités. Header always set Feature-Policy "geolocation none;midi none;notifications none;push none;sync-xhr self;microphone none;camera none;magnetometer none;gyroscope none;speaker self;vibrate none;fullscreen self;payment none;" # Contrôle du cache navigateur. # Ne pas mettre en cache si ces fichiers le sont déjà. SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip # Désactiver le cache pour les scripts et fichiers dynamiques. <FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$"> Header unset Cache-Control </FilesMatch> # Mettre en cache les éléments suivants. <filesmatch "\.(gif|ico|jpe?g|png)$"> # Mise en cache de une année. Header set Cache-Control "max-age=33566400, public" # Économiser des requêtes de cookie sur les images. RequestHeader unset Cookie Header unset Cookie Header unset Set-Cookie </filesmatch> <filesmatch "\.(html|htm|css)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=604800, public" </filesmatch> <filesmatch "\.(js)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=604800, private" </filesmatch> <filesmatch "\.(gz|pdf|ttf)$"> # Mise en cache de une année. (Je n'ai pas le type gz présent dans les entêtes Expires.) Header set Cache-Control "max-age=33566400, public" </filesmatch> <filesmatch "\.(flv|swf)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=33566400, public" </filesmatch> </IfModule> # Charger le certificat Let's Encrypt. <IfModule mod_ssl.c> SSLEngine on SSLCertificateFile /etc/letsencrypt/live/redmine.unis-pour-la-planete.com/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/redmine.unis-pour-la-planete.com/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/redmine.unis-pour-la-planete.com/chain.pem SSLProtocol all -SSLv2 -SSLv3 SSLHonorCipherOrder on SSLCompression off SSLOptions +StrictRequire SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA </IfModule>
# La première règle évaluée par Apache2 consiste à limiter l'accès à toute l'arborescence du système Linux (/). <Directory /> Require all denied </Directory> <Directory /opt/redmine/unis/public/> Options +Indexes +FollowSymLinks -MultiViews AllowOverride All # Je commente les lignes pour Apache 2.2. # Order allow,deny # Allow from all # Je remplace par les lignes pour Apache 2.4 Require all granted
# Inclure le script de liste noire anti bad bots : # https://github.com/mitchellkrogza/apache-ultimate-bad-bot-blocker/blob/master/Apache_2.4/README.md Include custom.d/globalblacklist.conf </Directory> # Protéger le fichier .htaccess : <files .htaccess> # Apache version 2.4 : Require all denied </files> # Toujours autoriser la consultation du fichier robots.txt : <Files robots.txt> Require all granted </Files> <IfModule mod_rewrite.c> RewriteEngine on # Redirection de https non-www vers https www # RewriteCond %{SERVER_NAME} !^www\.(.*)$ [NC] # RewriteRule ^ https://www.%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent] # Interdire l'affichage des types de fichiers suivants sur les sites non autorisés. # Visionduweb fr est autorisé. # RewriteCond %{HTTP_REFERER} !^https://(.+.)?unis-pour-la-planete.com/ [NC] # Dans le cas d'un entête réécrit, une URL de provenance vide sera autorisée. # RewriteCond %{HTTP_REFERER} !^$ # Rediriger les fichiers vers une image de hotlinking. # RewriteRule .*.(jpe?g|gif|bmp|png)$ /images/structure/no-hotlinking.png [L] </IfModule> # Désactiver Etag. FileETag none
# Activer la compression. <IfModule mod_deflate.c> SetOutputFilter DEFLATE AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/vnd.ms-fontobject AddOutputFilterByType DEFLATE application/x-font AddOutputFilterByType DEFLATE application/x-font-opentype AddOutputFilterByType DEFLATE application/x-font-otf AddOutputFilterByType DEFLATE application/x-font-truetype AddOutputFilterByType DEFLATE application/x-font-ttf AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE font/opentype AddOutputFilterByType DEFLATE font/otf AddOutputFilterByType DEFLATE font/ttf AddOutputFilterByType DEFLATE image/svg+xml AddOutputFilterByType DEFLATE image/x-icon AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/javascript AddOutputFilterByType DEFLATE text/plain </IfModule> # DEFLATE pour les navigateurs non compatibles. BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html # Mise en cache du navigateur. <IfModule mod_expires.c> ExpiresActive On # Mise en cache par défaut du navigateur. ExpiresDefault "access plus 1 month" # Images. ExpiresByType image/gif "access plus 1 year" ExpiresByType image/jpg "access plus 1 year" ExpiresByType image/jpeg "access plus 1 year" ExpiresByType image/png "access plus 1 year" AddType image/svg+xml .svg ExpiresByType image/svg+xml "access plus 1 year" AddType image/x-icon .ico ExpiresByType image/ico "access plus 1 year" ExpiresByType image/icon "access plus 1 year" ExpiresByType image/x-icon "access plus 1 year" # Structure du site. ExpiresByType application/xhtml+xml "access plus 1 week" # Couper le temps d'expiration en le passant à 0 seconds. # Met fin au problème du wiki qui ne rafraîchit pas les informations texte entre deux éditions. ExpiresByType text/html "access plus 0 seconds" ExpiresByType text/css "access plus 1 week" ExpiresByType application/javascript "access plus 1 week" ExpiresByType text/x-javascript "access plus 1 week" ExpiresByType application/javascript "access plus 1 week" ExpiresByType application/x-javascript "access plus 1 week" ExpiresByType application/x-shockwave-flash "access plus 30 days" # Documents. ExpiresByType application/pdf "access plus 1 year" # Polices. AddType application/vnd.ms-fontobject .eot AddType application/x-font-ttf .ttf AddType application/x-font-opentype .otf AddType application/x-font-woff .woff ExpiresByType application/vnd.ms-fontobject "access 1 year" ExpiresByType application/x-font-ttf "access 1 year" ExpiresByType application/x-font-opentype "access 1 year" ExpiresByType application/x-font-woff "access 1 year" </IfModule>
# Limitations contre les DoS. KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 5
# Toujours autoriser la consultation de ce message en cas d'erreur 403. <Files 403-forbidden.php> Require all granted </Files> # Erreur 403 - Forbidden. ErrorDocument 403 https://www.visionduweb.fr/403-forbidden.php </VirtualHost>
Recharger la configuration de Apache2
# Recharger la configuration de Apache2 pour appliquer la nouvelle configuration. sudo apache2ctl restart
redmine.unis-pour-le-climat.com
# Créer le fichier de configuration pour le VirtualHost. sudo touch redmine.unis-pour-le-climat.com.conf sudo chown root:root redmine.unis-pour-le-climat.com.conf sudo chmod 644 redmine.unis-pour-le-climat.com.conf
# Activer le site et redémarrer Apache2 pour appliquer la nouvelle configuration. sudo a2ensite redmine.unis-pour-le-climat.com.conf sudo service apache2 restart
# Ajouter la configuration suivante dans le fichier redmine.unis-pour-le-climat.com.conf sudo nano redmine.unis-pour-le-climat.com.conf
redmine unis-pour-le-climat.com écoute du port HTTP 80
# VirtualHost du domaine redmine.unis-pour-le-climat.com ## ## ## Port 80 ## ## ## <VirtualHost redmine.unis-pour-le-climat.com:80> ServerName redmine.unis-pour-le-climat.com # Ce vhost redirige de http vers https. 100% du trafic doit passer par https. # Les informations complémentaires sont inutiles. Pas de documentRoot, pas de logs. # La ligne suivante peut-être conservée dans le cas suivant : # Forcer le renouvellement ou recréer le certificat Let's Encrypt. # Situation actuelle : Multi-domaines sur un seul certificat. DocumentRoot /opt/redmine/unis/public/
# Renouveler avec : sudo certbot --force-renewal renew <IfModule mod_rewrite.c> RewriteEngine on # Redirection de http vers https. RewriteCond %{HTTPS} off # Le dossier .well-know de certbot doit être exclu de la réécriture d'URL. RewriteRule (^|/)\.(?!well-known) - [F] RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent] </IfModule> </VirtualHost>
redmine.unis-pour-le-climat.com écoute du port SSL 443
## ## ## Port 443 ## ## ## <VirtualHost redmine.unis-pour-le-climat.com:443> ServerName redmine.unis-pour-le-climat.com ServerAdmin mail@visionduweb.com DocumentRoot /opt/redmine/unis/public/ RailsBaseURI / PassengerAppRoot /opt/redmine/unis PassengerUser www-data PassengerGroup www-data # Comportement par défaut du niveau d'alerte retourné. # LogLevel warn ErrorLog ${APACHE_LOG_DIR}/redmine.error.log CustomLog ${APACHE_LOG_DIR}/redmine.access.log combined # CSP - Politique de sécurité du contenu. <IfModule mod_headers.c> # Charger l'entête HSTS. Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" # Sécuriser les Cookies. # Interdire l’utilisation du cookie côté client avec l’instruction HttpOnly. # Interdire l’utilisation du cookie sans HTTPs avec le flag Secure. Header always edit Set-Cookie (.*) "$1;HttpOnly;Secure" # Protéger des failles X-XSS X-Frame X-Content. Header set X-XSS-Protection "1; mode=block" Header always set X-Frame-Options "SAMEORIGIN" Header set X-Content-Type-Options nosniff Header set Access-Control-Allow-Origin: "default-src 'self' https://redmine.unis-pour-le-climat.com" # Header set Content-Security-Policy: "default-src 'self' https://www.unis-pour-le-climat.com; script-src 'self' 'unsafe-inline' https://www.unis-pour-le-climat.com https://www.youtube.com https://s.ytimg.com https://www.google.com https://www.gstatic.com; object-src 'self' https://www.unis-pour-le-climat.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; img-src 'self' https://www.unis-pour-le-climat.com https://i.ytimg.com https://secure.gravatar.com; media-src 'self' https://www.unis-pour-le-climat.com https://youtu.be; frame-src 'self' https://www.unis-pour-le-climat.com https://www.youtube.com https://www.coingecko.com https://hackbbs.org:7777 https://www.spreaker.com https://widget.spreaker.com https://www.google.com; font-src 'self' 'unsafe-inline' https://www.unis-pour-le-climat.com https://fonts.gstatic.com data:; connect-src 'self' https://www.unis-pour-le-climat.com; frame-ancestors 'self'" # Le navigateur n'enverra pas l'en-tête du référent lors de la navigation de HTTPS vers HTTP. Header always set Referrer-Policy 'no-referrer-when-downgrade' # Identique à CSP mais au lieu de contrôler la sécurité c'est un contrôle des fonctionnalités. Header always set Feature-Policy "geolocation none;midi none;notifications none;push none;sync-xhr self;microphone none;camera none;magnetometer none;gyroscope none;speaker self;vibrate none;fullscreen self;payment none;" # Contrôle du cache navigateur. # Ne pas mettre en cache si ces fichiers le sont déjà. SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip # Désactiver le cache pour les scripts et fichiers dynamiques. <FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$"> Header unset Cache-Control </FilesMatch> # Mettre en cache les éléments suivants. <filesmatch "\.(gif|ico|jpe?g|png)$"> # Mise en cache de une année. Header set Cache-Control "max-age=33566400, public" # Économiser des requêtes de cookie sur les images. RequestHeader unset Cookie Header unset Cookie Header unset Set-Cookie </filesmatch> <filesmatch "\.(html|htm|css)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=604800, public" </filesmatch> <filesmatch "\.(js)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=604800, private" </filesmatch> <filesmatch "\.(gz|pdf|ttf)$"> # Mise en cache de une année. (Je n'ai pas le type gz présent dans les entêtes Expires.) Header set Cache-Control "max-age=33566400, public" </filesmatch> <filesmatch "\.(flv|swf)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=33566400, public" </filesmatch> </IfModule> # Charger le certificat Let's Encrypt. <IfModule mod_ssl.c> SSLEngine on SSLCertificateFile /etc/letsencrypt/live/redmine.unis-pour-le-climat.com/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/redmine.unis-pour-le-climat.com/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/redmine.unis-pour-le-climat.com/chain.pem SSLProtocol all -SSLv2 -SSLv3 SSLHonorCipherOrder on SSLCompression off SSLOptions +StrictRequire SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA </IfModule>
# La première règle évaluée par Apache2 consiste à limiter l'accès à toute l'arborescence du système Linux (/). <Directory /> Require all denied </Directory> <Directory /opt/redmine/unis/public/> Options +Indexes +FollowSymLinks -MultiViews AllowOverride All # Je commente les lignes pour Apache 2.2. # Order allow,deny # Allow from all # Je remplace par les lignes pour Apache 2.4 Require all granted
# Inclure le script de liste noire anti bad bots : # https://github.com/mitchellkrogza/apache-ultimate-bad-bot-blocker/blob/master/Apache_2.4/README.md Include custom.d/globalblacklist.conf </Directory> # Protéger le fichier .htaccess : <files .htaccess> # Apache version 2.4 : Require all denied </files> # Toujours autoriser la consultation du fichier robots.txt : <Files robots.txt> Require all granted </Files> <IfModule mod_rewrite.c> RewriteEngine on # Redirection de https non-www vers https www # RewriteCond %{SERVER_NAME} !^www\.(.*)$ [NC] # RewriteRule ^ https://www.%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent] # Interdire l'affichage des types de fichiers suivants sur les sites non autorisés. # Visionduweb fr est autorisé. # RewriteCond %{HTTP_REFERER} !^https://(.+.)?unis-pour-le-climat.com/ [NC] # Dans le cas d'un entête réécrit, une URL de provenance vide sera autorisée. # RewriteCond %{HTTP_REFERER} !^$ # Rediriger les fichiers vers une image de hotlinking. # RewriteRule .*.(jpe?g|gif|bmp|png)$ /images/structure/no-hotlinking.png [L] RewriteCond %{HTTP_Host} ^redmine\.unis-pour-le-climat\.com$ [NC] RewriteRule ^/robots\.txt$ /robots-miroir.txt [L] </IfModule> # Désactiver Etag. FileETag none
# Activer la compression. <IfModule mod_deflate.c> SetOutputFilter DEFLATE AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/vnd.ms-fontobject AddOutputFilterByType DEFLATE application/x-font AddOutputFilterByType DEFLATE application/x-font-opentype AddOutputFilterByType DEFLATE application/x-font-otf AddOutputFilterByType DEFLATE application/x-font-truetype AddOutputFilterByType DEFLATE application/x-font-ttf AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE font/opentype AddOutputFilterByType DEFLATE font/otf AddOutputFilterByType DEFLATE font/ttf AddOutputFilterByType DEFLATE image/svg+xml AddOutputFilterByType DEFLATE image/x-icon AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/javascript AddOutputFilterByType DEFLATE text/plain </IfModule> # DEFLATE pour les navigateurs non compatibles. BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html # Mise en cache du navigateur. <IfModule mod_expires.c> ExpiresActive On # Mise en cache par défaut du navigateur. ExpiresDefault "access plus 1 month" # Images. ExpiresByType image/gif "access plus 1 year" ExpiresByType image/jpg "access plus 1 year" ExpiresByType image/jpeg "access plus 1 year" ExpiresByType image/png "access plus 1 year" AddType image/svg+xml .svg ExpiresByType image/svg+xml "access plus 1 year" AddType image/x-icon .ico ExpiresByType image/ico "access plus 1 year" ExpiresByType image/icon "access plus 1 year" ExpiresByType image/x-icon "access plus 1 year" # Structure du site. ExpiresByType application/xhtml+xml "access plus 1 week" # Couper le temps d'expiration en le passant à 0 seconds. # Met fin au problème du wiki qui ne rafraîchit pas les informations texte entre deux éditions. ExpiresByType text/html "access plus 0 seconds" ExpiresByType text/css "access plus 1 week" ExpiresByType application/javascript "access plus 1 week" ExpiresByType text/x-javascript "access plus 1 week" ExpiresByType application/javascript "access plus 1 week" ExpiresByType application/x-javascript "access plus 1 week" ExpiresByType application/x-shockwave-flash "access plus 30 days" # Documents. ExpiresByType application/pdf "access plus 1 year" # Polices. AddType application/vnd.ms-fontobject .eot AddType application/x-font-ttf .ttf AddType application/x-font-opentype .otf AddType application/x-font-woff .woff ExpiresByType application/vnd.ms-fontobject "access 1 year" ExpiresByType application/x-font-ttf "access 1 year" ExpiresByType application/x-font-opentype "access 1 year" ExpiresByType application/x-font-woff "access 1 year" </IfModule>
# Limitations contre les DoS. KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 5
# Toujours autoriser la consultation de ce message en cas d'erreur 403. <Files 403-forbidden.php> Require all granted </Files> # Erreur 403 - Forbidden. ErrorDocument 403 https://www.visionduweb.fr/403-forbidden.php </VirtualHost>
Recharger la configuration de Apache2
# Recharger la configuration de Apache2 pour appliquer la nouvelle configuration. sudo apache2ctl restart
redmine.visionduweb.fr
# Créer le fichier de configuration pour le VirtualHost. sudo touch redmine.visionduweb.fr.conf sudo chown root:root redmine.visionduweb.fr.conf sudo chmod 644 redmine.visionduweb.fr.conf
# Activer le site et redémarrer Apache2 pour appliquer la nouvelle configuration. sudo a2ensite redmine.visionduweb.fr.conf sudo service apache2 restart
# Ajouter la configuration suivante dans le fichier redmine.visionduweb.fr.conf sudo nano redmine.visionduweb.fr.conf
redmine visionduweb.fr écoute du port HTTP 80
# VirtualHost du domaine redmine.visionduweb.fr ## ## ## Port 80 ## ## ## <VirtualHost redmine.visionduweb.fr:80> ServerName redmine.visionduweb.fr # Ce vhost redirige de http vers https. 100% du trafic doit passer par https. # Les informations complémentaires sont inutiles. Pas de documentRoot, pas de logs. # La ligne suivante peut-être conservée dans le cas suivant : # Forcer le renouvellement ou recréer le certificat Let's Encrypt. # Situation actuelle : Multi-domaines sur un seul certificat. DocumentRoot /opt/redmine/vdw/public/
# Renouveler avec : sudo certbot --force-renewal renew <IfModule mod_rewrite.c> RewriteEngine on # Redirection de http vers https. RewriteCond %{HTTPS} off # Le dossier .well-know de certbot doit être exclu de la réécriture d'URL. RewriteRule (^|/)\.(?!well-known) - [F] RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent] </IfModule> </VirtualHost>
redmine.visionduweb.fr écoute du port SSL 443
## ## ## Port 443 ## ## ## <VirtualHost redmine.visionduweb.fr:443> ServerName redmine.visionduweb.fr ServerAdmin mail@visionduweb.com DocumentRoot /opt/redmine/vdw/public/ RailsBaseURI / PassengerAppRoot /opt/redmine/vdw PassengerUser www-data PassengerGroup www-data # Comportement par défaut du niveau d'alerte retourné. # LogLevel warn ErrorLog ${APACHE_LOG_DIR}/redmine.error.log CustomLog ${APACHE_LOG_DIR}/redmine.access.log combined # CSP - Politique de sécurité du contenu. <IfModule mod_headers.c> # Charger l'entête HSTS. Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" # Sécuriser les Cookies. # Interdire l’utilisation du cookie côté client avec l’instruction HttpOnly. # Interdire l’utilisation du cookie sans HTTPs avec le flag Secure. Header always edit Set-Cookie (.*) "$1;HttpOnly;Secure" # Protéger des failles X-XSS X-Frame X-Content. Header set X-XSS-Protection "1; mode=block" Header always set X-Frame-Options "SAMEORIGIN" Header set X-Content-Type-Options nosniff Header set Access-Control-Allow-Origin: "default-src 'self' https://redmine.visionduweb.fr" # Header set Content-Security-Policy: "default-src 'self' https://www.visionduweb.fr; script-src 'self' 'unsafe-inline' https://www.visionduweb.fr https://www.youtube.com https://s.ytimg.com https://www.google.com https://www.gstatic.com; object-src 'self' https://www.visionduweb.fr; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; img-src 'self' https://www.visionduweb.fr https://i.ytimg.com https://secure.gravatar.com; media-src 'self' https://www.visionduweb.fr https://youtu.be; frame-src 'self' https://www.visionduweb.fr https://www.youtube.com https://www.coingecko.com https://hackbbs.org:7777 https://www.spreaker.com https://widget.spreaker.com https://www.google.com; font-src 'self' 'unsafe-inline' https://www.visionduweb.fr https://fonts.gstatic.com data:; connect-src 'self' https://www.visionduweb.fr; frame-ancestors 'self'" # Le navigateur n'enverra pas l'en-tête du référent lors de la navigation de HTTPS vers HTTP. Header always set Referrer-Policy 'no-referrer-when-downgrade' # Identique à CSP mais au lieu de contrôler la sécurité c'est un contrôle des fonctionnalités. Header always set Feature-Policy "geolocation none;midi none;notifications none;push none;sync-xhr self;microphone none;camera none;magnetometer none;gyroscope none;speaker self;vibrate none;fullscreen self;payment none;" # Contrôle du cache navigateur. # Ne pas mettre en cache si ces fichiers le sont déjà. SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip # Désactiver le cache pour les scripts et fichiers dynamiques. <FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$"> Header unset Cache-Control </FilesMatch> # Mettre en cache les éléments suivants. <filesmatch "\.(gif|ico|jpe?g|png)$"> # Mise en cache de une année. Header set Cache-Control "max-age=33566400, public" # Économiser des requêtes de cookie sur les images. RequestHeader unset Cookie Header unset Cookie Header unset Set-Cookie </filesmatch> <filesmatch "\.(html|htm|css)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=604800, public" </filesmatch> <filesmatch "\.(js)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=604800, private" </filesmatch> <filesmatch "\.(gz|pdf|ttf)$"> # Mise en cache de une année. (Je n'ai pas le type gz présent dans les entêtes Expires.) Header set Cache-Control "max-age=33566400, public" </filesmatch> <filesmatch "\.(flv|swf)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=33566400, public" </filesmatch> </IfModule> # Charger le certificat Let's Encrypt. <IfModule mod_ssl.c> SSLEngine on SSLCertificateFile /etc/letsencrypt/live/redmine.visionduweb.fr/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/redmine.visionduweb.fr/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/redmine.visionduweb.fr/chain.pem SSLProtocol all -SSLv2 -SSLv3 SSLHonorCipherOrder on SSLCompression off SSLOptions +StrictRequire SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA </IfModule> # La première règle évaluée par Apache2 consiste à limiter l'accès à toute l'arborescence du système Linux (/). <Directory /> Require all denied </Directory> <Directory /opt/redmine/vdw/public/> Options +Indexes +FollowSymLinks -MultiViews AllowOverride All # Je commente les lignes pour Apache 2.2. # Order allow,deny # Allow from all # Je remplace par les lignes pour Apache 2.4 Require all granted # Inclure le script de liste noire anti bad bots : # https://github.com/mitchellkrogza/apache-ultimate-bad-bot-blocker/blob/master/Apache_2.4/README.md Include custom.d/globalblacklist.conf </Directory> # Protéger le fichier .htaccess : <files .htaccess> # Apache version 2.4 : Require all denied </files> # Toujours autoriser la consultation du fichier robots.txt : <Files robots.txt> Require all granted </Files> <IfModule mod_rewrite.c> RewriteEngine on # Redirection de https non-www vers https www # RewriteCond %{SERVER_NAME} !^www\.(.*)$ [NC] # RewriteRule ^ https://www.%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent] # Interdire l'affichage des types de fichiers suivants sur les sites non autorisés. # Visionduweb fr est autorisé. # RewriteCond %{HTTP_REFERER} !^https://(.+.)?visionduweb.fr/ [NC] # Dans le cas d'un entête réécrit, une URL de provenance vide sera autorisée. # RewriteCond %{HTTP_REFERER} !^$ # Rediriger les fichiers vers une image de hotlinking. # RewriteRule .*.(jpe?g|gif|bmp|png)$ /images/structure/no-hotlinking.png [L] </IfModule> # Désactiver Etag. FileETag none
# Activer la compression. <IfModule mod_deflate.c> SetOutputFilter DEFLATE AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/vnd.ms-fontobject AddOutputFilterByType DEFLATE application/x-font AddOutputFilterByType DEFLATE application/x-font-opentype AddOutputFilterByType DEFLATE application/x-font-otf AddOutputFilterByType DEFLATE application/x-font-truetype AddOutputFilterByType DEFLATE application/x-font-ttf AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE font/opentype AddOutputFilterByType DEFLATE font/otf AddOutputFilterByType DEFLATE font/ttf AddOutputFilterByType DEFLATE image/svg+xml AddOutputFilterByType DEFLATE image/x-icon AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/javascript AddOutputFilterByType DEFLATE text/plain </IfModule> # DEFLATE pour les navigateurs non compatibles. BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html # Mise en cache du navigateur. <IfModule mod_expires.c> ExpiresActive On # Mise en cache par défaut du navigateur. ExpiresDefault "access plus 1 month" # Images. ExpiresByType image/gif "access plus 1 year" ExpiresByType image/jpg "access plus 1 year" ExpiresByType image/jpeg "access plus 1 year" ExpiresByType image/png "access plus 1 year" AddType image/svg+xml .svg ExpiresByType image/svg+xml "access plus 1 year" AddType image/x-icon .ico ExpiresByType image/ico "access plus 1 year" ExpiresByType image/icon "access plus 1 year" ExpiresByType image/x-icon "access plus 1 year" # Structure du site. ExpiresByType application/xhtml+xml "access plus 1 week" # Couper le temps d'expiration en le passant à 0 seconds. # Met fin au problème du wiki qui ne rafraîchit pas les informations texte entre deux éditions. ExpiresByType text/html "access plus 0 seconds" ExpiresByType text/css "access plus 1 week" ExpiresByType application/javascript "access plus 1 week" ExpiresByType text/x-javascript "access plus 1 week" ExpiresByType application/javascript "access plus 1 week" ExpiresByType application/x-javascript "access plus 1 week" ExpiresByType application/x-shockwave-flash "access plus 30 days" # Documents. ExpiresByType application/pdf "access plus 1 year" # Polices. AddType application/vnd.ms-fontobject .eot AddType application/x-font-ttf .ttf AddType application/x-font-opentype .otf AddType application/x-font-woff .woff ExpiresByType application/vnd.ms-fontobject "access 1 year" ExpiresByType application/x-font-ttf "access 1 year" ExpiresByType application/x-font-opentype "access 1 year" ExpiresByType application/x-font-woff "access 1 year" </IfModule>
# Limitations contre les DoS. KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 5
# Toujours autoriser la consultation de ce message en cas d'erreur 403. <Files 403-forbidden.php> Require all granted </Files> # Erreur 403 - Forbidden. ErrorDocument 403 https://www.visionduweb.fr/403-forbidden.php </VirtualHost>
Recharger la configuration de Apache2
# Recharger la configuration de Apache2 pour appliquer la nouvelle configuration. sudo apache2ctl restart
redmine.md-progressistes.fr
# Créer le fichier de configuration pour le VirtualHost. sudo touch redmine.md-progressistes.fr.conf sudo chown root:root redmine.md-progressistes.fr.conf sudo chmod 644 redmine.md-progressistes.fr.conf
# Activer le site et redémarrer Apache2 pour appliquer la nouvelle configuration. sudo a2ensite redmine.md-progressistes.fr.conf sudo service apache2 restart
# Ajouter la configuration suivante dans le fichier redmine.md-progressistes.fr.conf sudo nano redmine.md-progressistes.fr.conf
redmine visionduweb.fr écoute du port HTTP 80
# VirtualHost du domaine redmine.md-progressistes.fr ## ## ## Port 80 ## ## ## <VirtualHost redmine.md-progressistes.fr:80> ServerName redmine.md-progressistes.fr # Ce vhost redirige de http vers https. 100% du trafic doit passer par https. # Les informations complémentaires sont inutiles. Pas de documentRoot, pas de logs. # La ligne suivante peut-être conservée dans le cas suivant : # Forcer le renouvellement ou recréer le certificat Let's Encrypt. # Situation actuelle : Multi-domaines sur un seul certificat. DocumentRoot /opt/redmine/mdp/public/
# Renouveler avec : sudo certbot --force-renewal renew <IfModule mod_rewrite.c> RewriteEngine on # Redirection de http vers https. RewriteCond %{HTTPS} off # Le dossier .well-know de certbot doit être exclu de la réécriture d'URL. RewriteRule (^|/)\.(?!well-known) - [F] RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent] </IfModule> </VirtualHost>
redmine.md-progressistes.fr écoute du port SSL 443
## ## ## Port 443 ## ## ## <VirtualHost redmine.md-progressistes.fr:443> ServerName redmine.md-progressistes.fr ServerAdmin mail@visionduweb.fr DocumentRoot /opt/redmine/mdp/public/ RailsBaseURI / PassengerAppRoot /opt/redmine/mdp PassengerUser www-data PassengerGroup www-data # Comportement par défaut du niveau d'alerte retourné. # LogLevel warn ErrorLog ${APACHE_LOG_DIR}/redmine.error.log CustomLog ${APACHE_LOG_DIR}/redmine.access.log combined # CSP - Politique de sécurité du contenu. <IfModule mod_headers.c> # Charger l'entête HSTS. Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" # Sécuriser les Cookies. # Interdire l’utilisation du cookie côté client avec l’instruction HttpOnly. # Interdire l’utilisation du cookie sans HTTPs avec le flag Secure. Header always edit Set-Cookie (.*) "$1;HttpOnly;Secure" # Protéger des failles X-XSS X-Frame X-Content. Header set X-XSS-Protection "1; mode=block" Header always set X-Frame-Options "SAMEORIGIN" Header set X-Content-Type-Options nosniff Header set Access-Control-Allow-Origin: "default-src 'self' https://redmine.md-progressistes.fr" # Header set Content-Security-Policy: "default-src 'self' https://www.visionduweb.fr; script-src 'self' 'unsafe-inline' https://www.visionduweb.fr https://www.youtube.com https://s.ytimg.com https://www.google.com https://www.gstatic.com; object-src 'self' https://www.visionduweb.fr; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; img-src 'self' https://www.visionduweb.fr https://i.ytimg.com https://secure.gravatar.com; media-src 'self' https://www.visionduweb.fr https://youtu.be; frame-src 'self' https://www.visionduweb.fr https://www.youtube.com https://www.coingecko.com https://hackbbs.org:7777 https://www.spreaker.com https://widget.spreaker.com https://www.google.com; font-src 'self' 'unsafe-inline' https://www.visionduweb.fr https://fonts.gstatic.com data:; connect-src 'self' https://www.visionduweb.fr; frame-ancestors 'self'" # Le navigateur n'enverra pas l'en-tête du référent lors de la navigation de HTTPS vers HTTP. Header always set Referrer-Policy 'no-referrer-when-downgrade' # Identique à CSP mais au lieu de contrôler la sécurité c'est un contrôle des fonctionnalités. Header always set Feature-Policy "geolocation none;midi none;notifications none;push none;sync-xhr self;microphone none;camera none;magnetometer none;gyroscope none;speaker self;vibrate none;fullscreen self;payment none;" # Contrôle du cache navigateur. # Ne pas mettre en cache si ces fichiers le sont déjà. SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip # Désactiver le cache pour les scripts et fichiers dynamiques. <FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$"> Header unset Cache-Control </FilesMatch> # Mettre en cache les éléments suivants. <filesmatch "\.(gif|ico|jpe?g|png)$"> # Mise en cache de une année. Header set Cache-Control "max-age=33566400, public" # Économiser des requêtes de cookie sur les images. RequestHeader unset Cookie Header unset Cookie Header unset Set-Cookie </filesmatch> <filesmatch "\.(html|htm|css)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=604800, public" </filesmatch> <filesmatch "\.(js)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=604800, private" </filesmatch> <filesmatch "\.(gz|pdf|ttf)$"> # Mise en cache de une année. (Je n'ai pas le type gz présent dans les entêtes Expires.) Header set Cache-Control "max-age=33566400, public" </filesmatch> <filesmatch "\.(flv|swf)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=33566400, public" </filesmatch> </IfModule> # Charger le certificat Let's Encrypt. <IfModule mod_ssl.c> SSLEngine on SSLCertificateFile /etc/letsencrypt/live/redmine.md-progressistes.fr/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/redmine.md-progressistes.fr/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/redmine.md-progressistes.fr/chain.pem SSLProtocol all -SSLv2 -SSLv3 SSLHonorCipherOrder on SSLCompression off SSLOptions +StrictRequire SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA </IfModule> # La première règle évaluée par Apache2 consiste à limiter l'accès à toute l'arborescence du système Linux (/). <Directory /> Require all denied </Directory> <Directory /opt/redmine/mdp/public/> Options +Indexes +FollowSymLinks -MultiViews AllowOverride All # Je commente les lignes pour Apache 2.2. # Order allow,deny # Allow from all # Je remplace par les lignes pour Apache 2.4 Require all granted # Inclure le script de liste noire anti bad bots : # https://github.com/mitchellkrogza/apache-ultimate-bad-bot-blocker/blob/master/Apache_2.4/README.md Include custom.d/globalblacklist.conf </Directory> # Protéger le fichier .htaccess : <files .htaccess> # Apache version 2.4 : Require all denied </files> # Toujours autoriser la consultation du fichier robots.txt : <Files robots.txt> Require all granted </Files> # <IfModule mod_rewrite.c> # RewriteEngine on # Redirection de https non-www vers https www # RewriteCond %{SERVER_NAME} !^www\.(.*)$ [NC] # RewriteRule ^ https://www.%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent] # Interdire l'affichage des types de fichiers suivants sur les sites non autorisés. # Visionduweb fr est autorisé. # RewriteCond %{HTTP_REFERER} !^https://(.+.)?visionduweb.fr/ [NC] # Dans le cas d'un entête réécrit, une URL de provenance vide sera autorisée. # RewriteCond %{HTTP_REFERER} !^$ # Rediriger les fichiers vers une image de hotlinking. # RewriteRule .*.(jpe?g|gif|bmp|png)$ /images/structure/no-hotlinking.png [L] # </IfModule> # Désactiver Etag. FileETag none
# Activer la compression. <IfModule mod_deflate.c> SetOutputFilter DEFLATE AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/vnd.ms-fontobject AddOutputFilterByType DEFLATE application/x-font AddOutputFilterByType DEFLATE application/x-font-opentype AddOutputFilterByType DEFLATE application/x-font-otf AddOutputFilterByType DEFLATE application/x-font-truetype AddOutputFilterByType DEFLATE application/x-font-ttf AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE font/opentype AddOutputFilterByType DEFLATE font/otf AddOutputFilterByType DEFLATE font/ttf AddOutputFilterByType DEFLATE image/svg+xml AddOutputFilterByType DEFLATE image/x-icon AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/javascript AddOutputFilterByType DEFLATE text/plain </IfModule> # DEFLATE pour les navigateurs non compatibles. BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html # Mise en cache du navigateur. <IfModule mod_expires.c> ExpiresActive On # Mise en cache par défaut du navigateur. ExpiresDefault "access plus 1 month" # Images. ExpiresByType image/gif "access plus 1 year" ExpiresByType image/jpg "access plus 1 year" ExpiresByType image/jpeg "access plus 1 year" ExpiresByType image/png "access plus 1 year" AddType image/svg+xml .svg ExpiresByType image/svg+xml "access plus 1 year" AddType image/x-icon .ico ExpiresByType image/ico "access plus 1 year" ExpiresByType image/icon "access plus 1 year" ExpiresByType image/x-icon "access plus 1 year" # Structure du site. ExpiresByType application/xhtml+xml "access plus 1 week" # Couper le temps d'expiration en le passant à 0 seconds. # Met fin au problème du wiki qui ne rafraîchit pas les informations texte entre deux éditions. ExpiresByType text/html "access plus 0 seconds" ExpiresByType text/css "access plus 1 week" ExpiresByType application/javascript "access plus 1 week" ExpiresByType text/x-javascript "access plus 1 week" ExpiresByType application/javascript "access plus 1 week" ExpiresByType application/x-javascript "access plus 1 week" ExpiresByType application/x-shockwave-flash "access plus 30 days" # Documents. ExpiresByType application/pdf "access plus 1 year" # Polices. AddType application/vnd.ms-fontobject .eot AddType application/x-font-ttf .ttf AddType application/x-font-opentype .otf AddType application/x-font-woff .woff ExpiresByType application/vnd.ms-fontobject "access 1 year" ExpiresByType application/x-font-ttf "access 1 year" ExpiresByType application/x-font-opentype "access 1 year" ExpiresByType application/x-font-woff "access 1 year" </IfModule>
# Limitations contre les DoS. KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 5
# Toujours autoriser la consultation de ce message en cas d'erreur 403. <Files 403-forbidden.php> Require all granted </Files> # Erreur 403 - Forbidden. ErrorDocument 403 https://www.visionduweb.fr/403-forbidden.php </VirtualHost>
Recharger la configuration de Apache2
# Recharger la configuration de Apache2 pour appliquer la nouvelle configuration. sudo apache2ctl restart
tiger-green.fr
# Le site tiger-green.fr possède son propre dossier sur le serveur Apache2. # /var/www/tiger-green.fr
# Créer le fichier de configuration pour le VirtualHost. sudo touch tiger-green.fr.conf sudo chown root:root tiger-green.fr.conf sudo chmod 644 tiger-green.fr.conf
# Activer le site et redémarrer Apache2 pour appliquer la nouvelle configuration. sudo a2ensite tiger-green.fr.conf sudo service apache2 restart
# Ajouter la configuration suivante dans le fichier tiger-green.fr.conf sudo nano tiger-green.fr.conf
tiger-green.fr écoute du port HTTP 80
# VirtualHost du domaine tiger-green.fr ## ## ## Port 80 ## ## ## <VirtualHost tiger-green.fr:80> ServerName tiger-green.fr ServerAlias www.tiger-green.fr # Ce vhost redirige de http vers https. 100% du trafic doit passer par https. # Les informations complémentaires sont inutiles. Pas de documentRoot, pas de logs. # La ligne suivante peut-être conservée dans le cas suivant : # Forcer le renouvellement ou recréer le certificat Let's Encrypt. # Renouveler avec : sudo certbot --force-renewal renew DocumentRoot /var/www/tiger-green.fr <IfModule mod_rewrite.c> RewriteEngine on # Redirection de http vers https. RewriteCond %{HTTPS} off # Le dossier .well-know de certbot doit être exclu de la réécriture d'URL. RewriteRule (^|/)\.(?!well-known) - [F] RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent] </IfModule> </VirtualHost>
tiger-green.fr écoute du port SSL 443
## ## ## Port 443 ## ## ## <VirtualHost tiger-green.fr:443> ServerName tiger-green.fr ServerAlias www.tiger-green.fr ServerAdmin contacter@visionduweb.fr DocumentRoot /var/www/tiger-green.fr # Définir la valeur open_basedir pour le wiki. #SetEnv PHP_ADMIN_VALUE "open_basedir=/var/www/visionduweb.fr/:/tmp/:/var/lib/php/sessions" #SetEnv PHP_ADMIN_VALUE "open_basedir=none" # Comportement par défaut du niveau d'alerte retourné. # LogLevel warn ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined # CSP - Politique de sécurité du contenu. <IfModule mod_headers.c> # Charger l'entête HSTS. Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" # Sécuriser les Cookies. # Interdire l’utilisation du cookie côté client avec l’instruction HttpOnly. # Interdire l’utilisation du cookie sans HTTPs avec le flag Secure. Header always edit Set-Cookie (.*) "$1;HttpOnly;Secure" # Protéger contre les attaques utilisant X-XSS X-Frame X-Content. Header set X-XSS-Protection "1; mode=block" Header always set X-Frame-Options "SAMEORIGIN" Header set X-Content-Type-Options nosniff # Certaines adresses ne sont pas ajoutées comme étant autorisées, comme celle de https://static.doubleclick.net/instream/ad_status.js” appelée lors de la consultation de ma playlist de Youtube. Header set Access-Control-Allow-Origin: "default-src 'self' https://www.tiger-green.fr" Header set Content-Security-Policy: "default-src 'self' https://www.tiger-green.fr https://secure.gravatar.com https://fonts.googleapis.com https://www.youtube.com; script-src 'self' 'unsafe-eval' 'unsafe-inline' https://www.tiger-green.fr https://www.youtube.com https://s.ytimg.com; object-src 'self' https://www.tiger-green.fr; style-src 'self' 'unsafe-inline' https://www.tiger-green.fr https://fonts.googleapis.com; img-src 'self' https://www.tiger-green.fr https://secure.gravatar.com data:; media-src 'self' https://www.tiger-green.fr https://youtu.be https://www.youtube.com; frame-src 'self' https://www.tiger-green.fr https://www.youtube.com https://www.youtube-nocookie.com; font-src 'self' 'unsafe-inline' https://www.tiger-green.fr https://fonts.gstatic.com data:; connect-src 'self' https://www.tiger-green.fr; frame-ancestors https://www.tiger-green.fr; upgrade-insecure-requests;" # Header set Content-Security-Policy: "default-src 'self' https://www.tiger-green.fr;" # Le navigateur n'enverra pas l'en-tête du référent lors de la navigation de HTTPS vers HTTP. Header always set Referrer-Policy 'no-referrer-when-downgrade' # Identique à CSP mais au lieu de contrôler la sécurité c'est un contrôle des fonctionnalités. Header always set Feature-Policy "geolocation none;midi none;notifications none;push none;sync-xhr self;microphone none;camera none;magnetometer none;gyroscope none;speaker self;vibrate none;fullscreen self;payment none;" # Forcer la version de PHP-FPM. # <FilesMatch \.php$> # SetHandler "proxy:unix:/var/run/php/php7.3-fpm.sock|fcgi://localhost/" # </FilesMatch> # Contrôle du cache navigateur. # Ne pas mettre en cache si ces fichiers le sont déjà. SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip # Désactiver le cache pour les scripts et fichiers dynamiques. <FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$"> Header unset Cache-Control </FilesMatch> # Mettre en cache les éléments suivants. <filesmatch "\.(gif|ico|jpe?g|png)$"> # Mise en cache de une année. Header set Cache-Control "max-age=33566400, public" </filesmatch> <filesmatch "\.(html|htm|css)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=604800, public" </filesmatch> <filesmatch "\.(js)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=604800, private" </filesmatch> <filesmatch "\.(gz|pdf|ttf)$"> # Mise en cache de une année. (Je n'ai pas le type gz présent dans les entêtes Expires.) Header set Cache-Control "max-age=33566400, public" </filesmatch> <filesmatch "\.(flv|swf)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=33566400, public" </filesmatch> # Économiser les requêtes de cookies. # L'extension php n'est pas ajoutée, sinon, impossible de se connecter au site. <filesMatch "\.(ico|jpe?g|png|gif|svg|swf|gz|ttf|eot|woff|html|htm|css|pl|cgi|spl|scgi|fcgi)$"> # Reste à remettre l'option "js" dans les choix plus haut, et, à réactiver le cache joomla/wordpress pour observer le fonctionnement. RequestHeader unset Cookie Header unset Cookie Header unset Set-Cookie </filesMatch> </IfModule> # Charger le certificat Let's Encrypt. <IfModule mod_ssl.c> SSLEngine on SSLCertificateFile /etc/letsencrypt/live/tiger-green.fr/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/tiger-green.fr/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/tiger-green.fr/chain.pem SSLProtocol all -SSLv2 -SSLv3 SSLHonorCipherOrder on SSLCompression off SSLOptions +StrictRequire SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA </IfModule> # La première règle évaluée par Apache2 consiste à limiter l'accès à toute l'arborescence du système Linux (/). <Directory /> Options None AllowOverride None Require all denied </Directory> # Ensuite, on relâche un minimum de possibilités en fonction des besoins du site. <Directory /var/www/tiger-green.fr> # Empêcher le suivi des liens symboliques. # J'autorise le suivi des liens symboliques : # Permet l'inclusion de la liste noire anti bad bots blocker. # Depuis le fichier de configuration complémentaire. Options +FollowSymLinks # Protéger l'accès aux répertoires. Options -Indexes # Désactiver Inclusions Côté Serveur (Server Side Includes / SSI) Options -Includes # Permet la prise en compte du fichier .htaccess AllowOverride All # Définir le fichier à appeler par défaut. DirectoryIndex index.php index.html # Inclure le script de liste noire anti bad bots : # https://github.com/mitchellkrogza/apache-ultimate-bad-bot-blocker/blob/master/Apache_2.4/README.md Include custom.d/globalblacklist.conf </Directory> # Interdire l'utilisation de xmlrpc.php pour Apache 2.4 : <Files xmlrpc.php> Require all denied # Require par IP permet uniquement l'accès au site depuis l'adresse IP fournie. # Require ip xx.yyy.xx.zzz </Files> # Protéger le fichier .htaccess : <files .htaccess> # Apache version 2.4 : Require all denied </files> # Toujours autoriser la consultation du fichier robots.txt : <Files robots.txt> Require all granted </Files> <IfModule mod_rewrite.c> RewriteEngine on # Redirection de https non-www vers https www RewriteCond %{SERVER_NAME} !^www\.(.*)$ [NC] RewriteRule ^ https://www.%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent] # Interdire l'affichage des types de fichiers suivants sur les sites non autorisés. # Tiger Green fr est autorisé. RewriteCond %{HTTP_REFERER} !^https://(.+.)?tiger-green.fr/ [NC] # Dans le cas d'un entête réécrit, une URL de provenance vide sera autorisée. RewriteCond %{HTTP_REFERER} !^$ # Rediriger les fichiers vers une image de hotlinking. RewriteRule .*.(jpe?g|gif|bmp|png)$ /images/structure/no-hotlinking.png [L] </IfModule> # Désactiver Etag. FileETag none # Activer la compression. <IfModule mod_deflate.c> SetOutputFilter DEFLATE AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/vnd.ms-fontobject AddOutputFilterByType DEFLATE application/x-font AddOutputFilterByType DEFLATE application/x-font-opentype AddOutputFilterByType DEFLATE application/x-font-otf AddOutputFilterByType DEFLATE application/x-font-truetype AddOutputFilterByType DEFLATE application/x-font-ttf AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE font/opentype AddOutputFilterByType DEFLATE font/otf AddOutputFilterByType DEFLATE font/ttf AddOutputFilterByType DEFLATE image/svg+xml AddOutputFilterByType DEFLATE image/x-icon AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/javascript AddOutputFilterByType DEFLATE text/plain </IfModule> # DEFLATE pour les navigateurs non compatibles. BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html # Mise en cache du navigateur. <IfModule mod_expires.c> ExpiresActive On # Mise en cache par défaut du navigateur. ExpiresDefault "access plus 1 month" # Images. ExpiresByType image/gif "access plus 1 year" ExpiresByType image/jpg "access plus 1 year" ExpiresByType image/jpeg "access plus 1 year" ExpiresByType image/png "access plus 1 year" AddType image/svg+xml .svg ExpiresByType image/svg+xml "access plus 1 year" AddType image/x-icon .ico ExpiresByType image/ico "access plus 1 year" ExpiresByType image/icon "access plus 1 year" ExpiresByType image/x-icon "access plus 1 year" # Structure du site. ExpiresByType application/xhtml+xml "access plus 1 week" ExpiresByType text/html "access plus 1 week" ExpiresByType text/css "access plus 1 week" ExpiresByType application/javascript "access plus 1 week" ExpiresByType text/x-javascript "access plus 1 week" ExpiresByType application/javascript "access plus 1 week" ExpiresByType application/x-javascript "access plus 1 week" ExpiresByType application/x-shockwave-flash "access plus 30 days" # Documents. ExpiresByType application/pdf "access plus 1 year" # Polices. AddType application/vnd.ms-fontobject .eot AddType application/x-font-ttf .ttf AddType application/x-font-opentype .otf AddType application/x-font-woff .woff ExpiresByType application/vnd.ms-fontobject "access 1 year" ExpiresByType application/x-font-ttf "access 1 year" ExpiresByType application/x-font-opentype "access 1 year" ExpiresByType application/x-font-woff "access 1 year" </IfModule> # Limitations contre les DoS. KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 5 # Toujours autoriser la consultation de ce message en cas d'erreur 403. #<Files /var/www/tiger-green.fr/403-forbidden.php> <Files 403-forbidden.php> Require all granted </Files> <Files favicon.ico> Require all granted </Files> <Files /images/structure/403-forbidden.jpg> Require all granted </Files> # Erreur 403 - Forbidden. ErrorDocument 403 https://www.tiger-green.fr/403-forbidden.php </VirtualHost>
Recharger la configuration de Apache2
# Recharger la configuration de Apache2 pour appliquer la nouvelle configuration. sudo apache2ctl restart
top-du-bitcoin.info
# Le site top-du-bitcoin.info possède son propre dossier sur le serveur Apache2. # /var/www/top-du-bitcoin.info
# Créer le fichier de configuration pour le VirtualHost. sudo touch top-du-bitcoin.info.conf sudo chown root:root top-du-bitcoin.info.conf sudo chmod 644 top-du-bitcoin.info.conf
# Activer le site et redémarrer Apache2 pour appliquer la nouvelle configuration. sudo a2ensite top-du-bitcoin.info.conf sudo service apache2 restart
# Ajouter la configuration suivante dans le fichier top-du-bitcoin.info.conf sudo nano top-du-bitcoin.info.conf
top-du-bitcoin.info écoute du port HTTP 80
# VirtualHost du domaine top-du-bitcoin.info ## ## ## Port 80 ## ## ## <VirtualHost top-du-bitcoin.info:80> ServerName top-du-bitcoin.info ServerAlias www.top-du-bitcoin.info # Ce vhost redirige de http vers https. 100% du trafic doit passer par https. # Les informations complémentaires sont inutiles. Pas de documentRoot, pas de logs. # La ligne suivante peut-être conservée dans le cas suivant : # Forcer le renouvellement ou recréer le certificat Let's Encrypt. # Renouveler avec : sudo certbot --force-renewal renew DocumentRoot /var/www/top-du-bitcoin.info <IfModule mod_rewrite.c> RewriteEngine on # Redirection de http vers https. RewriteCond %{HTTPS} off # Le dossier .well-know de certbot doit être exclu de la réécriture d'URL. RewriteRule (^|/)\.(?!well-known) - [F] RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent] </IfModule> </VirtualHost>
top-du-bitcoin.info écoute du port SSL 443
## ## ## Port 443 ## ## ## <VirtualHost top-du-bitcoin.info:443> ServerName top-du-bitcoin.info ServerAlias www.top-du-bitcoin.info ServerAdmin mail@visionduweb.com DocumentRoot /var/www/top-du-bitcoin.info # Comportement par défaut du niveau d'alerte retourné. # LogLevel warn ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined # CSP - Politique de sécurité du contenu. <IfModule mod_headers.c> # Charger l'entête HSTS. Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" # Sécuriser les Cookies. # Interdire l’utilisation du cookie côté client avec l’instruction HttpOnly. # Interdire l’utilisation du cookie sans HTTPs avec le flag Secure. Header always edit Set-Cookie (.*) "$1;HttpOnly;Secure" # Protéger des failles X-XSS X-Frame X-Content. Header set X-XSS-Protection "1; mode=block" Header always set X-Frame-Options "SAMEORIGIN" Header set X-Content-Type-Options nosniff # Certaines adresses ne sont pas ajoutées comme étant autorisées, comme celle de https://static.doubleclick.net/instream/ad_status.js” appelée lors de la consultation de ma playlist de Youtube. Header set Access-Control-Allow-Origin: "default-src 'self' https://www.top-du-bitcoin.info" # Header set Content-Security-Policy: "default-src 'self' https://www.top-du-bitcoin.info; script-src 'self' 'unsafe-eval' 'unsafe-inline' https://www.top-du-bitcoin.info https://www.youtube.com https://unpkg.com https://s.ytimg.com https://www.google.com https://www.gstatic.com; object-src 'self' https://www.top-du-bitcoin.info; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; img-src 'self' https://www.top-du-bitcoin.info https://i.ytimg.com https://secure.gravatar.com https://avatars3.githubusercontent.com; media-src 'self' https://www.top-du-bitcoin.info https://youtu.be; frame-src 'self' https://www.top-du-bitcoin.info https://www.youtube.com https://www.youtube-nocookie.com https://www.coingecko.com https://hackbbs.org:7777 https://www.spreaker.com https://widget.spreaker.com https://www.google.com; font-src 'self' 'unsafe-inline' https://www.top-du-bitcoin.info https://fonts.gstatic.com data:; connect-src 'self' https://www.top-du-bitcoin.info https://api.github.com; frame-ancestors 'self'" # Le navigateur n'enverra pas l'en-tête du référent lors de la navigation de HTTPS vers HTTP. Header always set Referrer-Policy 'no-referrer-when-downgrade' # Identique à CSP mais au lieu de contrôler la sécurité c'est un contrôle des fonctionnalités. # Header always set Feature-Policy "geolocation none;midi none;notifications none;push none;sync-xhr self;microphone none;camera none;magnetometer none;gyroscope none;speaker self;vibrate none;fullscreen self;payment none;" # Contrôle du cache navigateur. # Ne pas mettre en cache si ces fichiers le sont déjà. SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip # Désactiver le cache pour les scripts et fichiers dynamiques. <FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$"> Header unset Cache-Control </FilesMatch> # Mettre en cache les éléments suivants. <filesmatch "\.(gif|ico|jpe?g|png)$"> # Mise en cache de une année. Header set Cache-Control "max-age=33566400, public" </filesmatch> <filesmatch "\.(html|htm|css)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=604800, public" </filesmatch> <filesmatch "\.(js)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=604800, private" </filesmatch> <filesmatch "\.(gz|pdf|ttf)$"> # Mise en cache de une année. (Je n'ai pas le type gz présent dans les entêtes Expires.) Header set Cache-Control "max-age=33566400, public" </filesmatch> <filesmatch "\.(flv|swf)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=33566400, public" </filesmatch> # Économiser les requêtes de cookies. # L'extension php n'est pas ajoutée, sinon, impossible de se connecter au site. <filesMatch "\.(ico|jpe?g|png|gif|svg|swf|gz|ttf|eot|woff|html|htm|css|js|pl|cgi|spl|scgi|fcgi)$"> RequestHeader unset Cookie Header unset Cookie Header unset Set-Cookie </filesMatch> </IfModule> # Charger le certificat Let's Encrypt. <IfModule mod_ssl.c> SSLEngine on SSLCertificateFile /etc/letsencrypt/live/top-du-bitcoin.info/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/top-du-bitcoin.info/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/top-du-bitcoin.info/chain.pem SSLProtocol all -SSLv2 -SSLv3 SSLHonorCipherOrder on SSLCompression off SSLOptions +StrictRequire SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA </IfModule> # La première règle évaluée par Apache2 consiste à limiter l'accès à toute l'arborescence du système Linux (/). <Directory /> Options None AllowOverride None Require all denied </Directory> # Ensuite, on relâche un minimum de possibilités en fonction des besoins du site. <Directory /var/www/top-du-bitcoin.info> # Empêcher le suivi des liens symboliques. # J'autorise le suivi des liens symboliques : # Permet l'inclusion de la liste noire anti bad bots blocker. # Depuis le fichier de configuration complémentaire. Options +FollowSymLinks # Protéger l'accès aux répertoires. Options -Indexes # Désactiver Inclusions Côté Serveur (Server Side Includes / SSI) Options -Includes # Permet la prise en compte du fichier .htaccess AllowOverride All # Définir le fichier à appeler par défaut. DirectoryIndex index.php index.html ## Contrôle d'accès Apache 2.4 : # Require forward-dns 19.252.11.80.in-addr.arpa domain name pointer lmontsouris-657-1-225-19.w80-11.abo.wanadoo.fr. ## Contrôle d'accès Apache 2.4 : # Toutes les requêtes sont autorisées. Est commenté pour prendre en compte le script anti bad bot blocker. # Fonctionne depuis que j'ai renseigné DirectoryIndex. ## Require all granted # Require par IP permet uniquement l'accès au site depuis l'adresse IP fournie. # Require ip xx.xx.xx.xx # Inclure le script de liste noire anti bad bots : # https://github.com/mitchellkrogza/apache-ultimate-bad-bot-blocker/blob/master/Apache_2.4/README.md Include custom.d/globalblacklist.conf </Directory> # Interdire l'utilisation de xmlrpc.php pour Apache 2.4 : <Files xmlrpc.php> Require all denied # Require par IP permet uniquement l'accès au site depuis l'adresse IP fournie. # Require ip xx.yyy.xx.zzz </Files> # Protéger le fichier .htaccess : <files .htaccess> # Apache version 2.4 : Require all denied </files> # Sur le même principe le fichier configuration.php du CMS peut être protégé. # Toujours autoriser la consultation du fichier robots.txt : <Files robots.txt> Require all granted </Files> <IfModule mod_rewrite.c> RewriteEngine on # Redirection de https non-www vers https www RewriteCond %{SERVER_NAME} !^www\.(.*)$ [NC] RewriteRule ^ https://www.%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent] # Interdire l'affichage des types de fichiers suivants sur les sites non autorisés. # Visionduweb fr est autorisé. RewriteCond %{HTTP_REFERER} !^https://(.+.)?top-du-bitcoin.info/ [NC] # Dans le cas d'un entête réécrit, une URL de provenance vide sera autorisée. RewriteCond %{HTTP_REFERER} !^$ # Rediriger les fichiers vers une image de hotlinking. RewriteRule .*.(jpe?g|gif|bmp|png)$ /images/structure/no-hotlinking.png [L] </IfModule> # Désactiver Etag. FileETag none # Activer la compression. <IfModule mod_deflate.c> SetOutputFilter DEFLATE AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/vnd.ms-fontobject AddOutputFilterByType DEFLATE application/x-font AddOutputFilterByType DEFLATE application/x-font-opentype AddOutputFilterByType DEFLATE application/x-font-otf AddOutputFilterByType DEFLATE application/x-font-truetype AddOutputFilterByType DEFLATE application/x-font-ttf AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE font/opentype AddOutputFilterByType DEFLATE font/otf AddOutputFilterByType DEFLATE font/ttf AddOutputFilterByType DEFLATE image/svg+xml AddOutputFilterByType DEFLATE image/x-icon AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/javascript AddOutputFilterByType DEFLATE text/plain </IfModule> # DEFLATE pour les navigateurs non compatibles. BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html # Mise en cache du navigateur. <IfModule mod_expires.c> ExpiresActive On # Mise en cache par défaut du navigateur. ExpiresDefault "access plus 1 month" # Images. ExpiresByType image/gif "access plus 1 year" ExpiresByType image/jpg "access plus 1 year" ExpiresByType image/jpeg "access plus 1 year" ExpiresByType image/png "access plus 1 year" AddType image/svg+xml .svg ExpiresByType image/svg+xml "access plus 1 year" AddType image/x-icon .ico ExpiresByType image/ico "access plus 1 year" ExpiresByType image/icon "access plus 1 year" ExpiresByType image/x-icon "access plus 1 year" # Structure du site. ExpiresByType application/xhtml+xml "access plus 1 week" ExpiresByType text/html "access plus 1 week" ExpiresByType text/css "access plus 1 week" ExpiresByType application/javascript "access plus 1 week" ExpiresByType text/x-javascript "access plus 1 week" ExpiresByType application/javascript "access plus 1 week" ExpiresByType application/x-javascript "access plus 1 week" ExpiresByType application/x-shockwave-flash "access plus 30 days" # Documents. ExpiresByType application/pdf "access plus 1 year" # Polices. AddType application/vnd.ms-fontobject .eot AddType application/x-font-ttf .ttf AddType application/x-font-opentype .otf AddType application/x-font-woff .woff ExpiresByType application/vnd.ms-fontobject "access 1 year" ExpiresByType application/x-font-ttf "access 1 year" ExpiresByType application/x-font-opentype "access 1 year" ExpiresByType application/x-font-woff "access 1 year" </IfModule> # Limitations contre les DoS. KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 5 # Toujours refuser la lecture des fichiers de log. <Files *.log> Require all denied </Files> # Toujours autoriser la consultation de ce message en cas d'erreur 403. <Files 403-forbidden*> Require all granted </Files> # Erreur 403 - Forbidden. # Une adresse absolue charge l'url vers la nouvelle page. # Une adresse relative ne change pas l'url mais uniquement le contenu. ErrorDocument 403 https://top-du-bitcoin.info/403-forbidden.php </VirtualHost>
Recharger la configuration de Apache2
# Recharger la configuration de Apache2 pour appliquer la nouvelle configuration. sudo apache2ctl restart
unis-pour-la-planete.com
# Créer le fichier de configuration pour le VirtualHost. sudo touch unis-pour-la-planete.com.conf sudo chown root:root unis-pour-la-planete.com.conf sudo chmod 644 unis-pour-la-planete.com.conf
# Activer le site et redémarrer Apache2 pour appliquer la nouvelle configuration. sudo a2ensite unis-pour-la-planete.com.conf sudo service apache2 restart
# Ajouter la configuration suivante dans le fichier unis-pour-la-planete.com.conf sudo nano unis-pour-la-planete.com.conf
unis-pour-la-planete.com écoute du port HTTP 80
# VirtualHost du domaine unis-pour-la-planete.com ## ## ## Port 80 ## ## ## <VirtualHost unis-pour-la-planete.com:80> ServerName unis-pour-la-planete.com ServerAlias www.unis-pour-la-planete.com # Ce vhost redirige de http vers https. 100% du trafic doit passer par https. # Les informations complémentaires sont inutiles. Pas de documentRoot, pas de logs. # La ligne suivante peut-être conservée dans le cas suivant : # Forcer le renouvellement ou recréer le certificat Let's Encrypt. # Situation actuelle : Multi-domaines sur un seul certificat. DocumentRoot /var/www/html # Renouveler avec : sudo certbot --force-renewal renew <IfModule mod_rewrite.c> RewriteEngine on # Redirection de http vers https. RewriteCond %{HTTPS} off # Le dossier .well-know de certbot doit être exclu de la réécriture d'URL. RewriteRule (^|/)\.(?!well-known) - [F] RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent] </IfModule> </VirtualHost>
unis-pour-la-planete.com écoute du port SSL 443
## ## ## Port 443 ## ## ## <VirtualHost unis-pour-la-planete.com:443> ServerName unis-pour-la-planete.com ServerAlias www.unis-pour-la-planete.com ServerAdmin mail@visionduweb.com DocumentRoot /var/www/html # Comportement par défaut du niveau d'alerte retourné. # LogLevel warn ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined # CSP - Politique de sécurité du contenu. <IfModule mod_headers.c> # Charger l'entête HSTS. Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" # Sécuriser les Cookies. # Interdire l’utilisation du cookie côté client avec l’instruction HttpOnly. # Interdire l’utilisation du cookie sans HTTPs avec le flag Secure. Header always edit Set-Cookie (.*) "$1;HttpOnly;Secure" # Protéger des failles X-XSS X-Frame X-Content. Header set X-XSS-Protection "1; mode=block" Header always set X-Frame-Options "SAMEORIGIN" Header set X-Content-Type-Options nosniff Header set Access-Control-Allow-Origin: "default-src 'self' https://www.unis-pour-la-planete.com" # Header set Content-Security-Policy: "default-src 'self' https://www.unis-pour-la-planete.com; script-src 'self' 'unsafe-inline' https://www.unis-pour-la-planete.com https://www.youtube.com https://s.ytimg.com https://www.google.com https://www.gstatic.com; object-src 'self' https://www.unis-pour-la-planete.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; img-src 'self' https://www.unis-pour-la-planete.com https://i.ytimg.com https://secure.gravatar.com; media-src 'self' https://www.unis-pour-la-planete.com https://youtu.be; frame-src 'self' https://www.unis-pour-la-planete.com https://www.youtube.com https://www.coingecko.com https://hackbbs.org:7777 https://www.spreaker.com https://widget.spreaker.com https://www.google.com; font-src 'self' 'unsafe-inline' https://www.unis-pour-la-planete.com https://fonts.gstatic.com data:; connect-src 'self' https://www.unis-pour-la-planete.com; frame-ancestors 'self'" # Le navigateur n'enverra pas l'en-tête du référent lors de la navigation de HTTPS vers HTTP. Header always set Referrer-Policy 'no-referrer-when-downgrade' # Identique à CSP mais au lieu de contrôler la sécurité c'est un contrôle des fonctionnalités. Header always set Feature-Policy "geolocation none;midi none;notifications none;push none;sync-xhr self;microphone none;camera none;magnetometer none;gyroscope none;speaker self;vibrate none;fullscreen self;payment none;" # Contrôle du cache navigateur. # Ne pas mettre en cache si ces fichiers le sont déjà. SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip # Désactiver le cache pour les scripts et fichiers dynamiques. <FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$"> Header unset Cache-Control </FilesMatch> # Mettre en cache les éléments suivants. <filesmatch "\.(gif|ico|jpe?g|png)$"> # Mise en cache de une année. Header set Cache-Control "max-age=33566400, public" # Économiser des requêtes de cookie sur les images. RequestHeader unset Cookie Header unset Cookie Header unset Set-Cookie </filesmatch> <filesmatch "\.(html|htm|css)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=604800, public" </filesmatch> <filesmatch "\.(js)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=604800, private" </filesmatch> <filesmatch "\.(gz|pdf|ttf)$"> # Mise en cache de une année. (Je n'ai pas le type gz présent dans les entêtes Expires.) Header set Cache-Control "max-age=33566400, public" </filesmatch> <filesmatch "\.(flv|swf)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=33566400, public" </filesmatch> </IfModule> # Charger le certificat Let's Encrypt. <IfModule mod_ssl.c> SSLEngine on SSLCertificateFile /etc/letsencrypt/live/unis-pour-la-planete.com/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/unis-pour-la-planete.com/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/unis-pour-la-planete.com/chain.pem SSLProtocol all -SSLv2 -SSLv3 SSLHonorCipherOrder on SSLCompression off SSLOptions +StrictRequire SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA </IfModule> # La première règle évaluée par Apache2 consiste à limiter l'accès à toute l'arborescence du système Linux (/). <Directory /> Require all denied </Directory> <Directory /var/www/html> # Empêcher le suivi des liens symboliques. Options -FollowSymLinks # Protéger l'accès aux répertoires. Options -Indexes # Désactiver Inclusions Côté Serveur - Server Side Includes - SSI. Options -Includes # Permet la prise en compte du fichier .htaccess. AllowOverride All # Définir le fichier à appeler par défaut. DirectoryIndex index.php index.html ## Contrôle d'accès Apache 2.2 : # Toutes les requêtes sont autorisées. # Fonctionne aussi sur Apache 2.4. # Order allow,deny # allow from all #### Require forward-dns (Retour de la commande host hostname) ## Contrôle d'accès Apache 2.4 : # Toutes les requêtes sont autorisées. # Fonctionne depuis que j'ai renseigné DirectoryIndex. Require all granted # Contrôle d'accès Apache 2.4 : # Require par IP permet uniquement l'accès au site depuis l'adresse IP fournie. # Require ip xx.xx.xx.xx # Inclure le script de liste noire anti bad bots : # https://github.com/mitchellkrogza/apache-ultimate-bad-bot-blocker/blob/master/Apache_2.4/README.md Include custom.d/globalblacklist.conf </Directory> # Autoriser uniquement mon IP locale pour l'accès à l'administration. <Directory /var/www/unis-pour-la-planete.com/administrator> Require all denied Require ip xx.xx.xxx.xx </Directory> # Protéger le fichier .htaccess : <files .htaccess> # Apache version 2.4 : Require all denied </files> # Toujours autoriser la consultation du fichier robots.txt : <Files robots.txt> Require all granted </Files> <IfModule mod_rewrite.c> RewriteEngine on # Redirection de https non-www vers https www RewriteCond %{SERVER_NAME} !^www\.(.*)$ [NC] RewriteRule ^ https://www.%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent] # Interdire l'affichage des types de fichiers suivants sur les sites non autorisés. # Visionduweb fr est autorisé. # RewriteCond %{HTTP_REFERER} !^https://(.+.)?unis-pour-la-planete.com/ [NC] # Dans le cas d'un entête réécrit, une URL de provenance vide sera autorisée. # RewriteCond %{HTTP_REFERER} !^$ # Rediriger les fichiers vers une image de hotlinking. # RewriteRule .*.(jpe?g|gif|bmp|png)$ /images/structure/no-hotlinking.png [L] </IfModule> # Désactiver Etag. FileETag none
# Activer la compression. <IfModule mod_deflate.c> SetOutputFilter DEFLATE AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/vnd.ms-fontobject AddOutputFilterByType DEFLATE application/x-font AddOutputFilterByType DEFLATE application/x-font-opentype AddOutputFilterByType DEFLATE application/x-font-otf AddOutputFilterByType DEFLATE application/x-font-truetype AddOutputFilterByType DEFLATE application/x-font-ttf AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE font/opentype AddOutputFilterByType DEFLATE font/otf AddOutputFilterByType DEFLATE font/ttf AddOutputFilterByType DEFLATE image/svg+xml AddOutputFilterByType DEFLATE image/x-icon AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/javascript AddOutputFilterByType DEFLATE text/plain </IfModule> # DEFLATE pour les navigateurs non compatibles. BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html # Mise en cache du navigateur. <IfModule mod_expires.c> ExpiresActive On # Mise en cache par défaut du navigateur. ExpiresDefault "access plus 1 month" # Images. ExpiresByType image/gif "access plus 1 year" ExpiresByType image/jpg "access plus 1 year" ExpiresByType image/jpeg "access plus 1 year" ExpiresByType image/png "access plus 1 year" AddType image/svg+xml .svg ExpiresByType image/svg+xml "access plus 1 year" AddType image/x-icon .ico ExpiresByType image/ico "access plus 1 year" ExpiresByType image/icon "access plus 1 year" ExpiresByType image/x-icon "access plus 1 year" # Structure du site. ExpiresByType application/xhtml+xml "access plus 1 week" ExpiresByType text/html "access plus 1 week" ExpiresByType text/css "access plus 1 week" ExpiresByType application/javascript "access plus 1 week" ExpiresByType text/x-javascript "access plus 1 week" ExpiresByType application/javascript "access plus 1 week" ExpiresByType application/x-javascript "access plus 1 week" ExpiresByType application/x-shockwave-flash "access plus 30 days" # Documents. ExpiresByType application/pdf "access plus 1 year" # Polices. AddType application/vnd.ms-fontobject .eot AddType application/x-font-ttf .ttf AddType application/x-font-opentype .otf AddType application/x-font-woff .woff ExpiresByType application/vnd.ms-fontobject "access 1 year" ExpiresByType application/x-font-ttf "access 1 year" ExpiresByType application/x-font-opentype "access 1 year" ExpiresByType application/x-font-woff "access 1 year" </IfModule>
# Limitations contre les DoS. KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 5 # Toujours refuser la lecture des fichiers de log. <Files *.log> Require all denied </Files> # Toujours autoriser la consultation de ce message en cas d'erreur 403. <Files 403-forbidden*> Require all granted </Files> # Erreur 403 - Forbidden. # Une adresse absolue charge l'url vers la nouvelle page. # Une adresse relative ne change pas l'url mais uniquement le contenu. ErrorDocument 403 https://www.unis-pour-la-planete.com/403-forbidden.php </VirtualHost>
Recharger la configuration de Apache2
# Recharger la configuration de Apache2 pour appliquer la nouvelle configuration. sudo apache2ctl restart
unis-pour-le-climat.com
# Créer le fichier de configuration pour le VirtualHost. sudo touch unis-pour-le-climat.com.conf sudo chown root:root unis-pour-le-climat.com.conf sudo chmod 644 unis-pour-le-climat.com.conf
# Activer le site et redémarrer Apache2 pour appliquer la nouvelle configuration. sudo a2ensite unis-pour-le-climat.com.conf sudo service apache2 restart
# Ajouter la configuration suivante dans le fichier unis-pour-le-climat.com.conf sudo nano unis-pour-le-climat.com.conf
unis-pour-le-climat.com écoute du port HTTP 80
# VirtualHost du domaine unis-pour-le-climat.com ## ## ## Port 80 ## ## ## <VirtualHost unis-pour-le-climat.com:80> ServerName unis-pour-le-climat.com ServerAlias www.unis-pour-le-climat.com # Ce vhost redirige de http vers https. 100% du trafic doit passer par https. # Les informations complémentaires sont inutiles. Pas de documentRoot, pas de logs. # La ligne suivante peut-être conservée dans le cas suivant : # Forcer le renouvellement ou recréer le certificat Let's Encrypt. # Situation actuelle : Multi-domaines sur un seul certificat. DocumentRoot /var/www/html # Renouveler avec : sudo certbot --force-renewal renew <IfModule mod_rewrite.c> RewriteEngine on # Redirection de http vers https. RewriteCond %{HTTPS} off # Le dossier .well-know de certbot doit être exclu de la réécriture d'URL. RewriteRule (^|/)\.(?!well-known) - [F] RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent] </IfModule> </VirtualHost>
unis-pour-le-climat.com écoute du port SSL 443
## ## ## Port 443 ## ## ## <VirtualHost unis-pour-le-climat.com:443> ServerName unis-pour-le-climat.com ServerAlias www.unis-pour-le-climat.com ServerAdmin mail@visionduweb.com DocumentRoot /var/www/html # Comportement par défaut du niveau d'alerte retourné. # LogLevel warn ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined # CSP - Politique de sécurité du contenu. <IfModule mod_headers.c> # Charger l'entête HSTS. Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" # Sécuriser les Cookies. # Interdire l’utilisation du cookie côté client avec l’instruction HttpOnly. # Interdire l’utilisation du cookie sans HTTPs avec le flag Secure. Header always edit Set-Cookie (.*) "$1;HttpOnly;Secure" # Protéger des failles X-XSS X-Frame X-Content. Header set X-XSS-Protection "1; mode=block" Header always set X-Frame-Options "SAMEORIGIN" Header set X-Content-Type-Options nosniff Header set Access-Control-Allow-Origin: "default-src 'self' https://www.unis-pour-le-climat.com" # Header set Content-Security-Policy: "default-src 'self' https://www.unis-pour-le-climat.com; script-src 'self' 'unsafe-inline' https://www.unis-pour-le-climat.com https://www.youtube.com https://s.ytimg.com https://www.google.com https://www.gstatic.com; object-src 'self' https://www.unis-pour-le-climat.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; img-src 'self' https://www.unis-pour-le-climat.com https://i.ytimg.com https://secure.gravatar.com; media-src 'self' https://www.unis-pour-le-climat.com https://youtu.be; frame-src 'self' https://www.unis-pour-le-climat.com https://www.youtube.com https://www.coingecko.com https://hackbbs.org:7777 https://www.spreaker.com https://widget.spreaker.com https://www.google.com; font-src 'self' 'unsafe-inline' https://www.unis-pour-le-climat.com https://fonts.gstatic.com data:; connect-src 'self' https://www.unis-pour-le-climat.com; frame-ancestors 'self'" # Le navigateur n'enverra pas l'en-tête du référent lors de la navigation de HTTPS vers HTTP. Header always set Referrer-Policy 'no-referrer-when-downgrade' # Identique à CSP mais au lieu de contrôler la sécurité c'est un contrôle des fonctionnalités. Header always set Feature-Policy "geolocation none;midi none;notifications none;push none;sync-xhr self;microphone none;camera none;magnetometer none;gyroscope none;speaker self;vibrate none;fullscreen self;payment none;" # Contrôle du cache navigateur. # Ne pas mettre en cache si ces fichiers le sont déjà. SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip # Désactiver le cache pour les scripts et fichiers dynamiques. <FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$"> Header unset Cache-Control </FilesMatch> # Mettre en cache les éléments suivants. <filesmatch "\.(gif|ico|jpe?g|png)$"> # Mise en cache de une année. Header set Cache-Control "max-age=33566400, public" # Économiser des requêtes de cookie sur les images. RequestHeader unset Cookie Header unset Cookie Header unset Set-Cookie </filesmatch> <filesmatch "\.(html|htm|css)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=604800, public" </filesmatch> <filesmatch "\.(js)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=604800, private" </filesmatch> <filesmatch "\.(gz|pdf|ttf)$"> # Mise en cache de une année. (Je n'ai pas le type gz présent dans les entêtes Expires.) Header set Cache-Control "max-age=33566400, public" </filesmatch> <filesmatch "\.(flv|swf)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=33566400, public" </filesmatch> </IfModule> # Charger le certificat Let's Encrypt. <IfModule mod_ssl.c> SSLEngine on SSLCertificateFile /etc/letsencrypt/live/unis-pour-la-planete.com/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/unis-pour-la-planete.com/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/unis-pour-la-planete.com/chain.pem SSLProtocol all -SSLv2 -SSLv3 SSLHonorCipherOrder on SSLCompression off SSLOptions +StrictRequire SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA </IfModule>
# La première règle évaluée par Apache2 consiste à limiter l'accès à toute l'arborescence du système Linux (/). <Directory /> Require all denied </Directory> <Directory /var/www/html> # Empêcher le suivi des liens symboliques. Options -FollowSymLinks # Protéger l'accès aux répertoires. Options -Indexes # Désactiver Inclusions Côté Serveur - Server Side Includes - SSI. Options -Includes # Permet la prise en compte du fichier .htaccess. AllowOverride All # Définir le fichier à appeler par défaut. DirectoryIndex index.php index.html ## Contrôle d'accès Apache 2.2 : # Toutes les requêtes sont autorisées. # Fonctionne aussi sur Apache 2.4. # Order allow,deny # allow from all #### Require forward-dns (Retour de la commande host hostname) ## Contrôle d'accès Apache 2.4 : # Toutes les requêtes sont autorisées. # Fonctionne depuis que j'ai renseigné DirectoryIndex. Require all granted # Contrôle d'accès Apache 2.4 : # Require par IP permet uniquement l'accès au site depuis l'adresse IP fournie. # Require ip xx.xx.xx.xx # Inclure le script de liste noire anti bad bots : # https://github.com/mitchellkrogza/apache-ultimate-bad-bot-blocker/blob/master/Apache_2.4/README.md Include custom.d/globalblacklist.conf </Directory> # Autoriser uniquement mon IP locale pour l'accès à l'administration. <Directory /var/www/unis-pour-le-climat.com/administrator> Require all denied Require ip xx.xx.xxx.xx </Directory> # Protéger le fichier .htaccess : <files .htaccess> # Apache version 2.4 : Require all denied </files> # Toujours autoriser la consultation du fichier robots.txt : <Files robots.txt> Require all granted </Files> <IfModule mod_rewrite.c> RewriteEngine on # Redirection de https non-www vers https www RewriteCond %{SERVER_NAME} !^www\.(.*)$ [NC] RewriteRule ^ https://www.%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent] # Interdire l'affichage des types de fichiers suivants sur les sites non autorisés. # Visionduweb fr est autorisé. # RewriteCond %{HTTP_REFERER} !^https://(.+.)?unis-pour-le-climat.com/ [NC] # Dans le cas d'un entête réécrit, une URL de provenance vide sera autorisée. # RewriteCond %{HTTP_REFERER} !^$ # Rediriger les fichiers vers une image de hotlinking. # RewriteRule .*.(jpe?g|gif|bmp|png)$ /images/structure/no-hotlinking.png [L] </IfModule> # Désactiver Etag. FileETag none
# Activer la compression. <IfModule mod_deflate.c> SetOutputFilter DEFLATE AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/vnd.ms-fontobject AddOutputFilterByType DEFLATE application/x-font AddOutputFilterByType DEFLATE application/x-font-opentype AddOutputFilterByType DEFLATE application/x-font-otf AddOutputFilterByType DEFLATE application/x-font-truetype AddOutputFilterByType DEFLATE application/x-font-ttf AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE font/opentype AddOutputFilterByType DEFLATE font/otf AddOutputFilterByType DEFLATE font/ttf AddOutputFilterByType DEFLATE image/svg+xml AddOutputFilterByType DEFLATE image/x-icon AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/javascript AddOutputFilterByType DEFLATE text/plain </IfModule> # DEFLATE pour les navigateurs non compatibles. BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html # Mise en cache du navigateur. <IfModule mod_expires.c> ExpiresActive On # Mise en cache par défaut du navigateur. ExpiresDefault "access plus 1 month" # Images. ExpiresByType image/gif "access plus 1 year" ExpiresByType image/jpg "access plus 1 year" ExpiresByType image/jpeg "access plus 1 year" ExpiresByType image/png "access plus 1 year" AddType image/svg+xml .svg ExpiresByType image/svg+xml "access plus 1 year" AddType image/x-icon .ico ExpiresByType image/ico "access plus 1 year" ExpiresByType image/icon "access plus 1 year" ExpiresByType image/x-icon "access plus 1 year" # Structure du site. ExpiresByType application/xhtml+xml "access plus 1 week" ExpiresByType text/html "access plus 1 week" ExpiresByType text/css "access plus 1 week" ExpiresByType application/javascript "access plus 1 week" ExpiresByType text/x-javascript "access plus 1 week" ExpiresByType application/javascript "access plus 1 week" ExpiresByType application/x-javascript "access plus 1 week" ExpiresByType application/x-shockwave-flash "access plus 30 days" # Documents. ExpiresByType application/pdf "access plus 1 year" # Polices. AddType application/vnd.ms-fontobject .eot AddType application/x-font-ttf .ttf AddType application/x-font-opentype .otf AddType application/x-font-woff .woff ExpiresByType application/vnd.ms-fontobject "access 1 year" ExpiresByType application/x-font-ttf "access 1 year" ExpiresByType application/x-font-opentype "access 1 year" ExpiresByType application/x-font-woff "access 1 year" </IfModule>
# Limitations contre les DoS. KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 5 # Toujours refuser la lecture des fichiers de log. <Files *.log> Require all denied </Files> # Toujours autoriser la consultation de ce message en cas d'erreur 403. <Files 403-forbidden*> Require all granted </Files> # Erreur 403 - Forbidden. # Une adresse absolue charge l'url vers la nouvelle page. # Une adresse relative ne change pas l'url mais uniquement le contenu. ErrorDocument 403 https://www.unis-pour-le-climat.com/403-forbidden.php </VirtualHost>
Configuration de l'écoute du port TCP 3000
# Ne fonctionne pas. A voir par la suite.
# Aucun ajout de configuration. # Le port 3000 est accessible, sans passer par une connexion sécurisée https. # http://unis-pour-le-climat.com:3000 # C'est au niveau de DemocracyOS (Installation avec Docker.) qu'il faudra chercher à configurer le SSL et une éventuelle redirection.
Recharger la configuration de Apache2
# Recharger la configuration de Apache2 pour appliquer la nouvelle configuration. sudo apache2ctl restart
visionduweb.fr
# Le site visionduweb.fr possède son propre dossier sur le serveur Apache2. # /var/www/visionduweb.fr
# Créer le fichier de configuration pour le VirtualHost. sudo touch visionduweb.fr.conf sudo chown root:root visionduweb.fr.conf sudo chmod 644 visionduweb.fr.conf
# Activer le site et redémarrer Apache2 pour appliquer la nouvelle configuration. sudo a2ensite visionduweb.fr.conf sudo service apache2 restart
# Ajouter la configuration suivante dans le fichier visionduweb.fr.conf sudo nano visionduweb.fr.conf
visionduweb.fr écoute du port HTTP 80
# <MDomain visionduweb.fr> # MDCertificateFile /etc/letsencrypt/live/visionduweb.fr/cert.pem # MDCertificateKeyFile /etc/letsencrypt/live/visionduweb.fr/privkey.pem # </Mdomain> # Invalid command '<MDomain', perhaps misspelled or defined by a module not included in the server configuration
# VirtualHost du domaine visionduweb.fr ## ## ## Port 80 ## ## ## <VirtualHost visionduweb.fr:80> ServerName visionduweb.fr ServerAlias www.visionduweb.fr # Ce vhost redirige de http vers https. 100% du trafic doit passer par https. # Les informations complémentaires sont inutiles. Pas de documentRoot, pas de logs. # La ligne suivante peut-être conservée dans le cas suivant : # Forcer le renouvellement ou recréer le certificat Let's Encrypt. # Renouveler avec : sudo certbot --force-renewal renew DocumentRoot /var/www/visionduweb.fr <IfModule mod_rewrite.c> RewriteEngine on # Redirection de http vers https. RewriteCond %{HTTPS} off # Le dossier .well-know de certbot doit être exclu de la réécriture d'URL. RewriteRule (^|/)\.(?!well-known) - [F] RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent] </IfModule> </VirtualHost>
visionduweb.fr écoute du port SSL 443
## ## ## Port 443 ## ## ## <VirtualHost visionduweb.fr:443> # Ajouter pour chaque VirtualHost, ou, au niveau global de la configuration, la commande suivante pour activer HTTP/2. # L'activation du module semble suffire à généraliser l'activation de HTTP/2 sans même avoir à renseigner le VirtualHost, Wappanalyser indiquant que tous mes sites sont en HTTP/2. # On préférera renseigner la ligne pour activer HTTP/2, si disponible, depuis chaque VirtualHost : Protocols h2 h2c http/1.1 ServerName visionduweb.fr ServerAlias www.visionduweb.fr ServerAdmin mail@visionduweb.com DocumentRoot /var/www/visionduweb.fr # Définir la valeur open_basedir pour le wiki. ( A suivre. ) #SetEnv PHP_ADMIN_VALUE "open_basedir=/var/www/visionduweb.fr/:/tmp/:/var/lib/php/sessions" SetEnv PHP_ADMIN_VALUE "open_basedir=none" # Comportement par défaut du niveau d'alerte retourné. # LogLevel warn ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined # CSP - Politique de sécurité du contenu. <IfModule mod_headers.c> # Charger l'entête HSTS. Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" # Sécuriser les Cookies. # Interdire l’utilisation du cookie côté client avec l’instruction HttpOnly. # Interdire l’utilisation du cookie sans HTTPs avec le flag Secure. Header always edit Set-Cookie (.*) "$1;HttpOnly;Secure" # Protéger des failles X-XSS X-Frame X-Content. Header set X-XSS-Protection "1; mode=block" Header always set X-Frame-Options "SAMEORIGIN" Header set X-Content-Type-Options nosniff # Certaines adresses ne sont pas ajoutées comme étant autorisées, comme celle de https://static.doubleclick.net/instream/ad_status.js” appelée lors de la consultation de ma playlist de Youtube. Header set Access-Control-Allow-Origin: "default-src 'self' https://www.visionduweb.fr" Header set Content-Security-Policy: "default-src 'self' https://www.visionduweb.fr; script-src 'self' 'unsafe-eval' 'unsafe-inline' https://www.visionduweb.fr https://www.ebwidget.com https://www.youtube.com https://unpkg.com https://s.ytimg.com https://www.google.com https://www.gstatic.com; object-src 'self' https://www.visionduweb.fr; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; img-src 'self' https://www.visionduweb.fr https://thumbs2.ebaystatic.com https://thumbs3.ebaystatic.com https://thumbs4.ebaystatic.com https://pics.ebaystatic.com https://i.ytimg.com https://secure.gravatar.com https://avatars3.githubusercontent.com; media-src 'self' https://www.visionduweb.fr https://youtu.be; frame-src 'self' https://www.visionduweb.fr https://www.youtube.com https://www.youtube-nocookie.com https://cdn.jsdelivr.net https://www.coingecko.com https://hackbbs.org:7777 https://www.spreaker.com https://widget.spreaker.com https://www.google.com; font-src 'self' 'unsafe-inline' https://www.visionduweb.fr https://fonts.gstatic.com data:; connect-src 'self' https://www.visionduweb.fr https://api.github.com; frame-ancestors 'self'; upgrade-insecure-requests;" # Le navigateur n'enverra pas l'en-tête du référent lors de la navigation de HTTPS vers HTTP. Header always set Referrer-Policy 'no-referrer-when-downgrade' # Identique à CSP mais au lieu de contrôler la sécurité c'est un contrôle des fonctionnalités. Header always set Feature-Policy "geolocation none;midi none;notifications none;push none;sync-xhr self;microphone none;camera none;magnetometer none;gyroscope none;speaker self;vibrate none;fullscreen self;payment none;" # Contrôle du cache navigateur. # Ne pas mettre en cache si ces fichiers le sont déjà. SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip # Désactiver le cache pour les scripts et fichiers dynamiques. <FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$"> Header unset Cache-Control </FilesMatch> # Mettre en cache les éléments suivants. <filesmatch "\.(gif|ico|jpe?g|png)$"> # Mise en cache de une année. Header set Cache-Control "max-age=33566400, public" </filesmatch> <filesmatch "\.(html|htm|css)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=604800, public" </filesmatch> <filesmatch "\.(js)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=604800, private" </filesmatch> <filesmatch "\.(gz|pdf|ttf)$"> # Mise en cache de une année. (Je n'ai pas le type gz présent dans les entêtes Expires.) Header set Cache-Control "max-age=33566400, public" </filesmatch> <filesmatch "\.(flv|swf)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=33566400, public" </filesmatch> # Économiser les requêtes de cookies. # L'extension php n'est pas ajoutée, sinon, impossible de se connecter au site. <filesMatch "\.(ico|jpe?g|png|gif|svg|swf|gz|ttf|eot|woff|html|htm|css|js|pl|cgi|spl|scgi|fcgi)$"> RequestHeader unset Cookie Header unset Cookie Header unset Set-Cookie </filesMatch> </IfModule> # Charger le certificat Let's Encrypt. <IfModule mod_ssl.c> SSLEngine on SSLCertificateFile /etc/letsencrypt/live/visionduweb.fr/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/visionduweb.fr/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/visionduweb.fr/chain.pem # Proposé avec le générateur SSL de Mozilla : https://ssl-config.mozilla.org # Configuration tolérante pour les anciens appareils : SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 # En autorisant les Ciphers suivant, les outils de monitoring sous Android continuerons de fonctionner : SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA SSLHonorCipherOrder on SSLSessionTickets off SSLCompression off SSLOptions +StrictRequire </IfModule> # La première règle évaluée par Apache2 consiste à limiter l'accès à toute l'arborescence du système Linux (/). <Directory /> Options None AllowOverride None Require all denied </Directory> # Autoriser uniquement mon IP locale pour l'accès à l'administration. <Directory /var/www/visionduweb.fr/administrator> Require all denied Require ip xx.xx.xxx.xx </Directory> # Ensuite, on relâche un minimum de possibilités en fonction des besoins du site. <Directory /var/www/visionduweb.fr> # Empêcher le suivi des liens symboliques. # J'autorise le suivi des liens symboliques : # Permet l'inclusion de la liste noire anti bad bots blocker. # Depuis le fichier de configuration complémentaire. Options +FollowSymLinks # Protéger l'accès aux répertoires. Options -Indexes # Désactiver Inclusions Côté Serveur (Server Side Includes / SSI) Options -Includes # Permet la prise en compte du fichier .htaccess AllowOverride All # Définir le fichier à appeler par défaut. DirectoryIndex index.php index.html ## Contrôle d'accès Apache 2.4 : # Require forward-dns 19.252.11.80.in-addr.arpa domain name pointer lmontsouris-657-1-225-19.w80-11.abo.wanadoo.fr. ## Contrôle d'accès Apache 2.4 : # Toutes les requêtes sont autorisées. Est commenté pour prendre en compte le script anti bad bot blocker. # Fonctionne depuis que j'ai renseigné DirectoryIndex. ## Require all granted # Require par IP permet uniquement l'accès au site depuis l'adresse IP fournie. # Require ip xx.xx.xx.xx # Inclure le script de liste noire anti bad bots : # https://github.com/mitchellkrogza/apache-ultimate-bad-bot-blocker/blob/master/Apache_2.4/README.md Include custom.d/globalblacklist.conf </Directory> # Protéger le fichier .htaccess : <files .htaccess> # Apache version 2.4 : Require all denied </files> # Sur le même principe le fichier configuration.php du CMS peut être protégé. # Toujours autoriser la consultation du fichier robots.txt : <Files robots.txt> Require all granted </Files> <IfModule mod_rewrite.c> RewriteEngine on # Redirection de https non-www vers https www RewriteCond %{SERVER_NAME} !^www\.(.*)$ [NC] RewriteRule ^ https://www.%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent] # Interdire l'affichage des types de fichiers suivants sur les sites non autorisés. # Visionduweb fr est autorisé. RewriteCond %{HTTP_REFERER} !^https://(.+.)?visionduweb.fr/ [NC] # Dans le cas d'un entête réécrit, une URL de provenance vide sera autorisée. RewriteCond %{HTTP_REFERER} !^$ # Rediriger les fichiers vers une image de hotlinking. RewriteRule .*.(jpe?g|gif|bmp|png)$ /images/structure/no-hotlinking.png [L] </IfModule> # Désactiver Etag. FileETag none # Activer la compression. <IfModule mod_deflate.c> SetOutputFilter DEFLATE AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/vnd.ms-fontobject AddOutputFilterByType DEFLATE application/x-font AddOutputFilterByType DEFLATE application/x-font-opentype AddOutputFilterByType DEFLATE application/x-font-otf AddOutputFilterByType DEFLATE application/x-font-truetype AddOutputFilterByType DEFLATE application/x-font-ttf AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE font/opentype AddOutputFilterByType DEFLATE font/otf AddOutputFilterByType DEFLATE font/ttf AddOutputFilterByType DEFLATE image/svg+xml AddOutputFilterByType DEFLATE image/x-icon AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/javascript AddOutputFilterByType DEFLATE text/plain </IfModule> # DEFLATE pour les navigateurs non compatibles. BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html # Mise en cache du navigateur. <IfModule mod_expires.c> ExpiresActive On # Mise en cache par défaut du navigateur. ExpiresDefault "access plus 1 month" # Images. ExpiresByType image/gif "access plus 1 year" ExpiresByType image/jpg "access plus 1 year" ExpiresByType image/jpeg "access plus 1 year" ExpiresByType image/png "access plus 1 year" AddType image/svg+xml .svg ExpiresByType image/svg+xml "access plus 1 year" AddType image/x-icon .ico ExpiresByType image/ico "access plus 1 year" ExpiresByType image/icon "access plus 1 year" ExpiresByType image/x-icon "access plus 1 year" # Structure du site. ExpiresByType application/xhtml+xml "access plus 1 week" ExpiresByType text/html "access plus 1 week" ExpiresByType text/css "access plus 1 week" ExpiresByType application/javascript "access plus 1 week" ExpiresByType text/x-javascript "access plus 1 week" ExpiresByType application/javascript "access plus 1 week" ExpiresByType application/x-javascript "access plus 1 week" ExpiresByType application/x-shockwave-flash "access plus 30 days" # Documents. ExpiresByType application/pdf "access plus 1 year" # Polices. AddType application/vnd.ms-fontobject .eot AddType application/x-font-ttf .ttf AddType application/x-font-opentype .otf AddType application/x-font-woff .woff ExpiresByType application/vnd.ms-fontobject "access 1 year" ExpiresByType application/x-font-ttf "access 1 year" ExpiresByType application/x-font-opentype "access 1 year" ExpiresByType application/x-font-woff "access 1 year" </IfModule> # Limitations contre les DoS. KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 5 # Toujours autoriser la consultation de ce message en cas d'erreur 403. <Files 403-forbidden.php> Require all granted </Files> # Erreur 403 - Forbidden. # Une adresse absolue charge l'url vers la nouvelle page. # Une adresse relative ne change pas l'url mais uniquement le contenu. ErrorDocument 403 https://www.visionduweb.fr/403-forbidden.php </VirtualHost>
Recharger la configuration de Apache2
# Recharger la configuration de Apache2 pour appliquer la nouvelle configuration. sudo apache2ctl restart
visionduweb.eu
# Le site visionduweb.eu possède son propre dossier sur le serveur Apache2. # /var/www/visionduweb.eu # Non !
# Créer le fichier de configuration pour le VirtualHost. sudo touch visionduweb.eu.conf sudo chown root:root visionduweb.eu.conf sudo chmod 644 visionduweb.eu.conf
# Activer le site et redémarrer Apache2 pour appliquer la nouvelle configuration. sudo a2ensite visionduweb.eu.conf sudo service apache2 restart
# Ajouter la configuration suivante dans le fichier visionduweb.eu.conf sudo nano visionduweb.eu.conf
visionduweb.eu écoute du port HTTP 80
# VirtualHost du domaine visionduweb.eu ## ## ## Port 80 ## ## ## <VirtualHost visionduweb.eu:80> ServerName visionduweb.eu ServerAlias www.visionduweb.eu # Ce vhost redirige de http vers https. 100% du trafic doit passer par https. # Les informations complémentaires sont inutiles. Pas de documentRoot, pas de logs. # La ligne suivante peut-être conservée dans le cas suivant : # Forcer le renouvellement ou recréer le certificat Let's Encrypt. # Renouveler avec : sudo certbot --force-renewal renew DocumentRoot /var/www/visionduweb.eu <IfModule mod_rewrite.c> RewriteEngine on # Redirection de http vers https. RewriteCond %{HTTPS} off # Le dossier .well-know de certbot doit être exclu de la réécriture d'URL. RewriteRule (^|/)\.(?!well-known) - [F] RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent] </IfModule> </VirtualHost>
visionduweb.eu écoute du port SSL 443
## ## ## Port 443 ## ## ## <VirtualHost visionduweb.eu:443> ServerName visionduweb.eu ServerAlias www.visionduweb.eu ServerAdmin mail@visionduweb.com DocumentRoot /var/www/visionduweb.eu # Comportement par défaut du niveau d'alerte retourné. # LogLevel warn ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined # CSP - Politique de sécurité du contenu. <IfModule mod_headers.c> # Charger l'entête HSTS. Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" # Sécuriser les Cookies. # Interdire l’utilisation du cookie côté client avec l’instruction HttpOnly. # Interdire l’utilisation du cookie sans HTTPs avec le flag Secure. Header always edit Set-Cookie (.*) "$1;HttpOnly;Secure" # Protéger des failles X-XSS X-Frame X-Content. Header set X-XSS-Protection "1; mode=block" Header always set X-Frame-Options "SAMEORIGIN" Header set X-Content-Type-Options nosniff # Certaines adresses ne sont pas ajoutées comme étant autorisées, comme celle de https://static.doubleclick.net/instream/ad_status.js” appelée lors de la consultation de ma playlist de Youtube. Header set Access-Control-Allow-Origin: "default-src 'self' https://www.visionduweb.eu" Header set Content-Security-Policy: "default-src 'self' https://www.visionduweb.eu; script-src 'self' 'unsafe-eval' 'unsafe-inline' https://www.visionduweb.eu https://www.youtube.com https://unpkg.com https://s.ytimg.com https://www.google.com https://www.gstatic.com; object-src 'self' https://www.visionduweb.eu; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; img-src 'self' https://www.visionduweb.eu https://i.ytimg.com https://secure.gravatar.com https://avatars3.githubusercontent.com; media-src 'self' https://www.visionduweb.eu https://youtu.be; frame-src 'self' https://www.visionduweb.eu https://www.youtube.com https://www.coingecko.com https://hackbbs.org:7777 https://www.spreaker.com https://widget.spreaker.com https://www.google.com; font-src 'self' 'unsafe-inline' https://www.visionduweb.eu https://fonts.gstatic.com data:; connect-src 'self' https://www.visionduweb.eu https://api.github.com; frame-ancestors 'self'" # Le navigateur n'enverra pas l'en-tête du référent lors de la navigation de HTTPS vers HTTP. Header always set Referrer-Policy 'no-referrer-when-downgrade' # Identique à CSP mais au lieu de contrôler la sécurité c'est un contrôle des fonctionnalités. Header always set Feature-Policy "geolocation none;midi none;notifications none;push none;sync-xhr self;microphone none;camera none;magnetometer none;gyroscope none;speaker self;vibrate none;fullscreen self;payment none;" # Contrôle du cache navigateur. # Ne pas mettre en cache si ces fichiers le sont déjà. SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip # Désactiver le cache pour les scripts et fichiers dynamiques. <FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$"> Header unset Cache-Control </FilesMatch> # Mettre en cache les éléments suivants. <filesmatch "\.(gif|ico|jpe?g|png)$"> # Mise en cache de une année. Header set Cache-Control "max-age=33566400, public" </filesmatch> <filesmatch "\.(html|htm|css)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=604800, public" </filesmatch> <filesmatch "\.(js)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=604800, private" </filesmatch> <filesmatch "\.(gz|pdf|ttf)$"> # Mise en cache de une année. (Je n'ai pas le type gz présent dans les entêtes Expires.) Header set Cache-Control "max-age=33566400, public" </filesmatch> <filesmatch "\.(flv|swf)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=33566400, public" </filesmatch> # Économiser les requêtes de cookies. # L'extension php n'est pas ajoutée, sinon, impossible de se connecter au site. <filesMatch "\\.(ico|jpe?g|png|gif|svg|swf|gz|ttf|eot|woff|html|htm|css|js|pl|cgi|spl|scgi|fcgi)$"> RequestHeader unset Cookie Header unset Cookie Header unset Set-Cookie </filesMatch> </IfModule> # Charger le certificat Let's Encrypt. <IfModule mod_ssl.c> SSLEngine on SSLCertificateFile /etc/letsencrypt/live/visionduweb.eu/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/visionduweb.eu/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/visionduweb.eu/chain.pem SSLProtocol all -SSLv2 -SSLv3 SSLHonorCipherOrder on SSLCompression off SSLOptions +StrictRequire SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA </IfModule> <Directory /var/www/visionduweb.eu> # Empêcher le suivi des liens symboliques. Options -FollowSymLinks # Protéger l'accès aux répertoires. Options -Indexes # Désactiver Inclusions Côté Serveur - Server Side Includes - SSI. Options -Includes # Permet la prise en compte du fichier .htaccess. AllowOverride All # Définir le fichier à appeler par défaut. DirectoryIndex index.php index.html ## Contrôle d'accès Apache 2.2 : # Toutes les requêtes sont autorisées. # Fonctionne aussi sur Apache 2.4. # Order allow,deny # allow from all ## Contrôle d'accès Apache 2.4 : # Uniquement les requêtes de visionduweb.eu sont autorisées. # Pourtant cela ne fonctionne pas ! You don't have permission to access / on this server. #<RequireAll> #Require host monhostname #</RequireAll> ####Require forward-dns alien ## Contrôle d'accès Apache 2.4 : # Toutes les requêtes sont autorisées. # Fonctionne depuis que j'ai renseigné DirectoryIndex. Require all granted # Contrôle d'accès Apache 2.4 : # Require par IP permet uniquement l'accès au site depuis l'adresse IP fournie. # Require ip xx.xx.xx.xx </Directory> # Protéger le fichier .htaccess : <files .htaccess> # Apache version 2.4 : Require all denied </files> # Sur le même principe le fichier configuration.php du CMS peut être protégé. <IfModule mod_rewrite.c> RewriteEngine on # Redirection de https non-www vers https www RewriteCond %{SERVER_NAME} !^www\.(.*)$ [NC] RewriteRule ^ https://www.%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent] # Interdire l'affichage des types de fichiers suivants sur les sites non autorisés. # Visionduweb fr est autorisé. RewriteCond %{HTTP_REFERER} !^https://(.+.)?visionduweb.eu/ [NC] # Dans le cas d'un entête réécrit, une URL de provenance vide sera autorisée. RewriteCond %{HTTP_REFERER} !^$ # Rediriger les fichiers vers une image de hotlinking. RewriteRule .*.(jpe?g|gif|bmp|png)$ /images/structure/no-hotlinking.png [L] </IfModule> # Désactiver Etag. FileETag none
# Activer la compression. <IfModule mod_deflate.c> SetOutputFilter DEFLATE AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/vnd.ms-fontobject AddOutputFilterByType DEFLATE application/x-font AddOutputFilterByType DEFLATE application/x-font-opentype AddOutputFilterByType DEFLATE application/x-font-otf AddOutputFilterByType DEFLATE application/x-font-truetype AddOutputFilterByType DEFLATE application/x-font-ttf AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE font/opentype AddOutputFilterByType DEFLATE font/otf AddOutputFilterByType DEFLATE font/ttf AddOutputFilterByType DEFLATE image/svg+xml AddOutputFilterByType DEFLATE image/x-icon AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/javascript AddOutputFilterByType DEFLATE text/plain </IfModule> # DEFLATE pour les navigateurs non compatibles. BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html # Mise en cache du navigateur. <IfModule mod_expires.c> ExpiresActive On # Mise en cache par défaut du navigateur. ExpiresDefault "access plus 1 month" # Images. ExpiresByType image/gif "access plus 1 year" ExpiresByType image/jpg "access plus 1 year" ExpiresByType image/jpeg "access plus 1 year" ExpiresByType image/png "access plus 1 year" AddType image/svg+xml .svg ExpiresByType image/svg+xml "access plus 1 year" AddType image/x-icon .ico ExpiresByType image/ico "access plus 1 year" ExpiresByType image/icon "access plus 1 year" ExpiresByType image/x-icon "access plus 1 year" # Structure du site. ExpiresByType application/xhtml+xml "access plus 1 week" ExpiresByType text/html "access plus 1 week" ExpiresByType text/css "access plus 1 week" ExpiresByType application/javascript "access plus 1 week" ExpiresByType text/x-javascript "access plus 1 week" ExpiresByType application/javascript "access plus 1 week" ExpiresByType application/x-javascript "access plus 1 week" ExpiresByType application/x-shockwave-flash "access plus 30 days" # Documents. ExpiresByType application/pdf "access plus 1 year" # Polices. AddType application/vnd.ms-fontobject .eot AddType application/x-font-ttf .ttf AddType application/x-font-opentype .otf AddType application/x-font-woff .woff ExpiresByType application/vnd.ms-fontobject "access 1 year" ExpiresByType application/x-font-ttf "access 1 year" ExpiresByType application/x-font-opentype "access 1 year" ExpiresByType application/x-font-woff "access 1 year" </IfModule> # Limitations contre les DoS. KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 5 # Toujours autoriser la consultation de ce message en cas d'erreur 403. <Files 403-forbidden.php> Require all granted </Files> # Erreur 403 - Forbidden. ErrorDocument 403 https://www.visionduweb.eu/403-forbidden.php </VirtualHost>
Recharger la configuration de Apache2
# Recharger la configuration de Apache2 pour appliquer la nouvelle configuration. sudo apache2ctl restart
visionduweb.info
# Le site visionduweb.info possède son propre dossier sur le serveur Apache2. # /var/www/visionduweb.info # Non !
# Créer le fichier de configuration pour le VirtualHost. sudo touch visionduweb.info.conf sudo chown root:root visionduweb.info.conf sudo chmod 644 visionduweb.info.conf
# Activer le site et redémarrer Apache2 pour appliquer la nouvelle configuration. sudo a2ensite visionduweb.info.conf sudo service apache2 restart
# Ajouter la configuration suivante dans le fichier visionduweb.info.conf sudo nano visionduweb.info.conf
visionduweb.info écoute du port HTTP 80
# VirtualHost du domaine visionduweb.info ## ## ## Port 80 ## ## ## <VirtualHost visionduweb.info:80> ServerName visionduweb.info ServerAlias www.visionduweb.info # Ce vhost redirige de http vers https. 100% du trafic doit passer par https. # Les informations complémentaires sont inutiles. Pas de documentRoot, pas de logs. # La ligne suivante peut-être conservée dans le cas suivant : # Forcer le renouvellement ou recréer le certificat Let's Encrypt. # Renouveler avec : sudo certbot --force-renewal renew DocumentRoot /var/www/visionduweb.info <IfModule mod_rewrite.c> RewriteEngine on # Redirection de http vers https. RewriteCond %{HTTPS} off # Le dossier .well-know de certbot doit être exclu de la réécriture d'URL. RewriteRule (^|/)\.(?!well-known) - [F] RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent] </IfModule> </VirtualHost>
visionduweb.info écoute du port SSL 443
## ## ## Port 443 ## ## ## <VirtualHost visionduweb.info:443> ServerName visionduweb.info ServerAlias www.visionduweb.info ServerAdmin mail@visionduweb.com DocumentRoot /var/www/visionduweb.info # Comportement par défaut du niveau d'alerte retourné. # LogLevel warn ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined # CSP - Politique de sécurité du contenu. <IfModule mod_headers.c> # Charger l'entête HSTS. Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" # Sécuriser les Cookies. # Interdire l’utilisation du cookie côté client avec l’instruction HttpOnly. # Interdire l’utilisation du cookie sans HTTPs avec le flag Secure. Header always edit Set-Cookie (.*) "$1;HttpOnly;Secure" # Protéger des failles X-XSS X-Frame X-Content. Header set X-XSS-Protection "1; mode=block" Header always set X-Frame-Options "SAMEORIGIN" Header set X-Content-Type-Options nosniff # Certaines adresses ne sont pas ajoutées comme étant autorisées, comme celle de https://static.doubleclick.net/instream/ad_status.js” appelée lors de la consultation de ma playlist de Youtube. Header set Access-Control-Allow-Origin: "default-src 'self' https://www.visionduweb.info" Header set Content-Security-Policy: "default-src 'self' https://www.visionduweb.info; script-src 'self' 'unsafe-eval' 'unsafe-inline' https://www.visionduweb.info https://www.youtube.com https://unpkg.com https://s.ytimg.com https://www.google.com https://www.gstatic.com; object-src 'self' https://www.visionduweb.info; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; img-src 'self' https://www.visionduweb.info https://i.ytimg.com https://secure.gravatar.com https://avatars3.githubusercontent.com; media-src 'self' https://www.visionduweb.info https://youtu.be; frame-src 'self' https://www.visionduweb.info https://www.youtube.com https://www.coingecko.com https://hackbbs.org:7777 https://www.spreaker.com https://widget.spreaker.com https://www.google.com; font-src 'self' 'unsafe-inline' https://www.visionduweb.info https://fonts.gstatic.com data:; connect-src 'self' https://www.visionduweb.info https://api.github.com; frame-ancestors 'self'" # Le navigateur n'enverra pas l'en-tête du référent lors de la navigation de HTTPS vers HTTP. Header always set Referrer-Policy 'no-referrer-when-downgrade' # Identique à CSP mais au lieu de contrôler la sécurité c'est un contrôle des fonctionnalités. Header always set Feature-Policy "geolocation none;midi none;notifications none;push none;sync-xhr self;microphone none;camera none;magnetometer none;gyroscope none;speaker self;vibrate none;fullscreen self;payment none;" # Contrôle du cache navigateur. # Ne pas mettre en cache si ces fichiers le sont déjà. SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip # Désactiver le cache pour les scripts et fichiers dynamiques. <FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$"> Header unset Cache-Control </FilesMatch> # Mettre en cache les éléments suivants. <filesmatch "\.(gif|ico|jpe?g|png)$"> # Mise en cache de une année. Header set Cache-Control "max-age=33566400, public" </filesmatch> <filesmatch "\.(html|htm|css)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=604800, public" </filesmatch> <filesmatch "\.(js)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=604800, private" </filesmatch> <filesmatch "\.(gz|pdf|ttf)$"> # Mise en cache de une année. (Je n'ai pas le type gz présent dans les entêtes Expires.) Header set Cache-Control "max-age=33566400, public" </filesmatch> <filesmatch "\.(flv|swf)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=33566400, public" </filesmatch> # Économiser les requêtes de cookies. # L'extension php n'est pas ajoutée, sinon, impossible de se connecter au site. <filesMatch "\\.(ico|jpe?g|png|gif|svg|swf|gz|ttf|eot|woff|html|htm|css|js|pl|cgi|spl|scgi|fcgi)$"> RequestHeader unset Cookie Header unset Cookie Header unset Set-Cookie </filesMatch> </IfModule> # Charger le certificat Let's Encrypt. <IfModule mod_ssl.c> SSLEngine on SSLCertificateFile /etc/letsencrypt/live/visionduweb.info/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/visionduweb.info/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/visionduweb.info/chain.pem SSLProtocol all -SSLv2 -SSLv3 SSLHonorCipherOrder on SSLCompression off SSLOptions +StrictRequire SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA </IfModule> <Directory /var/www/visionduweb.info> # Empêcher le suivi des liens symboliques. Options -FollowSymLinks # Protéger l'accès aux répertoires. Options -Indexes # Désactiver Inclusions Côté Serveur - Server Side Includes - SSI. Options -Includes # Permet la prise en compte du fichier .htaccess. AllowOverride All # Définir le fichier à appeler par défaut. DirectoryIndex index.php index.html ## Contrôle d'accès Apache 2.2 : # Toutes les requêtes sont autorisées. # Fonctionne aussi sur Apache 2.4. # Order allow,deny # allow from all ## Contrôle d'accès Apache 2.4 : # Uniquement les requêtes de visionduweb.info sont autorisées. # Pourtant cela ne fonctionne pas ! You don't have permission to access / on this server. #<RequireAll> #Require host monhostname #</RequireAll> ####Require forward-dns alien ## Contrôle d'accès Apache 2.4 : # Toutes les requêtes sont autorisées. # Fonctionne depuis que j'ai renseigné DirectoryIndex. Require all granted # Contrôle d'accès Apache 2.4 : # Require par IP permet uniquement l'accès au site depuis l'adresse IP fournie. # Require ip xx.xx.xx.xx </Directory> # Protéger le fichier .htaccess : <files .htaccess> # Apache version 2.4 : Require all denied </files> # Sur le même principe le fichier configuration.php du CMS peut être protégé. <IfModule mod_rewrite.c> RewriteEngine on # Redirection de https non-www vers https www RewriteCond %{SERVER_NAME} !^www\.(.*)$ [NC] RewriteRule ^ https://www.%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent] # Interdire l'affichage des types de fichiers suivants sur les sites non autorisés. # Visionduweb fr est autorisé. RewriteCond %{HTTP_REFERER} !^https://(.+.)?visionduweb.info/ [NC] # Dans le cas d'un entête réécrit, une URL de provenance vide sera autorisée. RewriteCond %{HTTP_REFERER} !^$ # Rediriger les fichiers vers une image de hotlinking. RewriteRule .*.(jpe?g|gif|bmp|png)$ /images/structure/no-hotlinking.png [L] </IfModule> # Désactiver Etag. FileETag none
# Activer la compression. <IfModule mod_deflate.c> SetOutputFilter DEFLATE AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/vnd.ms-fontobject AddOutputFilterByType DEFLATE application/x-font AddOutputFilterByType DEFLATE application/x-font-opentype AddOutputFilterByType DEFLATE application/x-font-otf AddOutputFilterByType DEFLATE application/x-font-truetype AddOutputFilterByType DEFLATE application/x-font-ttf AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE font/opentype AddOutputFilterByType DEFLATE font/otf AddOutputFilterByType DEFLATE font/ttf AddOutputFilterByType DEFLATE image/svg+xml AddOutputFilterByType DEFLATE image/x-icon AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/javascript AddOutputFilterByType DEFLATE text/plain </IfModule> # DEFLATE pour les navigateurs non compatibles. BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html # Mise en cache du navigateur. <IfModule mod_expires.c> ExpiresActive On # Mise en cache par défaut du navigateur. ExpiresDefault "access plus 1 month" # Images. ExpiresByType image/gif "access plus 1 year" ExpiresByType image/jpg "access plus 1 year" ExpiresByType image/jpeg "access plus 1 year" ExpiresByType image/png "access plus 1 year" AddType image/svg+xml .svg ExpiresByType image/svg+xml "access plus 1 year" AddType image/x-icon .ico ExpiresByType image/ico "access plus 1 year" ExpiresByType image/icon "access plus 1 year" ExpiresByType image/x-icon "access plus 1 year" # Structure du site. ExpiresByType application/xhtml+xml "access plus 1 week" ExpiresByType text/html "access plus 1 week" ExpiresByType text/css "access plus 1 week" ExpiresByType application/javascript "access plus 1 week" ExpiresByType text/x-javascript "access plus 1 week" ExpiresByType application/javascript "access plus 1 week" ExpiresByType application/x-javascript "access plus 1 week" ExpiresByType application/x-shockwave-flash "access plus 30 days" # Documents. ExpiresByType application/pdf "access plus 1 year" # Polices. AddType application/vnd.ms-fontobject .eot AddType application/x-font-ttf .ttf AddType application/x-font-opentype .otf AddType application/x-font-woff .woff ExpiresByType application/vnd.ms-fontobject "access 1 year" ExpiresByType application/x-font-ttf "access 1 year" ExpiresByType application/x-font-opentype "access 1 year" ExpiresByType application/x-font-woff "access 1 year" </IfModule> # Limitations contre les DoS. KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 5 # Toujours autoriser la consultation de ce message en cas d'erreur 403. <Files 403-forbidden.php> Require all granted </Files> # Erreur 403 - Forbidden. ErrorDocument 403 https://www.visionduweb.info/403-forbidden.php </VirtualHost>
Recharger la configuration de Apache2
# Recharger la configuration de Apache2 pour appliquer la nouvelle configuration. sudo apache2ctl restart
wiki.visionduweb.fr
# Le site wiki.visionduweb.fr possède son propre dossier sur le serveur Apache2. # /var/www/wiki.visionduweb.fr
# Créer le fichier de configuration pour le VirtualHost. sudo touch wiki.visionduweb.fr.conf sudo chown root:root wiki.visionduweb.fr.conf sudo chmod 644 wiki.visionduweb.fr.conf
# Activer le site et redémarrer Apache2 pour appliquer la nouvelle configuration. sudo a2ensite wiki.visionduweb.fr.conf sudo service apache2 restart
# Ajouter la configuration suivante dans le fichier wiki.visionduweb.fr.conf sudo nano wiki.visionduweb.fr.conf
wiki.visionduweb.fr écoute du port HTTP 80
# VirtualHost du domaine wiki.visionduweb.fr ## ## ## Port 80 ## ## ## <VirtualHost wiki.visionduweb.fr:80> ServerName wiki.visionduweb.fr # Ce vhost redirige de http vers https. 100% du trafic doit passer par https. # Les informations complémentaires sont inutiles. Pas de documentRoot, pas de logs. # La ligne suivante peut-être conservée dans le cas suivant : # Forcer le renouvellement ou recréer le certificat Let's Encrypt. # Renouveler avec : sudo certbot --force-renewal renew DocumentRoot /var/www/wiki.visionduweb.fr <IfModule mod_rewrite.c> RewriteEngine on # Redirection de http vers https. RewriteCond %{HTTPS} off # Le dossier .well-know de certbot doit être exclu de la réécriture d'URL. RewriteRule (^|/)\.(?!well-known) - [F] RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent] </IfModule> </VirtualHost>
wiki.visionduweb.fr écoute du port SSL 443
## ## ## Port 443 ## ## ## <VirtualHost wiki.visionduweb.fr:443> ServerName wiki.visionduweb.fr ServerAdmin mail@visionduweb.com DocumentRoot /var/www/wiki.visionduweb.fr # Définir la valeur open_basedir pour le wiki. # SetEnv PHP_ADMIN_VALUE "open_basedir=/var/www/wiki.visionduweb.fr/:/tmp/" # Comportement par défaut du niveau d'alerte retourné. # LogLevel warn ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined # CSP - Politique de sécurité du contenu. <IfModule mod_headers.c> # Charger l'entête HSTS. Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" # Sécuriser les Cookies. # Interdire l’utilisation du cookie côté client avec l’instruction HttpOnly. # Interdire l’utilisation du cookie sans HTTPs avec le flag Secure. Header always edit Set-Cookie (.*) "$1;HttpOnly;Secure" # Protéger des failles X-XSS X-Frame X-Content. Header set X-XSS-Protection "1; mode=block" Header always set X-Frame-Options "SAMEORIGIN" Header set X-Content-Type-Options nosniff # Certaines adresses ne sont pas ajoutées comme étant autorisées, comme celle de https://static.doubleclick.net/instream/ad_status.js” appelée lors de la consultation de ma playlist de Youtube. Header set Access-Control-Allow-Origin: "default-src 'self' https://www.wiki.visionduweb.fr" # Header set Content-Security-Policy: "default-src 'self' https://www.wiki.visionduweb.fr; script-src 'self' 'unsafe-inline' https://www.wiki.visionduweb.fr https://www.youtube.com https://s.ytimg.com https://www.google.com https://www.gstatic.com; object-src 'self' https://www.wiki.visionduweb.fr; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; img-src 'self' https://www.wiki.visionduweb.fr https://i.ytimg.com https://secure.gravatar.com; media-src 'self' https://www.wiki.visionduweb.fr https://youtu.be; frame-src 'self' https://www.wiki.visionduweb.fr https://www.youtube.com https://www.coingecko.com https://hackbbs.org:7777 https://www.spreaker.com https://widget.spreaker.com https://www.google.com; font-src 'self' 'unsafe-inline' https://www.wiki.visionduweb.fr https://fonts.gstatic.com data:; connect-src 'self' https://www.wiki.visionduweb.fr; frame-ancestors 'self'" # Le navigateur n'enverra pas l'en-tête du référent lors de la navigation de HTTPS vers HTTP. Header always set Referrer-Policy 'no-referrer-when-downgrade' # Identique à CSP mais au lieu de contrôler la sécurité c'est un contrôle des fonctionnalités. Header always set Feature-Policy "geolocation none;midi none;notifications none;push none;sync-xhr self;microphone none;camera none;magnetometer none;gyroscope none;speaker self;vibrate none;fullscreen self;payment none;" # Contrôle du cache navigateur. # Ne pas mettre en cache si ces fichiers le sont déjà. SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip # Désactiver le cache pour les scripts et fichiers dynamiques. <FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$"> Header unset Cache-Control </FilesMatch> # Mettre en cache les éléments suivants. <filesmatch "\.(gif|ico|jpe?g|png)$"> # Mise en cache de une année. Header set Cache-Control "max-age=33566400, public" # Économiser des requêtes de cookie sur les images. RequestHeader unset Cookie Header unset Cookie Header unset Set-Cookie </filesmatch> <filesmatch "\.(html|htm|css)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=604800, public" </filesmatch> <filesmatch "\.(js)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=604800, private" </filesmatch> <filesmatch "\.(gz|pdf|ttf)$"> # Mise en cache de une année. (Je n'ai pas le type gz présent dans les entêtes Expires.) Header set Cache-Control "max-age=33566400, public" </filesmatch> <filesmatch "\.(flv|swf)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=33566400, public" </filesmatch> </IfModule> # Charger le certificat Let's Encrypt. <IfModule mod_ssl.c> SSLEngine on SSLCertificateFile /etc/letsencrypt/live/wiki.visionduweb.fr/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/wiki.visionduweb.fr/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/wiki.visionduweb.fr/chain.pem SSLProtocol all -SSLv2 -SSLv3 SSLHonorCipherOrder on SSLCompression off SSLOptions +StrictRequire SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA </IfModule> # La première règle évaluée par Apache2 consiste à limiter l'accès à toute l'arborescence du système Linux (/). <Directory /> Require all denied </Directory> <Directory /var/www/wiki.visionduweb.fr> # Empêcher le suivi des liens symboliques. Options -FollowSymLinks # Protéger l'accès aux répertoires. Options -Indexes # Désactiver Inclusions Côté Serveur - Server Side Includes - SSI. Options -Includes # Permet la prise en compte du fichier .htaccess. AllowOverride All # Définir le fichier à appeler par défaut. DirectoryIndex index.php index.html ## Contrôle d'accès Apache 2.2 : # Toutes les requêtes sont autorisées. # Fonctionne aussi sur Apache 2.4. # Order allow,deny # allow from all ## Contrôle d'accès Apache 2.4 : # Uniquement les requêtes de wiki.visionduweb.fr sont autorisées. # Pourtant cela ne fonctionne pas ! You don't have permission to access / on this server. #<RequireAll> #Require host monhostname #</RequireAll> ####Require forward-dns alien ## Contrôle d'accès Apache 2.4 : # Toutes les requêtes sont autorisées. # Fonctionne depuis que j'ai renseigné DirectoryIndex. Require all granted # Contrôle d'accès Apache 2.4 : # Require par IP permet uniquement l'accès au site depuis l'adresse IP fournie. # Require ip xx.xx.xx.xx # Inclure le script de liste noire anti bad bots : # https://github.com/mitchellkrogza/apache-ultimate-bad-bot-blocker/blob/master/Apache_2.4/README.md Include custom.d/globalblacklist.conf </Directory> # Protéger le fichier .htaccess : <files .htaccess> # Apache version 2.4 : Require all denied </files> # Toujours autoriser la consultation du fichier robots.txt : <Files robots.txt> Require all granted </Files> <IfModule mod_rewrite.c> RewriteEngine on # Interdire l'affichage des types de fichiers suivants sur les sites non autorisés. # Visionduweb fr est autorisé. RewriteCond %{HTTP_REFERER} !^https://wiki.visionduweb.fr/ [NC] # Dans le cas d'un entête réécrit, une URL de provenance vide sera autorisée. RewriteCond %{HTTP_REFERER} !^$ # Rediriger les fichiers vers une image de hotlinking. RewriteRule .*.(jpe?g|gif|bmp|png)$ https://www.visionduweb.fr/images/structure/no-hotlinking.png [L] </IfModule> # Désactiver Etag. FileETag none # Activer la compression. <IfModule mod_deflate.c> SetOutputFilter DEFLATE AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/vnd.ms-fontobject AddOutputFilterByType DEFLATE application/x-font AddOutputFilterByType DEFLATE application/x-font-opentype AddOutputFilterByType DEFLATE application/x-font-otf AddOutputFilterByType DEFLATE application/x-font-truetype AddOutputFilterByType DEFLATE application/x-font-ttf AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE font/opentype AddOutputFilterByType DEFLATE font/otf AddOutputFilterByType DEFLATE font/ttf AddOutputFilterByType DEFLATE image/svg+xml AddOutputFilterByType DEFLATE image/x-icon AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/javascript AddOutputFilterByType DEFLATE text/plain </IfModule> # DEFLATE pour les navigateurs non compatibles. BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html # Mise en cache du navigateur. <IfModule mod_expires.c> ExpiresActive On # Mise en cache par défaut du navigateur. ExpiresDefault "access plus 1 month" # Images. ExpiresByType image/gif "access plus 1 year" ExpiresByType image/jpg "access plus 1 year" ExpiresByType image/jpeg "access plus 1 year" ExpiresByType image/png "access plus 1 year" AddType image/svg+xml .svg ExpiresByType image/svg+xml "access plus 1 year" AddType image/x-icon .ico ExpiresByType image/ico "access plus 1 year" ExpiresByType image/icon "access plus 1 year" ExpiresByType image/x-icon "access plus 1 year" # Structure du site. ExpiresByType application/xhtml+xml "access plus 1 week" ExpiresByType text/html "access plus 1 week" ExpiresByType text/css "access plus 1 week" ExpiresByType application/javascript "access plus 1 week" ExpiresByType text/x-javascript "access plus 1 week" ExpiresByType application/javascript "access plus 1 week" ExpiresByType application/x-javascript "access plus 1 week" ExpiresByType application/x-shockwave-flash "access plus 30 days" # Documents. ExpiresByType application/pdf "access plus 1 year" # Polices. AddType application/vnd.ms-fontobject .eot AddType application/x-font-ttf .ttf AddType application/x-font-opentype .otf AddType application/x-font-woff .woff ExpiresByType application/vnd.ms-fontobject "access 1 year" ExpiresByType application/x-font-ttf "access 1 year" ExpiresByType application/x-font-opentype "access 1 year" ExpiresByType application/x-font-woff "access 1 year" </IfModule> # Limitations contre les DoS. KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 5 # Toujours refuser la lecture des fichiers de log. <Files *.log> Require all denied </Files> # Toujours autoriser la consultation de ce message en cas d'erreur 403. <Files 403-forbidden*> Require all granted </Files> # Erreur 403 - Forbidden. # Une adresse absolue charge l'url vers la nouvelle page. # Une adresse relative ne change pas l'url mais uniquement le contenu. ErrorDocument 403 https://wiki.visionduweb.fr/403-forbidden.php </VirtualHost>
Recharger la configuration de Apache2
# Recharger la configuration de Apache2 pour appliquer la nouvelle configuration. sudo apache2ctl restart
mediawiki.visionduweb.fr
# Le site mediawiki.visionduweb.fr utilise le dossier du site déjà existant sur le serveur Apache2. # /var/www/wiki.visionduweb.fr
# Ce VirtualHost permet de contourner la censure mise en place par Facebook sur mon wiki !
# Créer le fichier de configuration pour le VirtualHost. sudo touch mediawiki.visionduweb.fr.conf sudo chown root:root mediawiki.visionduweb.fr.conf sudo chmod 644 mediawiki.visionduweb.fr.conf
# Activer le site et redémarrer Apache2 pour appliquer la nouvelle configuration. sudo a2ensite mediawiki.visionduweb.fr.conf sudo service apache2 restart
# Ajouter la configuration suivante dans le fichier mediawiki.visionduweb.fr.conf sudo nano mediawiki.visionduweb.fr.conf
mediawiki.visionduweb.fr écoute du port HTTP 80
# VirtualHost du domaine mediawiki.visionduweb.fr ## ## ## Port 80 ## ## ## <VirtualHost mediawiki.visionduweb.fr:80> ServerName mediawiki.visionduweb.fr # Ce vhost redirige de http vers https. 100% du trafic doit passer par https. # Les informations complémentaires sont inutiles. Pas de documentRoot, pas de logs. # La ligne suivante peut-être conservée dans le cas suivant : # Forcer le renouvellement ou recréer le certificat Let's Encrypt. # Renouveler avec : sudo certbot --force-renewal renew DocumentRoot /var/www/wiki.visionduweb.fr <IfModule mod_rewrite.c> RewriteEngine on # Redirection de http vers https. RewriteCond %{HTTPS} off # Le dossier .well-know de certbot doit être exclu de la réécriture d'URL. RewriteRule (^|/)\.(?!well-known) - [F] RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent] </IfModule> </VirtualHost>
mediawiki.visionduweb.fr écoute du port SSL 443
## ## ## Port 443 ## ## ## <VirtualHost mediawiki.visionduweb.fr:443> ServerName mediawiki.visionduweb.fr ServerAdmin mail@visionduweb.com DocumentRoot /var/www/wiki.visionduweb.fr # Définir la valeur open_basedir pour le wiki. # SetEnv PHP_ADMIN_VALUE "open_basedir=/var/www/mediawiki.visionduweb.fr/:/tmp/" # Comportement par défaut du niveau d'alerte retourné. # LogLevel warn ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined # CSP - Politique de sécurité du contenu. <IfModule mod_headers.c> # Charger l'entête HSTS. Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" # Sécuriser les Cookies. # Interdire l’utilisation du cookie côté client avec l’instruction HttpOnly. # Interdire l’utilisation du cookie sans HTTPs avec le flag Secure. Header always edit Set-Cookie (.*) "$1;HttpOnly;Secure" # Protéger des failles X-XSS X-Frame X-Content. Header set X-XSS-Protection "1; mode=block" Header always set X-Frame-Options "SAMEORIGIN" Header set X-Content-Type-Options nosniff # Certaines adresses ne sont pas ajoutées comme étant autorisées, comme celle de https://static.doubleclick.net/instream/ad_status.js” appelée lors de la consultation de ma playlist de Youtube. Header set Access-Control-Allow-Origin: "default-src 'self' https://www.mediawiki.visionduweb.fr" # Header set Content-Security-Policy: "default-src 'self' https://www.mediawiki.visionduweb.fr; script-src 'self' 'unsafe-inline' https://www.mediawiki.visionduweb.fr https://www.youtube.com https://s.ytimg.com https://www.google.com https://www.gstatic.com; object-src 'self' https://www.mediawiki.visionduweb.fr; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; img-src 'self' https://www.mediawiki.visionduweb.fr https://i.ytimg.com https://secure.gravatar.com; media-src 'self' https://www.mediawiki.visionduweb.fr https://youtu.be; frame-src 'self' https://www.mediawiki.visionduweb.fr https://www.youtube.com https://www.coingecko.com https://hackbbs.org:7777 https://www.spreaker.com https://widget.spreaker.com https://www.google.com; font-src 'self' 'unsafe-inline' https://www.mediawiki.visionduweb.fr https://fonts.gstatic.com data:; connect-src 'self' https://www.mediawiki.visionduweb.fr; frame-ancestors 'self'" # Le navigateur n'enverra pas l'en-tête du référent lors de la navigation de HTTPS vers HTTP. Header always set Referrer-Policy 'no-referrer-when-downgrade' # Identique à CSP mais au lieu de contrôler la sécurité c'est un contrôle des fonctionnalités. Header always set Feature-Policy "geolocation none;midi none;notifications none;push none;sync-xhr self;microphone none;camera none;magnetometer none;gyroscope none;speaker self;vibrate none;fullscreen self;payment none;" # Contrôle du cache navigateur. # Ne pas mettre en cache si ces fichiers le sont déjà. SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip # Désactiver le cache pour les scripts et fichiers dynamiques. <FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$"> Header unset Cache-Control </FilesMatch> # Mettre en cache les éléments suivants. <filesmatch "\.(gif|ico|jpe?g|png)$"> # Mise en cache de une année. Header set Cache-Control "max-age=33566400, public" # Économiser des requêtes de cookie sur les images. RequestHeader unset Cookie Header unset Cookie Header unset Set-Cookie </filesmatch> <filesmatch "\.(html|htm|css)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=604800, public" </filesmatch> <filesmatch "\.(js)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=604800, private" </filesmatch> <filesmatch "\.(gz|pdf|ttf)$"> # Mise en cache de une année. (Je n'ai pas le type gz présent dans les entêtes Expires.) Header set Cache-Control "max-age=33566400, public" </filesmatch> <filesmatch "\.(flv|swf)$"> # Mise en cache de une semaine. Header set Cache-Control "max-age=33566400, public" </filesmatch> </IfModule> # Charger le certificat Let's Encrypt. <IfModule mod_ssl.c> SSLEngine on SSLCertificateFile /etc/letsencrypt/live/mediawiki.visionduweb.fr/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/mediawiki.visionduweb.fr/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/mediawiki.visionduweb.fr/chain.pem SSLProtocol all -SSLv2 -SSLv3 SSLHonorCipherOrder on SSLCompression off SSLOptions +StrictRequire SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA </IfModule> # La première règle évaluée par Apache2 consiste à limiter l'accès à toute l'arborescence du système Linux (/). <Directory /> Require all denied </Directory> <Directory /var/www/wiki.visionduweb.fr> # Empêcher le suivi des liens symboliques. Options -FollowSymLinks # Protéger l'accès aux répertoires. Options -Indexes # Désactiver Inclusions Côté Serveur - Server Side Includes - SSI. Options -Includes # Permet la prise en compte du fichier .htaccess. AllowOverride All # Définir le fichier à appeler par défaut. DirectoryIndex index.php index.html ## Contrôle d'accès Apache 2.2 : # Toutes les requêtes sont autorisées. # Fonctionne aussi sur Apache 2.4. # Order allow,deny # allow from all ## Contrôle d'accès Apache 2.4 : # Uniquement les requêtes de mediawiki.visionduweb.fr sont autorisées. # Pourtant cela ne fonctionne pas ! You don't have permission to access / on this server. #<RequireAll> #Require host monhostname #</RequireAll> ####Require forward-dns alien ## Contrôle d'accès Apache 2.4 : # Toutes les requêtes sont autorisées. # Fonctionne depuis que j'ai renseigné DirectoryIndex. Require all granted # Contrôle d'accès Apache 2.4 : # Require par IP permet uniquement l'accès au site depuis l'adresse IP fournie. # Require ip xx.xx.xx.xx # Inclure le script de liste noire anti bad bots : # https://github.com/mitchellkrogza/apache-ultimate-bad-bot-blocker/blob/master/Apache_2.4/README.md Include custom.d/globalblacklist.conf </Directory> # Protéger le fichier .htaccess : <files .htaccess> # Apache version 2.4 : Require all denied </files> # Toujours autoriser la consultation du fichier robots.txt : <Files robots.txt> Require all granted </Files> <IfModule mod_rewrite.c> RewriteEngine on # Interdire l'affichage des types de fichiers suivants sur les sites non autorisés. # Visionduweb fr est autorisé. RewriteCond %{HTTP_REFERER} !^https://mediawiki.visionduweb.fr/ [NC] # Dans le cas d'un entête réécrit, une URL de provenance vide sera autorisée. RewriteCond %{HTTP_REFERER} !^$ # Rediriger les fichiers vers une image de hotlinking. RewriteRule .*.(jpe?g|gif|bmp|png)$ https://www.visionduweb.fr/images/structure/no-hotlinking.png [L] RewriteCond %{HTTP_Host} ^mediawiki\.visionduweb\.fr$ [NC] RewriteRule ^/robots\.txt$ /robots-miroir.txt [L] </IfModule> # Désactiver Etag. FileETag none # Activer la compression. <IfModule mod_deflate.c> SetOutputFilter DEFLATE AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/vnd.ms-fontobject AddOutputFilterByType DEFLATE application/x-font AddOutputFilterByType DEFLATE application/x-font-opentype AddOutputFilterByType DEFLATE application/x-font-otf AddOutputFilterByType DEFLATE application/x-font-truetype AddOutputFilterByType DEFLATE application/x-font-ttf AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE font/opentype AddOutputFilterByType DEFLATE font/otf AddOutputFilterByType DEFLATE font/ttf AddOutputFilterByType DEFLATE image/svg+xml AddOutputFilterByType DEFLATE image/x-icon AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/javascript AddOutputFilterByType DEFLATE text/plain </IfModule> # DEFLATE pour les navigateurs non compatibles. BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html # Mise en cache du navigateur. <IfModule mod_expires.c> ExpiresActive On # Mise en cache par défaut du navigateur. ExpiresDefault "access plus 1 month" # Images. ExpiresByType image/gif "access plus 1 year" ExpiresByType image/jpg "access plus 1 year" ExpiresByType image/jpeg "access plus 1 year" ExpiresByType image/png "access plus 1 year" AddType image/svg+xml .svg ExpiresByType image/svg+xml "access plus 1 year" AddType image/x-icon .ico ExpiresByType image/ico "access plus 1 year" ExpiresByType image/icon "access plus 1 year" ExpiresByType image/x-icon "access plus 1 year" # Structure du site. ExpiresByType application/xhtml+xml "access plus 1 week" ExpiresByType text/html "access plus 1 week" ExpiresByType text/css "access plus 1 week" ExpiresByType application/javascript "access plus 1 week" ExpiresByType text/x-javascript "access plus 1 week" ExpiresByType application/javascript "access plus 1 week" ExpiresByType application/x-javascript "access plus 1 week" ExpiresByType application/x-shockwave-flash "access plus 30 days" # Documents. ExpiresByType application/pdf "access plus 1 year" # Polices. AddType application/vnd.ms-fontobject .eot AddType application/x-font-ttf .ttf AddType application/x-font-opentype .otf AddType application/x-font-woff .woff ExpiresByType application/vnd.ms-fontobject "access 1 year" ExpiresByType application/x-font-ttf "access 1 year" ExpiresByType application/x-font-opentype "access 1 year" ExpiresByType application/x-font-woff "access 1 year" </IfModule> # Limitations contre les DoS. KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 5 # Toujours refuser la lecture des fichiers de log. <Files *.log> Require all denied </Files> # Toujours autoriser la consultation de ce message en cas d'erreur 403. <Files 403-forbidden*> Require all granted </Files> # Erreur 403 - Forbidden. # Une adresse absolue charge l'url vers la nouvelle page. # Une adresse relative ne change pas l'url mais uniquement le contenu. ErrorDocument 403 https://wiki.visionduweb.fr/403-forbidden.php </VirtualHost>
Recharger la configuration de Apache2
# Recharger la configuration de Apache2 pour appliquer la nouvelle configuration. sudo apache2ctl restart
xyz-139.99.173.195.conf
# Créer le fichier de configuration pour le VirtualHost xyz-139.99.173.195.conf qui est positionné à la fin des VirtualHost du fait de son nom : sudo touch xyz-139.99.173.195.conf sudo chown root:root xyz-139.99.173.195.conf sudo chmod 644 xyz-139.99.173.195.conf
# Activer le site et redémarrer Apache2 pour appliquer la nouvelle configuration : sudo a2ensite xyz-139.99.173.195.conf sudo service apache2 restart
# Créer le dossier /var/www/139.99.173.195 et un fichier index.html sudo mkdir /var/www/139.99.173.195 sudo touch /var/www/139.99.173.195/index.html
# Ajouter la configuration suivante dans le fichier xyz-139.99.173.195.conf : sudo nano xyz-139.99.173.195.conf
139.99.173.195 écoute du port HTTP 80
<VirtualHost 139.99.173.195:80> ServerAdmin mail@visionduweb.com DocumentRoot /var/www/139.99.173.195 # ServerName 139.99.173.195 # Comportement par défaut du niveau d'alerte retourné. # LogLevel warn ErrorLog ${APACHE_LOG_DIR}/ip-error.log CustomLog ${APACHE_LOG_DIR}/ip-access.log combined # Comportement par défaut du niveau d'alerte retourné. # LogLevel warn ErrorLog ${APACHE_LOG_DIR}/ip-error.log CustomLog ${APACHE_LOG_DIR}/ip-access.log combined # Erreur 403 - Forbidden. <Files 403-forbidden.*> Require all granted </Files> <Files favicon.ico> Require all granted </Files> <Files robots.txt> Require all granted </Files> <Directory /> Require all denied </Directory> <Directory /var/www/139.99.173.195> Require all denied </Directory> # Rediriger l'adresse IP vers le domaine par défaut en https. <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP_HOST} ^139.99.173.195$ RewriteRule ^(.*)$ https://www.visionduweb.fr$1 [QSA,L,R=301] </IfModule> ErrorDocument 403 /403-forbidden.php </VirtualHost>
139.99.173.195 écoute du port HTTP 443
Si aucune configuration n'est ajoutée
# Si aucune configuration n'est ajoutée !
# La requête vers 139.99.173.195:443 affiche : Bad Request Your browser sent a request that this server could not understand. Reason: You're speaking plain HTTP to an SSL-enabled server port. Instead use the HTTPS scheme to access this URL, please. Apache/2.4.38 (Debian) Server at green-nrj.com Port 80
# La requête vers https://139.99.173.195 affiche : 139.99.173.195 utilise un certificat de sécurité invalide. Le certificat n’est valide que pour les noms suivants : ethernium.fun Code d’erreur : SSL_ERROR_BAD_CERT_DOMAIN
Si la configuration suivante est ajoutée
<VirtualHost 139.99.173.195:443> # Rediriger l'adresse IP vers le domaine par défaut en https. <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP_HOST} ^139.99.173.195$ RewriteRule ^(.*)$ https://www.visionduweb.fr$1 [QSA,L,R=301] </IfModule> </VirtualHost>
# La requête vers visionduweb.fr affiche :
Une erreur est survenue pendant une connexion à www.visionduweb.fr. SSL a reçu un enregistrement qui dépasse la longueur maximale autorisée. Code d’erreur : SSL_ERROR_RX_RECORD_TOO_LONG La page que vous essayez de consulter ne peut pas être affichée car l'authenticité des données reçues ne peut être vérifiée. Veuillez contacter les propriétaires du site web pour les informer de ce problème.
La configuration actuelle pour bloquer l'accès au serveur depuis son adresse IP sur le port 443
# Cette configuration fonctionne pour les VirtualHost du VPS et les domaines utilisant les DNS de OVH. # Le site tiger-green.fr avec les DNS de Cloudflare et SSL/TLS FULL/Strict n'était plus accessible quand le nommage du VirtualHost était 139.99.173.195.conf # Les erreurs Cloudflare 525 ou 526 étaient affichées. Renommer le VirtualHost 139.99.173.195.conf pour le positionner à la fin de la liste a corriger ce problème.
<VirtualHost 139.99.173.195:443> ServerAdmin mail@visionduweb.com DocumentRoot /var/www/139.99.173.195 # ServerName 139.99.173.195 # Comportement par défaut du niveau d'alerte retourné. # LogLevel warn ErrorLog ${APACHE_LOG_DIR}/ip-error.log CustomLog ${APACHE_LOG_DIR}/ip-access.log combined # Toujours autoriser la consultation de ce message en cas d'erreur 403. <Files 403-forbidden.*> Require all granted </Files>
# Toujours autoriser le favicon. <Files favicon.ico> Require all granted </Files> # Toujours autoriser la consultation du fichier robots.txt : <Files robots.txt> Require all granted </Files> <Directory /> Require all denied </Directory> <Directory /var/www/139.99.173.195> Require all denied </Directory> # Le certificat suivant n'est pas utilisé et ne sert que pour valider la configuration. # C'est celui du VirtualHost par défaut ethernium.fun qui sera comparé. # Il ne correspondra pas à l'adresse IP. La page 403 prend le relais. <IfModule mod_ssl.c> SSLEngine on # Ce certificat ne sert que pour valider la configuration du VirtualHost par défaut sur IP. # C'est le certificat ethernium.fun qui est présenté pour https://139.99.173.195 # La page 403 prend le relais. # Création d'un certificat méthode une : # sudo mkdir /etc/apache2/ssl # sudo openssl req -new -x509 -days 365 -nodes -out /etc/apache2/ssl/apache.pem -keyout /etc/apache2/ssl/apache.pem # SSLCertificateFile /etc/apache2/ssl/apache.pem # Création d'un certificat méthode deux : # Permet de résoudre le message : # RSA server certificate is a CA certificate (BasicConstraints: CA == TRUE) # sudo mkdir /etc/apache2/ssl # cd /etc/apache2/ssl # Générer une clé privée et une demande de signature de certificat : # sudo openssl genrsa -des3 -out server.pass.key 4096 # Ajouter le mot de passe : Pass # sudo openssl rsa -passin pass:Pass -in server.pass.key -out server.key # sudo rm server.pass.key # sudo openssl req -new -key server.key -out server.csr # Générer le certificat SSL : # sudo openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt SSLCertificateFile /etc/apache2/ssl/server.crt SSLCertificateKeyFile /etc/apache2/ssl/server.key SSLCertificateChainFile /etc/apache2/ssl/server.csr # En cas d'appel du site https://139.99.173.195 c'est le certificat ethernium.fun qui est proposé. # Le certificat ne match pas. # ErrorLog /var/log/apache2/ssl_test_cloudflare.log # LogLevel debug </IfModule> # Rediriger l'adresse IP vers le domaine par défaut en https. <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP_HOST} ^139.99.173.195$ RewriteRule ^(.*)$ https://www.visionduweb.fr$1 [QSA,L,R=301] </IfModule> # Erreur 403 - Forbidden. # Une adresse absolue charge l'url vers la nouvelle page. # Une adresse relative ne change pas l'url mais uniquement le contenu. ErrorDocument 403 /403-forbidden.php </VirtualHost>
Recharger la configuration de Apache2
# Recharger la configuration de Apache2 pour appliquer la nouvelle configuration. sudo apache2ctl restart
NAVIGATION
PARTICIPER ET PARTAGERBienvenue sur le wiki de Amis SH. De nombreuses pages sont partagées sur ce wiki. Créer un compte utilisateur pour participer sur le wiki. Les pages présentées sur le wiki évoluent tous les jours. Certaines recherches sont peu abouties et incluent des erreurs. Utiliser la recherche interne du wiki pour trouver votre contenu. La page de discussion de Amis SH vous permet de poser vos questions. Consulter le site amis-sh.fr pour installer votre propre serveur web. Améliorer le contenu des pages avec vos retours depuis l'onglet discussion. Ce contenu ne doit pas servir à nuire à autrui ou à un système informatique. Protéger votre système Linux ou Windows avec cette page dédiée à la sécurité. |
SOUTENIR CE WIKISoutenir le wiki avec un don en monnaie numérique : AEON - Bitcoins - Bitcoins Cash - Bitcoins Gold - Bitcore - Blackcoins - Basic Attention Token - Bytecoins - Clams - Dash - Monero - Dogecoins - Ğ1 - Ethereum - Ethereum Classique - Litecoins - Potcoins - Solarcoins - Zcash OBTENIR DE LA MONNAIE NUMERIQUEObtenir gratuitement de la monnaie numérique : Miner de la cryptomonnaie. |