Denis Szalkowski Formateur consultant

Support Apache - 2 / 92 -

I. Introduction ...... 9 A. Parts de marché ...... 9 B. Caractéristiques techniques ...... 9 C. Tester le serveur http ...... 9 D. Les en-têtes http ...... 9 1. Côté : les requêtes ...... 9 2. Côté serveur : les réponses ...... 9 E. Les codes de réponses http ...... 10 F. Les méthodes http ...... 11 G. Connaître les failles de sécurité ...... 11 II. Installation sous Windows ...... 12 A. WAMP ...... 12 B. AMPPS ...... 12 C. XAMP ...... 12 III. Installation d’Apache sous ...... 13 A. Installation sous CentOS/Fedora/Red Hat ...... 13 B. Installation sous Debian/Ubuntu ...... 13 C. Paquets installés ...... 13 D. Désactiver SELinux (Red Hat/CentOS/Fedora) ...... 13 E. Les paquets ...... 13 F. Les fichiers de configuration ...... 13 1. Sous Debian ...... 13 2. Sous CentOS/Fedora ...... 14 3. Tester la configuration ...... 14 4. les modules partagés ...... 14 G. Commandes spécifiques à Debian/Ubuntu ...... 14 1. Activer/Désactiver les modules ...... 14 2. Activer/désactiver les sites ...... 14 3. Activer /désactiver les fichiers deconfiguration ...... 14 H. Sécurité ...... 14 1. Les utilisateurs et groupes propriétaires ...... 14 2. Gestion des droits ...... 14 3. Tester la sécurité ...... 14 I. Minimisation / Gestion des services ...... 14 1. Systemctl...... 14 2. Consoles pour minimiser les services ...... 14 J. Les limites ...... 15 K. Programmes et utilitaires additionnels ...... 15 IV. Fonctionnement d'Apache ...... 16 A. Le répertoire par défaut ...... 16 B. La gestion des droits ...... 16 C. Fichiers de traces ...... 16 1. Emplacement ...... 16 a) Sous Debian ...... 16 b) Sous Fedora ...... 16 2. Exploitation des logs ...... 16

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 3 / 92 -

3. Pid ...... 16 4. Gestion des erreurs ...... 16 a) ErrorLog ...... 16 b) LogLevel ...... 16 c) Visualiser les erreurs de configuration ...... 17 d) Centraliser les logs ...... 17 5. Historique des accès au site ...... 17 6. Format de log du fichier access.log ...... 17 7. Fichier de log personnalisé ...... 17 8. Renvoyer vers le syslog ...... 17 9. logrotate ...... 18 10. Alléger les logs ...... 18 11. mod_logio ...... 18 12. Exploitation des logs ...... 18 13. Vers une base de données ...... 18 14. Swatch ...... 19 D. Analyseur de logs ...... 19 1. Logscan ...... 19 2. ApacheTop ...... 19 3. Awfful, un fork de Webalizer (projet non maintenu) ...... 19 a) Installation de Awffull ...... 19 b) Fichier de configuration ...... 19 c) Planifier la production des statistiques ...... 19 4. Awstats ...... 19 5. Log4php ...... 19 6. Matomo Anlytics ...... 19 E. La gestion d'erreurs ...... 19 1. Paramétrage d' ...... 20 2. ErrorDocument ...... 20 V. Les directives ...... 22 A. Le nombre de clients ...... 22 B. Les performances ...... 22 1. MPM/EVENT ...... 22 2. La projection en mémoire ...... 22 3. La distribution de fichiers ...... 22 4. Le cache ...... 22 a) Le cache disque : mod_cache_disk ...... 22 b) Le cache mémoire : mod_cache_mem ...... 22 c) Le cache de fichiers statiques : mod_file_cache ...... 22 d) Exemple de l'utilisation du cache ...... 24 e) Mod_cachesocache ...... 24 f) Cache pour SSL via memcache ...... 25 5. Benchmarking ...... 26 a) ab ...... 26 b) siege ...... 26 c) tester la vitesse ...... 26 6. Tuning ...... 26 a) La résolution de nom ...... 26 b) Eviter d'utiliser les fichiers .htaccess ...... 26 c) DirectoryIndex ...... 26 C. Sécuriser le serveur Apache ...... 26 1. Quelques directives ...... 26

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 4 / 92 -

2. mod_reqtimeout ...... 26 3. Limitations de trafic :mod_ratelimit ...... 26 4. SSL ...... 27 a) Activer le module sous Debian ...... 27 b) Générer le certificat sous Centos ...... 27 c) Création du fichier /etc/httpd/conf.d/ssl.conf ...... 27 5. Forcer le SSL ...... 27 6. Let’s Encyrpt ...... 28 7. Entête ...... 28 8. Le pare-feu firewalld ...... 28 9. Iptables (Exemple) ...... 28 10. Limitations ...... 31 11. Désactiver l'entête X-Powered-By ...... 31 a) /etc/.ini ...... 31 b) Par Apache ...... 31 c) Php ...... 31 12. Désactiver des instructions php ...... 31 13. Cookies ...... 31 14. Tester ...... 31 D. L'URL Rewriting ...... 32 1. Liste des variables serveur en php ...... 32 2. Les drapeaux ...... 32 3. Un exemple WordPress ...... 32 4. Un autre exemple ...... 33 5. Bloquer le hotlinking ...... 33 E. Bloquer les requêtes indésirables ...... 33 F. Utilisation de l'erreur 404 (chez Free) ...... 39 a) Le fichier .htaccess ...... 39 b) Le fichier index.php ...... 39 c) Le fichier url_rewriting.php ...... 40 2. Interdire Internet Explorer ...... 40 G. CGI ...... 40 1. Directives ...... 40 2. Exemple de cgi en Perl ...... 40 3. Awstats...... 41 H. La protection de la lecture des répertoires ...... 41 I. Le mode MultiViews ...... 41 1. AddLanguage ...... 41 2. LanguagePriority ...... 41 J. WebDav ...... 41 K. Les directives de bloc (fichier http.conf) ...... 41 1. NameVirtualHost ...... 41 2. VirtualHost ...... 41 3. Directory ...... 42 4. Files ...... 42 a) Récupérer les extensions de fichiers d'un branche de site ...... 42 b) Exemple de fichier .htaccess : utilisation d'une white list ...... 42 c) Exemple de protection du répertoire uploads d'un blog wordpress ...... 42 5. Location ...... 43 6. IfDefine ...... 43 7. IfModule ...... 43

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 5 / 92 -

L. Sécuriser ...... 43 1. ServerSignature ...... 43 2. ServerTokens (config) ...... 43 M. Les autres directives ...... 43 1. ServerName (config, virtual host) ...... 43 2. UseCanonicalName (config, virtual host, directory, .htaccess) ...... 43 3. ServerAdmin (config,virtual host) ...... 43 4. ServerAlias (virtual host) ...... 43 5. ServerPath (virtual host) ...... 43 6. ServerRoot (config) ...... 43 7. PidFile (config) ...... 43 8. ScoreBoardFile (config) ...... 43 9. SendBufferSize (config) ...... 43 10. LockFile (config) ...... 44 11. Le mode KeepAlive...... 44 a) KeepAlive (config)...... 44 b) KeepAliveTimeout (config) ...... 44 c) TimeOut (Config) ...... 44 d) MaxKeepAliveRequests ...... 44 12. HostNameLookups (config, virtual host) ...... 44 13. Include (config) ...... 44 14. NameVirtualHost (config) ...... 44 15. Listen (config) ...... 44 16. ListenBackLog (config) ...... 44 17. ServerType (config) ...... 44 18. ThreadsPerChild (config Win32) ...... 44 19. HeaderName (config, file, directory, location, .htaccess, virtualhost) ...... 44 20. Options (config, file, directory, location, .htaccess, virtualhost) ...... 44 21. CoreDumpDirectory (config) (Unix) ...... 45 VI. Les modules ...... 46 A. Expirations ...... 46 1. ExpiresActive ...... 46 2. ExpiresByType ...... 46 3. ExpiresDefault ...... 46 4. Exemple ...... 46 B. Le module anti-dos :mod_evasive ...... 47 C. Le module : mod_pagespeed ...... 47 D. Le module mod_fcgid ...... 47 E. Le module mod_chroot ...... 47 F. Compression ...... 47 1. Test ...... 47 2. Le mod_deflate (Apache 2) ...... 47 3. Le mod_gzip (Apache 1.x) ...... 47 4. Exemple d'utilisation du mode deflate ...... 48 4. Le module Brotli ...... 48 G. Le mod_expires ...... 49 H. Le mod_headers ...... 49 5. Gestion du cache ...... 49 6. Gestion de la sécurité ...... 50 I. Les eTags ...... 50 J. Exemple ...... 51

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 6 / 92 -

VII. Gestion de l'accès du client au serveur ...... 52 A. Directives d'authentification ...... 52 1. AuthType ...... 52 2. AuthName ...... 52 3. AuthGroupFile ...... 52 4. AuthUserFile ...... 52 5. Require ...... 52 6. Paramètres de sécurité d'IE ...... 53 B. Autoriser et interdire en fonction des Ip et des noms d'hôtes ...... 53 1. Allow from ...... 53 2. Allow from env ...... 54 3. Deny from ...... 54 4. Deny from env ...... 54 5. Order ...... 54 C. Accès anonyme ...... 54 1. Anonymous ...... 54 2. Anonymous_NoUserId ...... 54 3. Anonymous_LogEmail ...... 54 4. Anonymous_VerifyEmail ...... 54 5. Anonymous_Authorative ...... 54 D. Démon identd ...... 55 E. Les cookies ...... 55 1. CookieLog ...... 55 2. CookieTracking ...... 55 3. CookieExpires ...... 55 F. .htaccess ...... 55 1. La protection du fichier .htaccess ...... 55 2. AccessFileName (config) ...... 55 3. AllowOverride ...... 55 4. Mise en œuvre de la sécurité par le fichier .htaccess ...... 55 a) Intérêt ...... 55 b) Exemple de fichier .htaccess ...... 55 c) Explications des directives ...... 56 d) Gestion des droits sur le fichier .htaccess ...... 56 e) Le mode digest...... 56 5. Via PAM ...... 56 G. MIME : négociation du contenu et de la langue ...... 57 1. Définition ...... 57 2. Module ...... 57 3. Liste des types MIME ...... 57 4. Directives MIME ...... 57 a) TypesConfig ...... 57 b) AddType ...... 57 c) DefaultType ...... 57 d) AddEncoding ...... 57 e) ForceType ...... 57 H. Index de répertoire ...... 57 1. DirectoryIndex ...... 57 I. Redirection ...... 58 1. ScriptAlias ...... 58 2. Alias ...... 58 3. UserDir ...... 58

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 7 / 92 -

4. Redirect ...... 58 VIII. Les SSI (Server Side Include) ...... 59 A. Conditions de fonctionnement ...... 59 B. Variables SSI ...... 59 C. Exemple ...... 59 IX. Le proxy ...... 61 A. Chargement du module ...... 61 B. Les directives ...... 61 1. ProxyVia ...... 61 2. ProxyRequest ...... 61 3. ProxyRemote...... 61 4. ProxyPass ...... 61 5. ProxyDomain ...... 61 6. NoProxy ...... 61 7. ProxyPassReverse ...... 61 8. CacheRoot...... 61 9. CacheSize ...... 61 10. CacheMaxExpire ...... 61 11. CacheGcInterval ...... 61 12. CacheLastModifiedFactor ...... 62 13. CacheDefaultExpire ...... 62 14. CacheDirLevels et CacheDirLength ...... 62 15. CacheNegociatedDocs ...... 62 16. NoCache ...... 62 C. Exemple ...... 62 D. Récupérer les adresses ip derrière un proxy ...... 63 1. Activer le module remoteip ...... 63 2. La directive RemoteIPHeader ...... 63 3. Rechargement de la configuration ...... 63 X. Le module mod_status ...... 64 A. Présentation ...... 64 B. Activer le module mod_status ...... 64 C. Le fichier de configuration ...... 64 D. Limiter l'accès à la page ...... 64 E. Le rapport d’état ...... 64 XI. Documentation ...... 65 A. Site officiel ...... 65 B. Bibliographie ...... 65 C. Liens ...... 65 D. Le HTML ...... 65 XII. Variables ...... 66 A. Variables normalisées ...... 66 B. Autres variables liées aux requêtes ...... 66 C. Variables diverses ...... 67 D. Variables d’environnement ...... 67 XIII. Sécuriser WordPress ...... 68

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 8 / 92 -

A. Protéger l’interface d’administration ...... 68 B. Traitement du spam de commentaires ...... 68 C. Traitement du spam de commentaires via le WAF mod_security ...... 75 XIV. Annexe : installation de Awstats sur Debian ...... 79 A. Installation de Awstats ...... 79 B. Fichier de configuration ...... 79 C. Gestion des droits ...... 79 D. Actualisation des statistiques ...... 79 E. Planifier un tâche d’actualisation ...... 79 F. Activer le module cgi ...... 80 G. Configuration Awstats dans Apache ...... 80 H. Accès par le navigateur ...... 80 XV. Installation de Matomo Analytics sur Debian ...... 81 A. Paquets pré-requis...... 81 B. Téléchargement de matomo ...... 81 C. Installation de composer ...... 81 D. Création de la base MariaDB ...... 81 E. Le script d’installation de Matomo ...... 81 F. Le script Matomo à incorporer dans les pages Web ...... 86 G. Ma 1ère connexion ...... 87 XVI. Fail2ban ...... 90 A. Installation classique ...... 90 B. Configuration pour les erreurs 40x et 50x ...... 90 C. Le module Apache mod_remoteip (avec des pincettes) ...... 90 D. La liste des machines bloquées ...... 91 XVII. Authentification Kerberos ...... 92 A. /etc/krb5.conf ...... 92 B. Sous Windows ...... 92 C. /etc/kerberos.keytab ...... 92 D. Tester ...... 92 A. Directives Apache ...... 92 B. ...... 92

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 9 / 92 -

I. Introduction

A. Parts de marché D'après le site W3Techs, Apache représenterait en février 2021 34.2% de l'ensemble des serveurs Web, devant Nginx avec 33.8% qui joue davantage le rôle de reverse proxy. B. Caractéristiques techniques Depuis la version 2.0 Prise en charge de IPv6 Intégration de la bibliothèque PCRE Perl Compatible Regular Expression Depuis la version 2.2 Arrêt en douceur avec la directive GracefulShutdownTimeout Support des fichiers de plus de 2 GB Module DBD prenant en charge l'échange de données entre les modules et les bases de données Depuis la version 2.4 Support du MPM Event modules mod_remoteip, entre autres C. Tester le serveur http Pour obtenir la page d'accueil d'un serveur Web, à partir de l'interpréteur de commandes de votre système d'exploitation, vous pouvez utiliser la commande telnet devenue optionnelle sur les nouveaux systèmes Windows : telnet adresse_ip port_du_serveur Pour établir la connexion, tapez : GET / HTTP/1.1 Validez par la touche Entrée. La mise en place du module mod_echo, en passant la directive ProtocolEcho à off, est susceptible d'empêcher ce type de requêtes. D. Les en-têtes http 1. Côté client : les requêtes GET /infrastructure/lamp-infrastructure/mise-en-oeuvre-apache-debian-testing/ HTTP/2 Host: www.dsfc.net User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0) Gecko/20100101 Firefox/86.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8 Accept-Language: fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate, br Referer: https://www.dsfc.net/infrastructure/lamp-infrastructure/mise-en-oeuvre-apache-debian-testing/ DNT: 1 Connection: keep-alive Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_2d6b55a2ab9d09608284e542b09c36d7=Denis%20Szalkowski%7C1616656267%7Cxz M1MljUHIaMkVyXcufuuaFeYzG2k3w2tONIfknqkF8%7C35a343cee49d64d2b198282d7f9e7500446ca83bb74e 8f1be2968b8342da562c; wptouch_customizer_mode=desktop; wp-settings- 2=editor%3Dtinymce%26libraryContent%3Dbrowse%26hidetb%3D1%26advImgDetails%3Dshow%26editor _plain_text_paste_warning%3D2%26posts_list_mode%3Dlist%26editor_expand%3Doff; wp-settings-time- 2=1616483476 Upgrade-Insecure-Requests: 1 Cache-Control: max-age=0 2. Côté serveur : les réponses HTTP/2 200 OK date: Tue, 23 Mar 2021 09:17:36 GMT server: Apache expires: Wed, 11 Jan 1984 05:00:00 GMT

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 10 / 92 - cache-control: no-cache, must-revalidate, max-age=0 strict-transport-security: max-age=31536000; includeSubDomains; preload x-content-type-options: nosniff x-xss-protection: 1; mode=block x-frame-options: sameorigin content-security-policy: default-src 'self' ; frame-src 'self' https://www.youtube-nocookie.com https://www.youtube.com https://www.google.com/calendar https://www.infoclimat.fr; child-src 'self' https://www.youtube-nocookie.com https://www.youtube.com https://www.google.com/calendar https://www.infoclimat.fr; img-src 'self' data: http: https: ; style-src 'self' data: http: https: 'unsafe-inline' ; script-src 'self' data: http: https: 'unsafe-inline' 'unsafe-eval' referrer-policy: strict-origin-when-cross-origin feature-policy: vibrate *; usermedia *; sync-xhr 'self' https://www.dsfc.net https://www.voie-militante.com https://extime.fr https://www.saint-eloi-de-fourques.net https://forum-informatique.net vary: User-Agent,Accept-Encoding content-encoding: br x-robots-tag: index,follow access-control-allow-origin: www.dsfc.net content-length: 17633 content-type: text/html; charset=UTF-8 X-Firefox-Spdy: h2 E. Les codes de réponses http Sources http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html http://fr.wikipedia.org/wiki/Liste_des_codes_HTTP Code Http Message d'erreur 200 Ok 201 Ok et création d'un nouveau document 202 Requête acceptée 204 Aucune réponse / Corps vide 301 Document déplacé de façon permanente 302 Document déplacé de façon temporaire 304 La ressource demandée n'a pas été modifiée 400 Erreur de syntaxe dans la Requête http 401 Pas d'autorisation 401.1 Logon failed 401.2 Logon failed due to server configuration 401.3 Unauthorized due to ACL on resource 401.4 Authorization failed by filter 401.5 Authorization failed by ISAPI/CGI application 403 Accès interdit 403.1 Execute access forbidden 403.10 Invalid configuration 403.11 Password change 403.12 Mapper denied access 403.13 Client certificate revoked 403.14 Directory listing denied 403.15 Client Access Licenses exceeded 403.16 Client certificate untrusted or invalid 403.17 Client certificate has expired or is not yet valid 403.2 Read access forbidden 403.3 Write access forbidden 403.4 SSL required

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 11 / 92 -

Code Http Message d'erreur 403.5 SSL 128 required 403.6 IP address rejected 403.7 Client certificate required 403.8 Site access denied 403.9 Too many users 404 Page introuvable 404.1 Site not found 405 Method not allowed 406 Not acceptable 407 Proxy authentication required 412 Precondition Failed 414 Request-URI too long 500 Erreur du serveur 500.12 Application restarting 500.13 Server too busy 500.15 Requests for Global.asa not allowed 501 Opération non implémentée 502 Erreur de routage 503 Service indisponible F. Les méthodes http Source : https://fr.wikipedia.org/wiki/Hypertext_Transfer_Protocol#M%C3%A9thodes GET, POST, HEAD, PUT, DELETE, CONNECT, OPTIONS, PATCH, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK G. Connaître les failles de sécurité Apache diffuse de très nombreux logiciels. Les failles recensées en concernent pas toutes le serveur Web Httpd. Cert-FR https://www.cert.ssi.gouv.fr/ CVE Details https://www.cvedetails.com/vulnerability-list/vendor_id-45/Apache.html CVE http://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=Apache Exploit Database https://www.exploit-db.com/search?q=Apache

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 12 / 92 -

II. Installation sous Windows

Vous pouvez utiliser en tant que développeur WAMP, XAMP ou AMPPS. Mais, ce n’est franchement pas le truc à faire pour une machine de production !!! A. WAMP Source : https://www.wampserver.com/ L’intérêt de WAMP est de vous permettre de choisir entre MariaDB et MySQL, ainsi qu’entre les différentes versions de PHP. B. AMPPS Source : http://www.ampps.com/download L’éditeur ne propose que MySQL et qu’une version de PHP. C. XAMP Source : https://www.apachefriends.org/download.html XAMP propose en standard le module Perl. LE seul moteur de bases de données disponible est MariaDB.

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 13 / 92 -

III. Installation d’Apache sous Linux

A. Installation sous CentOS/Fedora/Red Hat dnf install httpd B. Installation sous Debian/Ubuntu apt update && apt install apache2 apache2-utils apache2-doc C. Paquets installés Sous Debian/Ubuntu dpkg -l|grep –i apache2 Sous CentOS/Fedora/Red Hat rpm –qa|grep –i httpd D. Désactiver SELinux (Red Hat/CentOS/Fedora) Pour désactiver SELinux, éditez le fichier /etc/selinux/config et passez la valeur de la directive SELINUX à disabled. Elle est à enforcing par défaut. La modification intervient après le reboot. Pour vous éviter de rebooter, tapez à partir de la ligne de commande /usr/sbin/setenforce 0 E. Les paquets Sous Debian/Ubuntu, les paquets s’installent à l’aide de la commande apt ou aptitude. Sous CentOS, il s’agit de la commande yum. Pour Fedora, c’est dnf.  apache2 Serveur Apache (Debian/Ubuntu)  apachetop Monitoring Apache  htop Monitoring Linux  glances Monitoring Linux  fail2ban Bannissement des tentatives de connexion  siege Benchmarking  skipfish Scanner de vulnérabilités  nikto Scanner de vulnérabilités  cronolog Rotation des logs pour Apache  logrotate Rotation des logs système  httpd Serveur Apache (CentOS/Fedora)  mod_security WAF pour Apache  mod_geoip Module Geoip pour Apache  mod_ssl Module Apache SSL  mod_evasive Module Apache sensé éviter les DDoS  awstats Logiciel de Web Analytics écrit en Perl qui s’exécute en mode CGI  PHP Paquet PHP intégrant le module PHP pour Apache  rkhunter Logiciel de détection de rootkit F. Les fichiers de configuration 1. Sous Debian Situés dans le dossier /etc/apache2, ils sont liés entre eux à partir du fichier apache2.conf : /etc/apache2/apache2.conf Fichier de configuration générale /etc/apache2/ports.conf Ports en écoute (80 par défaut) /etc/apache2/envvars Variables d’environnement /etc/apache2/magic Types MIME (Multipurpose Internet Mail Extensions) /etc/apache2/mods-enabled/*.load Modules chargés /etc/apache2/mods-enabled/*.conf Fichiers de configuration des modules chargés /etc/apache2/conf-enabled/*.conf Fichiers de configuration complémentaires /etc/apache2/sites-enabled/*.conf Sites activés /etc/apache2/mods-available/*.load Modules utilisables /etc/apache2/mods-available/*.conf Configuration des modules utilisables /etc/apache2/conf-available/*.conf Fichiers de configuration utilisables

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 14 / 92 -

/etc/apache2/sites-available/*.conf Fichiers des sites utilisables 2. Sous CentOS/Fedora /etc/httpd/conf/httpd.conf Fichier de configuration principal /etc/httpd/conf.modules.d/ Répertoire de chargement des modules /etc/httpd/conf.d/ Répertoire des fichiers de configuration des modules (PHP, …) 3. Tester la configuration Sous Linux, pour tester toute votre configuration, tapez la ligne de commande suivante : apachectl configtest Vous disposez de la commande httpd -t, disponible aussi sous Windows. 4. les modules partagés Remplacez la commande httpd par apache2 pour Debian/Ubuntu et leurs distributions dérivées. httpd –M liste des modules statiques et dynamiques httpd –l liste des modules statiques apachectl –t –D DUMP_MODULES G. Commandes spécifiques à Debian/Ubuntu Après l’emploi de l’une de ces commandes, vous devrez recharger la configuration sur serveur Apache à l’aide de : systemctl reload apache2 1. Activer/Désactiver les modules a2enmod a2dismod 2. Activer/désactiver les sites a2ensite a2dissite 3. Activer /désactiver les fichiers deconfiguration a2enconf a2diconf H. Sécurité 1. Les utilisateurs et groupes propriétaires Pour le contenu des sites, vous devez rendre propriétaires les utilisateur et groupe suivants selon votre distribution : CentOS/Fedora/Red Hat apache Debian/Ubuntu www-data 2. Gestion des droits CentOS/Fedora/Red Hat chown apache:apache /var/www /var/log/httpd –R chmod 775 /var/www /var/log/httpd Debian/Ubuntu chown www-data:www-data /var/www /var/log/apache2 –R chmod 775 /var/www /var/log/apache2 3. Tester la sécurité mkdir /home/skipfish skipfish -o /home/skipfish/skipfish/ http://www.exemple.fr I. Minimisation / Gestion des services 1. Systemctl Systemctl enable/disable/start/stop/restart/reload/status httpd 2. Consoles pour minimiser les services RPM (CentOS/Red Hat/Fedora) ntsysv

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 15 / 92 -

DEB (Debian/Ubuntu/Mint) sysv-rc-conf Vous disposez également de cockpit et de son interface Web. J. Les limites A partir de la version 2.1, Apache permet la prise en charge de fichiers et de requêtes de plus de 2 Go. K. Programmes et utilitaires additionnels ab Outil de benchamrking apxs APache eXtenSion tool, permettant de compiler et d'installer les modules dbmmanage Création et mise à jour des fichiers d'authentification de type DBM fcgistarter Start a FastCGI program htcacheclean Nettoyage du cache disque géré par mod_disk_cache htdigest Create and update user authentication files for digest authentication htdbm Manipulate DBM password databases. htpasswd Create and update user authentication files for basic authentication httxt2dbm Create dbm files for use with RewriteMap logresolve Resolve hostnames for IP-addresses in Apache logfiles log_server_status Periodically log the server's status rotatelogs Permet la rotation des logs sans avoir à arrêter le serveur split-logfile Split a multi-vhost logfile into per-host logfiles suexec Switch User For Exec

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 16 / 92 -

IV. Fonctionnement d'Apache

A. Le répertoire par défaut Par défaut, le répertoire par défaut est /var/www/html. Sans modifier, vos fichiers de configuration, créez un lien symbolique pointant vers un répertoire d'une partition ou d'un disque différent(e) de l'emplacement d'installation de votre distribution Linux. mv /var/www/html /home/www ln –s /home/www /var/www/html chown apache:apache /var/www/html –R chown apache:apache /home/www –R B. La gestion des droits La command find permet une gestion très fine des droits selon qu’il s’agisse de dossiers (d) ou de fichiers (f). find /home/www –type d –exec chmod 555 {} \; find /home/www –type f –exec chmod 444 {} \; C. Fichiers de traces 1. Emplacement Par défaut, les fichiers de log sont au nombre de 2.

a) Sous Debian /var/log/access.log /var/log/error.log

b) Sous Fedora /var/log/httpd/access_log /var/log/httpd/error_log 2. Exploitation des logs Vous diposez des commandes grep, agrep, zgrep, cut, sort, etc pour exploiter les logs. 3. Pid Au lancement, Apache écrit le numéro de processus du processus père httpd dans le fichier /var/run/httpd/httpd.pid ou /var/run/apache2/apache2.pid. Le nom du fichier peut être changé en modifiant la directive PidFile. 4. Gestion des erreurs

a) ErrorLog Les messages d'erreur sont stockés dans le fichier /var/log/apache2/error.log ou /var/log/httpd/error_log Pour modifier leur chemin, vous pouvez utiliser la directive ErrorLog dont la portée s'applique au fichier de configuration générale ou au Virtual Host. Source : https://httpd.apache.org/docs/current/mod/core.html#errorlog

b) LogLevel La directive LogLevel permet de consigner selon le niveau d'erreur :  emerg  alert  crit  error  warn  notice  info  debug Si vous choisissez le niveau info, cela active toutes les erreurs de niveau supérieure (de notice jusqu'à emerg).

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 17 / 92 -

Par défaut, Apache est configuré sur le niveau warn (Warning). Cela évite de disposer de logs trop verbeux.

c) Visualiser les erreurs de configuration Avant de recharger la configuration après avoir réalisé des modifications, vous devez tester la syntaxe des modifications apportées. Sous Linux : apachectl configtest Sous Windows : httpd -t

d) Centraliser les logs Sous Linux, vous pouvez traiter les messages d’erreur par le démon rsyslog. ErrorLog syslog:facility 5. Historique des accès au site Syntaxe TransferLog fichier|commande Défaut Aucun Exemple TransferLog logs/transfer.log Portée Config, Virtual host Source : http://httpd.apache.org/docs/2.4/mod/mod_log_config.html#transferlog 6. Format de log du fichier access.log LogFormat définit le format du fichier de log au format CLF (Common Log Format). La directive dépend du module mod_log_config. la directive CustomLog lui est associée. Syntaxe LogFormat "Chaîne" Alias %b Octets envoyés %{var_env}e Nom de la variable d'environnement var_env %f fichier à présenter %a adresse ip distante %h hôte distant %{nom_en_tête}i contenu d'en-tête envoyé par le client %l nom d'utilisateur distant %{nom_note}n valeur d'une note qui sert à transmettre une valeur entre les modules %{nom_en_tête}o Contenu des lignes d'en-tête de la réponse %P PID Apache %p port du serveur %r Première ligne de la requête %s Statut de la requête %>s Etat de la dernière requête %t Heure %U url demandée %u utilisateur distant %v hôte virtuel du serveur Exemple Common Log Format (CLF) "%h %l %u %t \"%r\" %>s %b" Common Log Format with Virtual Host "%v %h %l %u %t \"%r\" %>s %b" NCSA extended/combined log format "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" Source : http://httpd.apache.org/docs/current/mod/mod_log_config.html#customlog 7. Fichier de log personnalisé Syntaxe CustomLog logs/custom.log "%a %h %l %u %U %t" ou LogFormat "%h %¨l %u %t %r %s %b" common CustomLog logs/access.log common 8. Renvoyer vers le syslog CustomLog '|/usr/bin/logger -p local5.info' combined

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 18 / 92 -

9. logrotate Il s'agit d'un paquet qui permet l'archivage automatique des logs. La configuration se fait à partir du fichier /etc/logrotate.conf. La liste des services dont les logs sont archivés figurent dans le dossier /etc/logrotate.d/ L'exécution de ce programme est réalisée par une tâche planifiée stockée dans le dossier /etc/cron.daily. Il s'agit d'un utilitaire qui permet d'archiver les logs à chaud. Dans l'exemple ci-dessous, la rotation s'effectue sur une base de 24 heures, soit 86400 secondes. cronolog est une alternative à rotatelog. 10. Alléger les logs Grâce aux variables d’environnement, vous pouvez alléger les logs HostnameLookups On SetEnvIf Remote_Addr "^127\.0\.0\.1$" dontlog SetEnvIf Remote_Addr "^::1$" dontlog SetEnvIf Remote_Addr "^195\.154\.102\.202$" dontlog SetEnvif Remote_Addr "^srv2$" dontlog SetEnvif Remote_Addr "^2001:bc8:34b7:100::1$" dontlog SetEnvif Remote_Addr "^fe80::ec4:7aff:fe09:655c$" dontlog SetEnvIf Remote_Addr "^localhost$" dontlog SetEnvIf Request_URI "/wp-[a-z\-]+(\.php(\?)?)?(/|$)" dontlog SetEnvIf Request_URI "\.(gif|html?|je?pg|png|svg|ico|js|json|map|css|swf|flv|woff2?|eot|ttf)$" dontlog SetEnvIf Request_URI "/wp-login\.php(\?|$|/)" login CustomLog "logs/access_log" combined env=!dontlog CustomLog "logs/login_log" combined env=login Sur Debian, avec la variable d’environnement APACHE_LOG_DIR définie dans /etc/apache2/envvars : SetEnvIf Remote_Addr "^127\.0\.0\.1$" dontlog SetEnvIf Remote_Addr "^10\.0\.2\.5$" dontlog SetEnvIf Remote_Addr "^localhost$" dontlog SetEnvIf Request_URI "\.(je?pg|ico)$" dontlog SetEnvIf Request_URI "(^|/)error\.html$" dontlog CustomLog "${APACHE_LOG_DIR}/access.log" combined env=!dontlog 11. mod_logio # You need to enable mod_logio.c to use %I and %O LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio Source : http://httpd.apache.org/docs/current/mod/mod_logio.html 12. Exploitation des logs Pour extraire le User-Agent : cat /var/log/httpd/dsfc-access_log|cut -d '"' -f 6|sort -u|more 13. Vers une base de données LoadModule log_sql_module modules/mod_log_sql.so LoadModule log_sql_mysql_module modules/mod_log_sql_mysql.so LogSQLLoginInfo mysql://user:[email protected]/apachelogs # Automatically create tables in the database LogSQLCreateTables on # The name of the access_log table LogSQLTransferLogTable access_log # Define what is logged to the database table LogSQLTransferLogFormat AbHhmRSsTUuv LogSQLRequestAccept .html .php

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 19 / 92 -

14. Swatch Swatch est un paquet Perl pour intercepter des messages dans les fichiers de log. D. Analyseur de logs 1. Logscan logscan access_log status 500 2. ApacheTop 3. Awfful, un fork de Webalizer (projet non maintenu)

a) Installation de Awffull

Sous Debian/Ubuntu, tapez la commande : apt install awffull -y

b) Fichier de configuration

Éditez le fichier /etc/awffull/awffull.conf et modifiez les lignes du fichier comme suit :

LogFile /var/log/apache2/access.log LogType clf OutputDir /var/www/html/awffull YearlySubtotals yes

c) Planifier la production des statistiques

Pour disposer de statistiques nouvelles toutes les 4 heures, ajoutez aux tâches planifiées de votre système, à l’aide de la commande crontab -e :

0 */4 * * * /usr/bin/awffull 2>&1 4. Awstats Je vous ai mis à disposition deux tutos :  https://www.dsfc.net/internet/web-analytics/installer-awstats-sur-debian/  https://www.dsfc.net/internet/web-analytics/mise-en-oeuvre-awstats/ 5. Log4php Il n'est plus maintenu depuis le 12/12/2009. 6. Matomo Anlytics Il remplace PhpMyVisites, puis Piwik. Il constitue une alternative très sérieuse à Google Analytics, le profiling en moins. Il s’agit d’un outil de Web analytics par script. E. La gestion d'erreurs

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 20 / 92 -

1. Paramétrage d'Internet Explorer

Sous Internet Explorer, les messages d'erreur sont directement pris en charge par le navigateur. Encore une anomalie. Dans les options du navigateur, désactivez l'affichage des messages d'erreur http simplifiés. Nous vous encourageons toutefois à utiliser un navigateur alternatif tel que Firefox, par exemple.

2. ErrorDocument Un conseil : utiliser la redirection vers une page statique ou vers un message ! ErrorDocument 404 /error.html ErrorDocument 404 "La page n'existe pas !" Pour ma part, je redirige sur une page html, sans redirection automatique, qui a l’avantage majeur de ne pas charger le serveur en cas d’attaque de type DDoS. ErrorDocument 400 /index.html ErrorDocument 401 /index.html ErrorDocument 402 /index.html ErrorDocument 403 /index.html ErrorDocument 404 /index.html ErrorDocument 405 /index.html ErrorDocument 406 /index.html ErrorDocument 407 /index.html ErrorDocument 408 /index.html ErrorDocument 409 /index.html ErrorDocument 410 /index.html ErrorDocument 411 /index.html ErrorDocument 412 /index.html ErrorDocument 413 /index.html ErrorDocument 414 /index.html ErrorDocument 415 /index.html ErrorDocument 416 /index.html ErrorDocument 417 /index.html ErrorDocument 422 /index.html ErrorDocument 423 /index.html ErrorDocument 424 /index.html ErrorDocument 426 /index.html ErrorDocument 428 /index.html ErrorDocument 429 /index.html ErrorDocument 431 /index.html ErrorDocument 500 /index.html ErrorDocument 501 /index.html ErrorDocument 502 /index.html ErrorDocument 503 /index.html

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 21 / 92 -

ErrorDocument 504 /index.html ErrorDocument 505 /index.html ErrorDocument 506 /index.html ErrorDocument 507 /index.html ErrorDocument 508 /index.html ErrorDocument 510 /index.html

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 22 / 92 -

V. Les directives

A. Le nombre de clients Pour connaître le nombre de connexions établies, vous disposez sous Linux de la commande suivante (www- data en lieu et place de apache pour les distributions Debian/Ubuntu/Mint) : lsof -i|grep "apache"|grep "ESTABLISHED"|wc -l netstat -nt|egrep ":(80|443) "|grep "ESTABLISHED"|wc -l Pour changer le nombre maximum de clients :MaxClients Ce paramètre interagit avec la directive ServerLimit. StartServers : nombre de processus en attente de requêtes au démarrage MinSpareServers et MaxSpareServers définissent le nombre de processus en attente de requêtes. B. Les performances 1. MPM/EVENT Pour optimiser l’exécution du PHP en mode FPM, choisissez le mode EVENT de MPM : LoadModule mpm_event_module /usr/lib/apache2/modules/mod_mpm_event.so ServerLimit : nombre limite de processus (16 par défaut) StartServers : nombre de processus lancés au début ThreadLimit : nombre maxi de threads par processus ThreadsPerChild : nombre de threads par process (25 par défaut) MaxRequestWorkers : nombre maxi de requêtes (ServerLimit*ThreadPerChild) MaxSpareThreads : nombre de process max inactifs MinSpareThreads : nombre de process min inactifs ListenBacklog : nombre de requêtes en file d'attente (511 par défaut) 2. La projection en mémoire C'est un dispositif qui se gère au travers de la directive EnableMMAP. La projection en mémoire des pages est susceptible de provoquer des crashs sur certains systèmes. Dans ce cas, passez la directive à Off ! Par défaut, cette directive est à On. 3. La distribution de fichiers Apache utilise le module noyau sendfile pour envoyer les fichiers. Il peut arriver que ce module provoque le crash du système. Dans ce cas, passez la directive à EnableSendfile à Off. Par défaut, la valeur est à On. Cette directive booste le temps de réponse ! 4. Le cache Pour activer les fonctionnalités de cache, il faut, au préalable, activer le module mod_cache.

a) Le cache disque : mod_cache_disk L’utilitaire htcacheclean permet de nettoyer le cache en fixant d’autres options. Il permet aussi de "démoniser" le service. htcacheclean –D –v –r -dinterval -ppath -llimit

b) Le cache mémoire : mod_cache_mem MCacheSize Définit la taille du cache

c) Le cache de fichiers statiques : mod_file_cache MMapFile Précharge une liste de documents en mémoire CacheFile Précharge une liste de documents en cache Voici un exemple de configuration de ce module pour WordPress : MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/hover.js MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/taber.js

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 23 / 92 -

MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/style.css MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/popular-top.gif MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/container-cbg_red.gif MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/container-cbg_red_m.gif MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/b_subscribebg_red.png MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/container-cbg_chirstmas.gif MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/headerbg_black.png MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/popular-bottom.gif MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/.gif MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/nav-active_black.png MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/sidebarwrap-bot.gif MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/button-submit.gif MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/comment.png MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/body-bg_chirtmas.png MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/container-bg_christmas.gif MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/nav-active.png MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/subscribebg_red.png MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/comment_black.png MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/container-bg_black_m.gif MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/thumb2.gif MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/headerbg.png MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/thumb1.gif MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/container-bottom_red.gif MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/container-cbg.gif MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/nav.png MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/i_author.png MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/sidebarwrap-top.gif MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/container-bottom-bg_red_m.gif MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/postmetabottombg.png MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/nav-active_red.png MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/sinputbg.png MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/container-bottom.gif MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/datebg.gif MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/i_categories.png MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/headerbg_red.png MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/container-bg.png MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/b_subscribebg.png MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/b_subscribebg_christmas.png MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/quote.png MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/container-cbg-m.gif MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/nav_christmas.png MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/container-bottom_chirstmas.gif MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/subscribebg.png MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/container-bg_red_m.gif MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/headerbg_christmas.png MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/bullet-arrow2.gif MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/nav_red.png MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/arrow-right.gif MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/container-bottom-bg_m.gif MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/container-bg.gif MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/container-bg_black.gif MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/body-bg.png MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/subscribebg_black.png MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/container-bg_m.gif

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 24 / 92 -

MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/body-bg_red.png MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/body-bg_black.png MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/container-cbg_black.gif MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/footer-bg.gif MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/thumb3.gif MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/b_subscribebg_black.png MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/nav-active_christmas.png MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/container-cbg_black_m.gif MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/bullet-arrow.gif MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/subscribebg_christmas.png MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/titlebg.gif MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/container-bg_red.gif MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/searchform-bg.gif MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/quote.gif MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/container-bottom_black.gif MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/comment_chirstmas.png MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/container-bottom_black_m.gif MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/nav_black.png MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/bullet-arrow3.gif MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/images/arrow-left.gif MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/style-black.css MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/screenshot.gif MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/style-brown.css MMapFile /home/www/dsfc/wp-content/themes/WP_Premium/style-red.css

d) Exemple de l'utilisation du cache LoadModule cache_module modules/mod_cache.so #LoadModule disk_cache_module modules/mod_disk_cache.so #LoadModule file_cache_module modules/mod_file_cache.so LoadModule mem_cache_module modules/mod_mem_cache.so #Config #Un cache de 64 MB MCacheSize 64000 MCacheMaxObjectCount 1000 MCacheMaxObjectSize 256000 MCacheMinObjectSize 1 #VirtualHost CacheEnable mem / #CacheEnable disk / #CacheEnable fd / CacheMaxExpire 3600 #CacheMinFileSize 1 #CacheMaxFileSize 65536 #Fixe le répertoire du cache #CacheRoot /tmp #CacheDirLevels 3 #CacheDirLength 2

e) Mod_cachesocache MemcacheConnTTL 30s CacheSocache memcache:127.0.0.1:11211 CacheSocacheMaxSize 8388608 CacheSocacheMaxTime 86400 CacheSocacheMinTime 14400 CacheSocacheReadSize 0 CacheSocacheReadTime 0 CacheEnable socache

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 25 / 92 -

CacheEnable socache CacheEnable socache CacheEnable socache CacheEnable socache CacheEnable socache CacheEnable socache CacheEnable socache # CacheEnable socache /wp-content/themes # CacheEnable socache /wp-content/uploads # CacheEnable socache /wp-admin # CacheEnable socache /wp-includes # CacheEnable socache /awstats # CacheEnable socache wp-content/themes/WP_Premium # CacheEnable socache wp-content/themes/WP_Premium/images # # CacheEnable socache # # # CacheEnable socache # # # CacheEnable socache # # # CacheEnable socache # CacheEnable socache # # CacheEnable socache # # # CacheEnable socache # # # CacheEnable socache # CacheEnable socache CacheSocacheMaxTime 300 CacheSocacheMinTime 300 # # CacheEnable socache #

f) Cache pour SSL via memcache SSLSessionCache memcache:127.0.0.1:11211 MemcacheConnTTL 0

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 26 / 92 -

SSLSessionCacheTimeout 86400 5. Benchmarking

a) ab ab -n 100 -c 10 http://192.168.153/index.php

b) siege siege est un autre outil. Il n’est pas présent en paquet dans la plupart des distributions. Vous devez le compiler. siege http://localhost/

c) tester la vitesse Yslow, Page Speed étaient des extensions utilisées jusqu’à Firefox 55. Dans les versions plus récentes des navigateurs, vous disposez des outils de développement Web (Ctrl+Maj+I). Vous pouvez aussi utiliser des sites pour tester la vitesse de chargement des pages de votre site Web tels que : https://www.webpagetest.org/ https://developers.google.com/speed/pagespeed/insights/ https://tools.pingdom.com/ 6. Tuning

a) La résolution de nom Avec la résolution de noms, les requêtes risquent d'être bien plus lentes. HostnameLookups off L'avantage est tout de même de disposer du nom de domaine des machines qui se connectent quand elles peuvent être résolues ! Du coup, pour résoudre les noms dans les fichiers de log, employez la commande logresolve.

b) Eviter d'utiliser les fichiers .htaccess La directive qui permet de désactiver l'emploi du fichier .htaccess est : AllowOverride none.

c) DirectoryIndex Pensez à spécifier la liste des fichiers qui constituent les pages d'accueil du site. C. Sécuriser le serveur Apache 1. Quelques directives ServerTokens Prod ServerSignature Off TraceEnable Off 2. mod_reqtimeout RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500 3. Limitations de trafic :mod_ratelimit La limitation de trafic vous évite d’effondrer votre serveur Apache en cas de nombreux téléchargements. SetOutputFilter RATE_LIMIT SetEnv rate-limit 512 SetEnv rate-initial-burst 512

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 27 / 92 -

4. SSL

a) Activer le module sous Debian a2enmod ssl

b) Générer le certificat sous Centos Vérifiez, au préalable, sur votre serveur la présence du paquet OpenSSL : rpm -qa openssl. En cas d’absence, procédez à son installation : yum install openssl. En une commande, sous Linux, vous générez une demande de signature de certificat (CSR) et vous signez le certificat avec OpenSSL : openssl req -new -x509 -nodes -out localhost.crt -keyout localhost.key. Copiez alors les deux fichiers générés dans les répertoires /etc/pki/tls/certs et /etc/pki/tls/private ou bien dans le répertoire de votre choix. Pour un jeu de clé/certificat en 4096 bits : openssl req -x509 -days 365 -newkey rsa:4096 -keyout serveur.key -nodes -out serveur.crt

c) Création du fichier /etc/httpd/conf.d/ssl.conf LoadModule ssl_module modules/mod_ssl.so Listen 443 AddType application/x-x509-ca-cert .crt AddType application/x-pkcs7-crl .crl SSLPassPhraseDialog builtin SSLSessionCache shmcb:/var/cache/mod_ssl/scache(512000) SSLSessionCacheTimeout 300 SSLMutex default SSLRandomSeed startup file:/dev/urandom 256 SSLRandomSeed connect builtin SSLCryptoDevice builtin SetEnvIf User-Agent ".*MSIE.*" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 NameVirtualHost 88.191.124.107:443 DocumentRoot /var/www SSLEngine on SSLProtocol all -SSLv2 SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW SSLCertificateFile /etc/pki/tls/certs/localhost.crt SSLCertificateKeyFile /etc/pki/tls/private/localhost.key ErrorLog logs/www-error_log CustomLog logs/www-access_log combined Order Deny,Allow Include conf/hosts.conf Allow from all 5. Forcer le SSL Il existe plusieurs méthodes pour forcer le SSL : Redirect permanent / https://www.dsfc.net/ RewriteEngine on RewriteCond %{HTTPS} !=on [OR] RewriteCond %{SERVER_PORT} 80 [OR] RewriteCond %{REQUEST_SCHEME} =http RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L] RedirectMatch permanent "^(.*)$" https://dsfc.net$1 RewriteEngine on RewriteCond %{SERVER_NAME} =*.szalkowski.com [OR] RewriteCond %{SERVER_NAME} =www.szalkowski.com [OR]

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 28 / 92 -

RewriteCond %{SERVER_NAME} =szalkowski.com RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent] 6. Let’s Encyrpt Sous Fedora, j’utilise certbot. 7. Entête Envoyé à partir du serveur, le HSTS force le navigateur à passer en https ! Header always set Strict-Transport-Security "max-age=5184000; includeSubDomains; preload" WAF : mod_security SecServerSignature " " 8. Le pare-feu firewalld firewall-cmd --add-service=http --add-service=https --permanent firewall-cmd --zone=public --add-port=80/tcp --permanent firewall-cmd --zone=public --add-port=443/tcp --permanent firewall-cmd –reload 9. Iptables (Exemple) *filter :INPUT DROP [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0]

#-A INPUT -j LOG #-A OUTPUT -j LOG

#vds-171770.hosted-by-itldc.com -A INPUT -s 107.181.161.0/24 -j DROP

#LAN -A INPUT -s 195.154.102.7/32 -j DROP -A INPUT -s 195.154.102.19/32 -j DROP -A INPUT -s 195.154.102.24/32 -j DROP -A INPUT -s 195.154.102.55/32 -j DROP -A INPUT -s 195.154.102.83/32 -j DROP -A INPUT -s 195.154.102.115/32 -j DROP -A INPUT -s 195.154.102.138/32 -j DROP

#Russes -A INPUT -s 81.22.45.0/24 -j DROP

#DNS -A INPUT -p udp -m state --state NEW -m udp --sport 53 -s 62.210.16.7 -j DROP -A INPUT -p udp -m state --state NEW -m udp --sport 53 -s 62.210.16.6 -j DROP

#Ports -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j DROP -A INPUT -p tcp -m state --state NEW -m tcp --dport 23 -j DROP -A INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j DROP -A INPUT -p tcp -m state --state NEW -m tcp --dport 445 -j DROP -A INPUT -p udp -m state --state NEW -m udp --dport 445 -j DROP -A INPUT -p tcp -m state --state NEW -m tcp --dport 135 -j DROP

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 29 / 92 -

-A INPUT -p tcp -m state --state NEW -m tcp --dport 139 -j DROP -A INPUT -p udp -m state --state NEW -m udp --dport 137 -j DROP -A INPUT -p udp -m state --state NEW -m udp --dport 138 -j DROP -A INPUT -p tcp -m state --state NEW -m tcp --dport 445 -j DROP -A INPUT -p udp -m state --state NEW -m udp --dport 445 -j DROP -A INPUT -p udp -m state --state NEW -m udp --dport 1900 -j DROP -A INPUT -p tcp -m state --state NEW -m tcp --dport 3389 -j DROP -A INPUT -p tcp -m state --state NEW -m tcp --dport 10000 -j DROP

#Nikto/Tor -A INPUT -s 185.220.101.0/24 -j DROP -A INPUT -s 185.220.102.0/24 -j DROP -A INPUT -s 137.74.169.241 -j DROP -A INPUT -s 192.42.116.0/24 -j DROP -A INPUT -s 81.17.27.170 -j DROP -A INPUT -s 91.250.241.241 -j DROP -A INPUT -s 195.254.135.76 -j DROP -A INPUT -s 207.244.70.35 -j DROP -A INPUT -s 46.105.52.65 -j DROP -A INPUT -s 199.249.230.71 -j DROP -A INPUT -s 51.15.59.9 -j DROP

#Cabane Libre

-A INPUT -s 212.129.33.83 -j DROP

#Spam de commentaires -A INPUT -s 62.210.180.146 -j DROP -A INPUT -s 62.210.139.12 -j DROP -A INPUT -s 195.154.242.89 -j DROP -A INPUT -s 195.154.226.67 -j DROP

#-A INPUT -m geoip --src-cc CN -j DROP

#Chinanet -A INPUT -s 14.152.59.226 -j DROP #Trinaps -A INPUT -s 178.23.38.1 -j DROP

#Da Scritch #-A INPUT -s 91.209.117.9 -j DROP #-A INPUT -s 2.6.240.1 -j DROP #LeaseWeb DE #-A INPUT -s 91.109.19.24 -j DROP #McMillan #-A INPUT -s 12.36.121.83 -j DROP #-A INPUT -s 12.36.121.84 -j DROP #Machine OVH #-A INPUT -s 91.121.79.180 -j DROP #seodedic #-A INPUT -s 46.161.9.0/24 -j DROP #BrandWatch

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 30 / 92 -

#-A INPUT -s 185.25.32.0/24 -j DROP #-A INPUT -s 5.102.174.132 -j DROP

#Attaque WordPress #-A INPUT -s 176.9.36.102 -j DROP #-A INPUT -s 185.116.213.71 -j DROP #-A INPUT -s 134.213.54.163 -j DROP #-A INPUT -s 27.237.192.22 -j DROP #-A INPUT -s 144.217.81.160 -j DROP

#Nessus WAS -A INPUT -s 54.93.254.166 -j DROP

#Seokicks.de #-A INPUT -s 134.119.234.32 -j DROP

#Proxad #-A INPUT -s 82.253.71.75 -j DROP

#PoneyTelecom #-A INPUT -s 62.210.215.119 -j DROP

#Google

-A OUTPUT -d 8.8.8.8 -j DROP -A OUTPUT -d 8.8.4.4 -j DROP

#Cloudflare

-A OUTPUT -d 1.1.1.1 -j DROP -A OUTPUT -d 1.0.0.1 -j DROP

-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

-A INPUT -i lo -j ACCEPT -A INPUT -m state --state NEW -s 195.154.102.202 -d 195.154.102.202 -j ACCEPT

-A INPUT -p tcp -m state --state NEW -m tcp --dport 59804 -j ACCEPT #-A INPUT -p icmp -j ACCEPT #-A INPUT -p tcp -m state --state NEW -m tcp --dport 11211 -j ACCEPT #-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -m recent --set #-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -m recent --update --seconds 1 --hitcount 40 -j DROP #-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -m limit --limit 20/s --limit-burst 20 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT #-A INPUT -p tcp -m state --state NEW -m tcp --dport 667 -j ACCEPT #-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -m limit --limit 20/s --limit-burst 20 -j ACCEPT #-A INPUT -p tcp -m state --state NEW --dport 443 -m recent --set --name DDOS80 #-A INPUT -p tcp -m state --state NEW --dport 443 -m recent --update --seconds 1 --hitcount 40 --name DDOS80 -j DROP #-A INPUT -p tcp -m tcp -m multiport --dports 20,21 -j ACCEPT #-A INPUT -p tcp -m tcp --dport 27000:27999 -j ACCEPT

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 31 / 92 -

#-A INPUT -j REJECT --reject-with icmp-host-prohibited #-A FORWARD -j REJECT --reject-with icmp-host-prohibited

#SYN -A INPUT -p tcp ! --syn -m state --state NEW -j DROP -A INPUT -p tcp --tcp-flags ALL ACK,RST,SYN,FIN -j DROP -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP

#Incoming fragments -A INPUT -f -j DROP

#NULL Packets -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

#XMAS Packets -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

#Invalid Packets -A INPUT -m state --state INVALID -j DROP -A OUTPUT -m state --state INVALID -j DROP -A FORWARD -m state --state INVALID -j DROP

-A INPUT -j LOG

COMMIT 10. Limitations Cette directive LimitInternalRecursion limite le nombre maximal de redirections internes et de sous-requêtes imbriquées. La directive LimitRequestBody limite la taille de ce qui est envoyé ! La directive LimitRequestFields limite le nombre de champs envoyés par le client. 11. Désactiver l'entête X-Powered-By

a) /etc/php.ini expose_php = Off.

b) Par Apache Impossible : il n'existe pas à ce niveau-là !!! Header unset X-Powered-By

c) Php header_remove('x-powered-by'); 12. Désactiver des instructions php disable_functions disable_classes 13. Cookies echo 1 > /proc/sys/net/ipv4/tcp_syncookies 14. Tester httprint -P0 -h www.dsfc.net -s signatures.txt

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 32 / 92 -

D. L'URL Rewriting 1. Liste des variables serveur en php $value) { echo $key.'='.$value.'
'; } ?> 2. Les drapeaux

Le drapeau peut prendre la valeur NC ou OR ou les deux.

No Case pas de prise en compte de la casse

OR Ou logique

F RewriteRule \.exe - [F] Interdiction de télécharger les exe L Pas d'autres conditions à traiter (sur RewriteRule) R Redirection 3. Un exemple WordPress RewriteEngine On RewriteBase / RewriteRule \/(fck|FCK)editor /blog [QSA,R=301,L] RewriteRule \/favicon.ico\/?$ /favicon.ico [QSA,R=301,L] RewriteRule ^apple-touch-icon-[0-9]+x[0-9]+.*\.png$ /apple-touch-icon.png [QSA,R=301,L] RewriteRule (member|main)\/ / [QSA,R=301,L] RewriteRule ^author\/([qQ]uentin|[fF]abrice|[rR]omain|[aA]lexandre|[mM]ael|[vV]irginie).+\/feed/?$ /feed [QSA,R=301,L] RewriteRule ^(sfi9876|administrator|user|admin\.php)\/?$ / [QSA,R=301,L] RewriteRule ^lightbox\/ / [QSA,R=301,L] RewriteRule [tT]humb\.php$ / [QSA,R=301,L] RewriteRule php[tT]humb / [QSA,R=301,L] RewriteRule .+\/(wp-login\.php)$ / [QSA,R=301,L] RewriteRule .+\/login\.php$ / [QSA,R=301,L] RewriteRule (awstats\.pl|cgi-?bin|php[mM]y[aA]dmin) / [QSA,R=301,L] RewriteRule .php$ /feed/atom [QSA,R=301,L] RewriteRule atom\/feed\/?$ /feed/atom [QSA,R=301,L] RewriteRule feed\/atom\/.+$ /feed/atom [QSA,R=301,L] RewriteRule tag\/feed\/?$ /feed [QSA,R=301,L] RewriteRule rss.php$ /feed [QSA,R=301,L] RewriteRule ^Telechargement\/(.+\.pdf)$ /wp-content/uploads/supports/$1 [QSA,R=301,L] RewriteRule CadreCoordonnees.htm$ /contact [QSA,R=301,L] RewriteRule CadreTelechargement.htm$ /supports-cours-tutoriaux [QSA,R=301,L] RewriteRule index.html?$ / [QSA,R=301,L] RewriteRule ^(bloginfo|dotclear)\/(.+)$ /blog/$2 [QSA,R=301,L] RewriteRule ^(bloginfo|dotclear)/?$ /blog [QSA,R=301,L] RewriteRule blog\/index.php\/(.+)$ /$1 [QSA,R=301,L] #RewriteRule ^xmlrpc.php / [QSA,R=301,L] #RewriteCond %{HTTP_USER_AGENT} Googlebot #RewriteRule \.(css|js)$ / [QSA,R=301,L]

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 33 / 92 -

4. Un autre exemple # BEGIN WordPress RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] # END WordPress 5. Bloquer le hotlinking RewriteEngine on RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?dsfc.net(/|$) [NC] RewriteRule \.(jpg|jpeg|png|gif)$ https://extime.fr/wp- content/uploads/2018/01/cropped-cropped-denis-szalkowski-ete-2011-100px.jpg [NC,R,L] E. Bloquer les requêtes indésirables RewriteEngine On

#RewriteCond %{HTTP_USER_AGENT} "OPR|Opera" [NC] #RewriteCond %{REMOTE_ADDR} ^134\.119\.234\.32$ [NC,OR] #RewriteRule ".*" "http://www.chantalgoya.net" [QSA,R=302,L]

#Erreur 404

#RewriteRule "\.(7z|tgz|tar|bz2|rar|sql|(sql|tar)\.gz)$" "/index.html" [QSA,R=301,L]

RewriteCond %{HTTP_REFERER} "/denis-szalkowski-[0-9]{2}/$" [NC] RewriteRule ".*" "/index.html" [QSA,R=302,L]

#Advanded-site-checker RewriteCond %{HTTP_USER_AGENT} "/advanced-site-checker\." [NC,OR] RewriteCond %{REMOTE_HOST} "\.advanced-site-checker\.$" [NC] RewriteRule ".*" "/index.html" [QSA,R=302,L]

#RewriteCond %{HTTP_REFERER} "\.google\.[a-z]+/" [NC] #RewriteCond %{REQUEST_FILENAME} "^index\.html$" [NC] #RewriteRule ".*" "/" [QSA,R=302,L]

#Recherche WordPress RewriteRule "\?s=([^&]+)&" "/search/$1" [QSA,R=301,L]

#DirHunt,Commix, WhatWeb RewriteCond %{HTTP_USER_AGENT} "^(commix|[pP]ython-(requests|urllib)|WhatWeb)/" [NC] RewriteRule ".*" "/index.html" [QSA,R=302,L]

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 34 / 92 -

#anonym.to RewriteCond %{HTTP_REFERER} "(\.|/)(anonym\.to|(free-proxy|kproxy)\.com)(/|$)" [NC] RewriteRule ".*" "/index.html" [QSA,R=302,L]

#Attaque 12 juillet RewriteCond %{REMOTE_HOST} "\.hosted-by-itldc\.com$ [NC,OR] RewriteCond %{HTTP_REFERER} "\.check-host\.net/" [NC] RewriteRule ".*" "/index.html" [QSA,R=302,L]

RewriteCond %{REMOTE_HOST} ^(62-210-215- 119\.poneytelecom\.eu|62\.210\.215\.119|deimos\.nextgate\.ch|217\.26\.48\.101)$ [NC] RewriteRule "/feed/?$" "https://feeds.feedburner.com/%{ENV:SITE}?format=xml" [QSA,R=301,L]

#Uptime RewriteCond %{HTTP_USER_AGENT} "(; )?(DowntimeDetector|Uptime)/" [NC] RewriteRule ".*" "/index.html" [QSA,R=302,L]

#Commentaire #RewriteCond %{REQUEST_FILENAME} "^wp-comments-post\.php$" [NC] #RewriteCond %{HTTP_USER_AGENT} "![a-z]+/[0-9\.]+$" [NC] #RewriteRule ".*" "/index.html" [QSA,R=403,L]

#Connard RewriteCond %{HTTP_USER_AGENT} "(; )?(ANNUAIREFRANCAIS|PREMSGO)/" [NC] RewriteRule ".*" "/index.html" [QSA,R=302,L]

#Ahrefs/Cliqz/Semrush RewriteCond %{HTTP_USER_AGENT} "(; |^|@|/|.)?(Ahrefs|AndersPink|Buck|Cliqz|Dot|ETI SEO|feedafever|Fever|hyperfactors|linkfluence|MBCrawler|media- monitoring|MJ12|monitorbacklinks|[mM]oreover|Nuzzel|[oO]wlin|R6|radian6|Rewyer|rogerbot|ryte|semantic -visions|Semrush|Slack|[sS]ociallymap|Superfeedr|ubermetrics|YaK)([bB]ot)?(/| |-|.|_)?" [NC] RewriteRule ".*" "https://feeds.feedburner.com/%{ENV:SITE}?format=xml" [QSA,R=302,L]

RewriteCond %{HTTP_REFERER} "^https://securityheaders\.com$" [NC] RewriteRule ".*" "/index.html" [QSA,R=302,L]

#RewriteCond %{HTTP_REFERER} "(\.|/)(kulakowski|microlinux)\." [NC] #RewriteRule ".*" "http://manjaro.org" [QSA,R=302,L]

#RewriteCond %{HTTP_REFERER} "(\.|/)(blog-libre|carlchenet|(journal|lecourrier)duhacker)\." [NC] #RewriteRule ".*" "http://www.lesbisounours.fr" [QSA,R=302,L]

#Wp-login.php #RewriteCond %{HTTP_USER_AGENT} "Firefox/40\.1$" [NC] #RewriteCond %{REMOTE_HOST} \.(wanadoo\.fr|sfr\.net)$ [NC] #RewriteRule "/wp-login\.php($|\?|/)" "/index.html" [QSA,R=302,L]

#Tor

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 35 / 92 -

RewriteCond %{REMOTE_HOST} "(\.|^|-)tor([0-9a-e]+|4us|exit|servers|world)?(\.|-)" [NC] RewriteRule ".*" "/index.html" [QSA,R=302,L]

#Nikto RewriteCond %{HTTP_USER_AGENT} "Nikto" [NC,OR] RewriteCond %{REMOTE_HOST} "^uk-q\.pw$" [NC] RewriteRule ".*" "/index.html" [QSA,R=302,L]

#SkipFish RewriteCond %{HTTP_USER_AGENT} " SF/" [NC] RewriteRule ".*" "/index.html" [QSA,R=302,L]

#WPScans.com RewriteCond %{HTTP_USER_AGENT} "wpscans" [NC,OR] RewriteCond %{REMOTE_HOST} "^wpscans.com$" [NC,OR] RewriteCond %{HTTP_REFERER} "^wpscans.com/?.*$" [NC,OR] RewriteCond %{REMOTE_ADDR} "^2606:4700:20::6818:[ef]2e$" [NC,OR] RewriteCond %{REMOTE_ADDR} "^104\.24\.1[45]\.46$" [NC] RewriteRule ".*" "/index.html" [QSA,R=302,L]

#DDoSS Nessus RewriteCond %{HTTP_USER_AGENT} "^Nessus$" [NC,OR] RewriteCond %{HTTP_REFERER} \.nessus\.org($|/) [NC] RewriteRule ".*" "/index.html" [QSA,R=302,L]

#Méthodes interdites RewriteCond %{REQUEST_METHOD} ^(CONNECT|DEBUG|TRACK|TRACE) [NC] RewriteRule ".*" "/index.html" [QSA,R=302,L]

#Google.co.uk / PHP7.1 #RewriteCond %{HTTP_USER_AGENT} "^PHP/7.1$" [NC] #RewriteCond %{HTTP_REFERER} ^https?://www\.google\.co\.uk/url\?sa=t&source=web&cd=1$ [NC] #RewriteRule "/feed/?$" "https://feeds.feedburner.com/%{ENV:SITE}?format=xml" [QSA,R=302,L]

#RewriteCond %{HTTP_USER_AGENT} "SEOkicks" [NC,OR] #RewriteCond %{REMOTE_ADDR} ^134\.119\.234\.32$ [NC,OR] #RewriteCond %{REMOTE_ADDR} ^2a00:1158:2d:300::20$ [NC,OR] #RewriteCond %{REMOTE_HOST} \.(ispgateway|seokicks)\.de$ [NC] #RewriteRule ".*" "/index.html" [QSA,R=302,L]

#kite.riseup.com / Amazonaws #RewriteCond %{REMOTE_HOST} \.amazonaws\.com$ [NC,OR] #RewriteCond %{REMOTE_HOST} \.riseup\.com$ [NC,OR] #RewriteCond %{REMOTE_HOST} \.dgm\.bg$ [NC,OR] #RewriteCond %{REMOTE_HOST} \.nextstories\.(com|cz)$ [NC,OR] #RewriteCond %{REMOTE_HOST} \.ip-[0-9]+-[0-9]+-[0-9]+\.(eu|net)$ [NC,OR] #RewriteCond %{REMOTE_HOST} \.as[0-9]+\.(eu|net)$ [NC] #RewriteCond %{HTTP_REFERER} ^https?://www\.google\.com$ [NC] #RewriteRule "/(feed|atom)/?$" "https://feeds.feedburner.com/%{ENV:SITE}?format=xml" [QSA,R=301,L]

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 36 / 92 -

#Googleusercontent # #RewriteCond %{REMOTE_HOST} \.googleusercontent\.com(/|$) [NC] #RewriteCond %{HTTP_REFERER} \.reddit\.com/r/linux/comments/3sixd4/ [NC] #RewriteRule "^.*$" "https://feeds.feedburner.com/%{ENV:SITE}?format=xml" [QSA,R=301,L]

#freefullrss #RewriteCond %{REMOTE_ADDR} ^2602:ffc5:20::2:bc$ [NC,OR] #RewriteCond %{REMOTE_HOST} 216\.189\.158\.74 [NC,OR] #RewriteCond %{HTTP_USER_AGENT} "^https?://google\.co\.uk/" [NC,OR] #RewriteCond %{HTTP_REFERER} \.freefullrss\.com/ [NC] #RewriteRule "^.*$" "https://feeds.feedburner.com/%{ENV:SITE}?format=xml" [QSA,R=301,L]

#Gestion des fils RSS / Atom vers FeedBurner # #RewriteCond %{HTTP_USER_AGENT} (\.|/|^|\ |_|-)(alertmix|aol\ reader|bazqux|bloglovin|blogtrottr|boardreader|bubing|buzzstream|ChimpFeedr|datagnion|Digg\ Feed\ Fetcher|dlvr|ecairn|EbuzzingFeed|feed(afever|age|cat|iz|jira|ly|parser|press|spot|WordPress)|fever|flipboardr ss|foo|g2reader|genieo|getpocket|Go-http-client|Hellocoton|Hubii\ Feed\ Reader|hubspot|infegy||kouio|kraken|Kreuzz|leed|linkfluence|livelap|mastodon|meagindex|nettrack |Netvibes|networkedblogs|NewsBlur|newser|newfire|newzie|NING|nuesbyte|owl(er|in)|PaperLibot|PayenkeR eader|Protopage|pubsub|readability|slack|sysomos|theoldreader|traackr|trendiction|tweetedtimes|Twingly|z aclys)(-|\.|\ |/|$) [NC,OR] #RewriteCond %{HTTP_USER_AGENT} (\.|/|^|\ |_|- |\()(commafeed|freshrss|kriss|leed|magpie(rss)?|miniflux|owncloud|selfoss|simplepie|tiny\ tiny\ rss)(-|\.|\ |/|$) [NC,OR] #RewriteCond %{HTTP_USER_AGENT} (\.|/|^|\ |_|-)(hangard|knewin|libfeed|Rome|SPIP|shaarli|WordPress)(- |\.|\ |/|$) [NC,OR] #RewriteCond %{HTTP_USER_AGENT} (\.|/|^|\ |_|-)([cC]url|Go-http- client|HTTrack|Java|[pP]erl|[pP]ython|Ruby|WebCopier|webcopy|wget|Zend)(-|\.|\ |/|$|\\) [NC,OR] #RewriteCond %{HTTP_USER_AGENT} (\.|/|^|\ |_|-)(akregator|drakma|faraday|||newsfox|newsbeuter|newswire|outlook|QuiteRSS||S age|sismics|thunderbird|WebFeedParser|Windows-RSS-Platform)(-|\.|\ |/|$) [NC] #RewriteRule "/(\??feed=?|atom)/?($)?" "https://feeds.feedburner.com/%{ENV:SITE}?format=xml" [QSA,R=301,L]

#RewriteCond %{HTTP:VIA} kproxy [NC,OR] #RewriteCond %{HTTP:FORWARDED} kproxy [NC,OR] #RewriteCond %{HTTP:USERAGENT_VIA} kproxy [NC,OR] #RewriteCond %{HTTP:X_FORWARED_FOR} kproxy [NC,OR] #RewriteCond %{HTTP:PROXY_CONNECTION} kproxy [NC,OR] #RewriteCond %{HTTP:XPROXY_CONNECTION} kproxy [NC,OR] #RewriteCond %{HTTP:HTTP_PC_REMOTE_ADDR} kproxy [NC,OR] #RewriteCond %{HTTP:HTTP_CLIENT_IP} kproxy [NC,OR] #RewriteCond %{REMOTE_HOST} kproxy [NC,OR] #RewriteCond %{HTTP_REFERER} kproxy [NC] #RewriteRule ".*" "%{HTTP_HOST}/index.html" [QSA,R=302,L] # #Kproxy # #RewriteCond %{HTTP_REFERER} \.(hidedoor|kproxy)\.com($|/) [NC,OR] #RewriteCond %{REMOTE_ADDR} ^37\.187\.147\.158$ [NC,OR] #RewriteCond %{REMOTE_ADDR} ^149\.202\.98\.190$ [NC,OR]

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 37 / 92 -

#RewriteCond %{REMOTE_ADDR} ^149\.202\.98\.191$ [NC,OR] #RewriteCond %{REMOTE_ADDR} ^198\.50\.239\.154$ [NC,OR] #RewriteCond %{REMOTE_ADDR} ^167\.114\.102\.230$ [NC,OR] #RewriteCond %{REMOTE_ADDR} ^167\.114\.118\.4$ [NC,OR] #RewriteCond %{REMOTE_ADDR} ^192\.95\.4\.124$ [NC,OR] #RewriteCond %{REMOTE_ADDR} ^192\.95\.4\.125$ [NC,OR] #RewriteCond %{REMOTE_ADDR} ^192\.95\.12\.100$ [NC,OR] #RewriteCond %{REMOTE_ADDR} ^192\.95\.12\.101$ [NC] #RewriteRule ".*" "%{HTTP_HOST}/index.html" [QSA,R=302,L]

#VPN /SurfEasy #RewriteCond %{REMOTE_ADDR} ^135\.87\.127 [NC,OR] #RewriteCond %{REMOTE_ADDR} ^185\.137\.1[6789]\. [NC,OR] #RewriteCond %{REMOTE_ADDR} ^204\.52\.135 [NC] #RewriteRule ".*" "%{HTTP_HOST}/index.html" [QSA,R=302,L]

#RewriteCond "%{SCRIPT_URI}" "\.(css|js)$" #RewriteRule "^.*$" "%{SCRIPT_URI}" [QSA,R=301,L]

#RewriteCond %{REQUEST_METHOD} ^(CONNECT|DEBUG|TRACK|TRACE) [NC] #RewriteRule ".*" "%{HTTP_HOST}/index.html" [QSA,R=302,L]

#Proxad #RewriteCond "%{REMOTE_HOST}" "^fsj77-3-83-154-105-164\.fbx\.proxad\.net$" [NC,OR] #RewriteCond "%{REMOTE_HOST}" "^2001:41d0:2:9fa6::1$" [NC] #Requêtes peu amicales #RewriteCond %{REQUEST_URI} /wp-json/oembed/1\.0/embed\?url= [NC] #RewriteCond %{REMOTE_HOST} (^|/)78\.31\.47\.79(/|$) [NC] #RewriteRule ".*" "https://feeds.feedburner.com/%{ENV:SITE}?format=xml" [QSA,R=301,L]

#SSLLabs #RewriteCond %{REMOTE_HOST} \.ssllabs\.com [NC,OR] #RewriteCond %{HTTP_USER_AGENT} openssl [NC,OR]

# #Amazonaws # #RewriteCond %{REMOTE_ADDR} ^54\.(160\.230\.157|196\.216\.17|224\.141\.201|237\.117\.189)$ [NC,OR] #RewriteCond %{REMOTE_HOST} ^ec2-(107|174|184|23|34|5[024])-[0-9]{1,3}-[0-9]{1,3}-[0-9]{1,3}(\.us- west-[12])?\.compute(-1)?\.amazonaws\.com$ [NC,OR]

#Trafic parasite vers index.html # # #Amine Magdich # #RewriteCond %{REMOTE_HOST} \.(aminemagdich)\.com($|/) [NC,OR]

# #Metrics|Scraping|SEO|Web Analytics # #RewriteCond %{HTTP_USER_AGENT} (\.|/|^|\ |_)(ache|adnorm|ahrefs(bot)?|Backlink(Crawler|test)|brandwatch|BrokenLinkCheck|cocon|commoncrawl|CO

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 38 / 92 -

MODO\ SSL\ Checker|cognitiveseo|crazywebcrawler|dareboost|dead|digimind|drakma|easy- thumb|everyonesocial|gmetrix|grapeshot|inboundli\ link\ checker|ismyblogbroken|jetsli|kraken|linkchecker|linkdex|linkfluence|linqia|ltx71|majestic12|MJ12Bot|MonT ools|moz|netlyzer|nettrack|OnlineWebCheck|okhttp|openlinkprofiler|opensiteexplorer|profound|proximic|rad ian6|rebelmouse|rogerbot|scrapy|semalt|semantic|semrush|seo(kicks|profiler)|similartech|sysomos|ubermetr ics|validator|web-sniffer|webassay|WebCrawler|webmeup-crawler|W3C\ Link\ Checker|xenu\ link\ sleuth|ZEEFscraper)(\.|\ |/|;|$|,|-) [NC,OR] #RewriteCond %{HTTP_REFERER} (\.|/)(becontentking|digimind- evolution|ismyblogworking|radian6|semalt|seoobserver|webfaction)\.com($|/) [NC,OR] #RewriteCond %{HTTP_REFERER} (\.|/)(to_crawl|crawl-existing-db|csv)($|/) [NC,OR] #RewriteCond %{REMOTE_HOST} \.(heilink|semalt)\. [NC,OR] # # #Linkis # #RewriteCond %{HTTP_USER_AGENT} (\.|/|^|\ |_)linkis(\.|\ |/|;|$|,|-) [NC,OR] #RewriteCond %{HTTP_REFERER} (\.|/)linkis($|/) [NC,OR] #RewriteCond %{REMOTE_HOST} \.linkis\. [NC,OR]

# #RewriteCond %{HTTP_USER_AGENT} (\.|/|^|\ |_)Jetsli(de)?(\.|\ |/|;|$) [NC,OR] # #Langages # #Php pour autre chose que le localhost # #RewriteCond %{HTTP_USER_AGENT} (\.|/|^|\ |_|-)([cC]url|Go-http- client|HTTrack|Java|[pP]erl|[pP]ython|Ruby|WebCopier|webcopy|wget|Zend)(-|\.|\ |/|$|\\) [OR]

#UserAgent inconnu # #RewriteCond "%{HTTP_USER_AGENT}" "^(\ |null|-||\\)$" [OR] # #Cul # #RewriteCond %{HTTP_REFERER} (adult|gay|porn|xxx) [NC,OR] #RewriteCond %{HTTP_REFERER} (\.|/)(erolove|imgur|iobloggo|iweblist|proxy2?|sex(blog|photo|saoy)|thepoc)\.(com|in|info|net|org|pro|pw|sit e|top)($|/) [NC,OR] # #Forum # # #RewriteCond %{HTTP_REFERER} (\.|/)((7afr|arabhardware|aworlds|denezka|perecat|tunisia- sat|tvmir)\.(com|net|org))(/|$) [NC,OR] # #Bizarre # #RewriteCond %{HTTP_REFERER} (\.|/)(muzykalnyiportal[0-9a-z]+)\. [NC,OR] #RewriteCond %{HTTP_REFERER} (\.|/)(groupemutuel)\.ch($|/|\?) [NC,OR] #RewriteCond %{HTTP_REFERER} (\.|/)(antoinebenkemoun|cartouchemachineaaffranchir|lepoint|paperblog|snab|tux-)\.fr($|/) [NC,OR] #RewriteCond %{HTTP_REFERER} (\.|/)lesterchan\.net($|/) [NC,OR] #RewriteCond %{HTTP_REFERER} (acheter|acquistare|cash|comprar|coupon) [NC,OR]

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 39 / 92 -

#RewriteCond %{HTTP_REFERER} /comments\.pl(/|$|\?) [NC,OR] #RewriteCond %{HTTP_REFERER} (\.|/)([a-z0-9]+-?ess?ay|ess?ay-?[a-z0-9]+|writeess?aypro)(\.) [NC,OR] #RewriteCond %{HTTP_REFERER} (\.|/)(cash[a-z]*|espanol|myoutubevideo|offresduweb)(\.) [NC,OR] #RewriteCond %{HTTP_REFERER} (\.|/)(1001sovet|all4webs|aircus|ampblogs|ampedpages|ampproject|articles|avkzarabotok|aviationweather|a viav|aworlds|babysmart|baikalyachts|banket- restoran|blogas|blogolize|blogo(so)?cial|bridestopsites|brushd|cba|comuninades|elpais|excitecash|freeblog|iw opop|jefaismonsite|kallekteka|ladyclub|log- s|logdown|oldtownestate|onesmablog|onlc|oooh|page(4|10)|prmb|pro- tools|prohoster|santi|scanmarine|snack|soup|spruz|sureone|swiftnaturecamp|tinyblogging|vulnweb|weather| webovky|webnode|webobo|webself|webuje|well- com|wifeo|writeessaypro|[cy]0|ymlp|zrus)\.(be|biz|com|cz|es|eu|fr|gov|io|info|it|jp|kz|me|mobi|net|org|pl|pr o|ru\.com|su|tw|watch|ws)(/|$) [NC,OR] # #Médicaments #RewriteCond %{HTTP_REFERER} (drugs?|canad(a|ian)|pharmac(ie|y)) [NC,OR] #RewriteCond %{HTTP_REFERER} (\.|/|-)(altace(blr)?|anafranil|careproste?|citaloprame?|compraaccutane|crestore?|diflucan|elipul|(kaufen)med rol|lasix|malegra|purevolume|viagr[aio]|ziac)\. [NC,OR] #RewriteCond %{HTTP_REFERER} viagra [NC,OR] # #Les Huns modernes # #RewriteCond %{REMOTE_HOST} \.ru(/|$) [NC,OR] #RewriteCond %{HTTP_REFERER} (\.|/|^)captdeveloppement\.net(/|$) [NC,OR] #RewriteCond %{REMOTE_HOST} (^|/)62-210-215-119\.poneytelecom\.eu(/|$) [NC,OR] #RewriteCond %{REMOTE_HOST} 185\.93\.185\.246 [NC,OR] #RewriteCond %{HTTP_REFERER} \.(ae|asia|au|bid|bg|br|bz|cc|center|club|corp|cx|do|ga|gdn|guru|id|kz|lt|lv|moscow|ninja|nu|onion|pet|porn|r eview|su|taxi|tl|tn|top|travel|ua|uz|watch|ws|wtf|xn--p1ai|xyz)($|/) [NC] #RewriteRule ".*" "https://feeds.feedburner.com/%{ENV:SITE}?format=xml" [QSA,R=301,L] #RewriteRule ".*" "%{HTTP_HOST}/index.html" [QSA,R=302,L] F. Utilisation de l'erreur 404 (chez Free)

a) Le fichier .htaccess ErrorDocument 500 /index.php ErrorDocument 404 /index.php

b) Le fichier index.php

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 40 / 92 - case '/rss.php': $url='/feed'; break; case '/rss/feed.php': $url='/feed/'; break; case '/rss/?media=rss': $url='/feed/'; break; default : break; } $dom='http://www.dsfc.net'; header("HTTP/1.0 200 OK"); header('Location: '.$dom.$url); exit; ?>

c) Le fichier url_rewriting.php 2. Interdire Internet Explorer RewriteEngine On RewriteCond %{HTTP_USER_AGENT} MSIE RewriteRule ^(.*)$ http://www.mozilla-europe.org [R] G. CGI 1. Directives ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ Options ExecCGI AddHandler cgi-script .cgi .pl 2. Exemple de cgi en Perl Le fichier dont le contenu suit est à sauvegarder dans le répertoire spécifié par ScriptAlias. Il faut aussi le rendre exécutable.

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 41 / 92 -

#!/usr/bin/perl print "Content-type: text/html\n\n"; print "Hello, World.
"; foreach $key (keys %ENV) { print "$key --> $ENV{$key}
"; } 3. Awstats LoadModule cgi_module modules/mod_cgi.so Alias /awstats/icon/ /var/www/awstats/icon/ ScriptAlias /awstats/ /var/www/awstats/ DirectoryIndex awstats.pl Options ExecCGI # AllowOverride All Order allow,deny # deny from all allow from all H. La protection de la lecture des répertoires # protection de la lecture des répertoires Options -Indexes I. Le mode MultiViews Pour négocier le contenu en fonction de l'en-tête du navigateur, modifiez la directive Options comme suit : Options +MultiViews Les noms de fichier pour le français doivent se terminer en .fr; les fichiers de langue anglaise en .en. 1. AddLanguage Syntaxe AddLanguage Code_Pays_Iso .extension Exemple AddLanguage fr .fr Intérêt Permet de spécifier les extensions représentant les codes pays. 2. LanguagePriority Syntaxe LanguagePriority Code_Pays1 CodePays2 CodePaysN Intérêt Apache gère la langue à la place du navigateur lorsque le navigateur ne la gère pas. Portée Config, virtual host, directory, .htaccess J. WebDav Au préalable, vous devez décommenter les deux lignes suivantes : LoadModule dav_module modules/mod_dav.so LoadModule dav_fs_module modules/mod_dav_fs.so Ensuite, vous devez entrer la directive suivante : DavLockDB "C:/Program Files/Apache Group/Apache2/var/DavLock" Au niveau du répertoire sur lequel vous souhaitez activer lapublication WebDav, entrez la Directive Dav On. Dav On Pour tester WebDav, vous pouvez utiliser cadaver. K. Les directives de bloc (fichier http.conf) 1. NameVirtualHost La directive permet de définir un hôte et un port d'écoute pour les domaines virtuels. 2. VirtualHost Vous pouvez définir plusieurs noms de domaines :

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 42 / 92 -

ServerName www.dsfc.fr ServerAdmin [email protected] DocumentRoot htdocs/dsfc.fr ErrorLog logs/dsfc.fr-error_log CustomLog logs/dsfc.fr-access_log common 3. Directory Le contenu .htaccess supplante les directives Directory et DirectoryMatch. Les deux directives acceptent les expressions régulières. #Options Indexes FollowSymLinks MultiViews ExecCGI #Idem à au dessous Options All AllowOverride None Allow from all Order allow,deny #Indique tous les répertoires dont le nom commence entre a et d #Idem à ci-dessus 4. Files Pour obtenir la liste des extensions utilisées : find . –type f|grep –o '\.[^./]*$'|sort -u … Très important : la sécurisation des fichiers dont le nom est préfixé par .ht, comme .htaccess qui ne doivent pas être accessibles par une requête http/https. Require all denied

a) Récupérer les extensions de fichiers d'un branche de site find -type f|grep -o ' \.[^./]*$'|sort -u

b) Exemple de fichier .htaccess : utilisation d'une white list # Seuls sont autorisés les fichiers dont l'extension est gif,jpg,jpeg,png Order Allow,Deny Deny from all

c) Exemple de protection du répertoire uploads d'un blog wordpress order allow,deny deny from all

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 43 / 92 -

5. Location Cette directive est identique à Directory sauf qu'elle s'applique à des Url. 6. IfDefine La directive est effective qu'à la condition que le Serveur soit lancé par apache.exe -D nom 7. IfModule L. Sécuriser 1. ServerSignature ServerSignature off|on|email Cette directive, lorsqu'elle est à on ajoute le numéro de version du serveur au bas de chaque page visitée. 2. ServerTokens (config) ServerTokens min|OS|full Par défaut, la valeur est full. On peut extraire à partir du serveur la version de l'os et les modules compilés. M. Les autres directives 1. ServerName (config, virtual host) Pour éviter les sorties Dns, entrez le nom de domaine ainsi que le nom de la machine dans le fichier host. ServerName www.dsfc.fr Le nom qui est choisi pour ServerName doit être résolu soit au travers du fichier /etc/hosts ou via la résolution DNS défini dans /etc/resolv.conf (/etc/sysconfig/network-scripts/ifcfg-enp0s3). 2. UseCanonicalName (config, virtual host, directory, .htaccess) UseCanonicalName on|off La valeur par défaut est on. 3. ServerAdmin (config,virtual host) ServerAdmin [email protected] 4. ServerAlias (virtual host) ServerAlias dsfc.fr,ftp.dsfc.fr Indique des alias pour les noms de domaine virtuels. 5. ServerPath (virtual host) ServerPath Dans le cas où vous déclarez deux sites sur une même adresse ip, vous devez utilisez la variable ServerPath pour indiquez un répertoire différent à partir du chemin défini par ServerRoot. 6. ServerRoot (config) ServerRoot "F:/Apache Group/Apache" Emplacement des fichiers conf et logs 7. PidFile (config) PidFile logs/httpd.pid Sert sur UNIX pour tuer le processus 8. ScoreBoardFile (config) ScoreBoardFile logs/apache_runtime_status Si vous devez utilisez un tel fichier, placez le sur un disque virtuel. 9. SendBufferSize (config) SendBufferSize Agrandit le tampon de transmission TCP

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 44 / 92 -

10. LockFile (config) LockFile logs Avec certaines directives de compilation, Apche ne se lance pas tant qu'il n'a pas écrit lee fichier de verrouillage logs/accept.lock 11. Le mode KeepAlive Ce mode permet de minimiser les ouvertures de session au serveur Apache. KeepAlive On MaxKeepAliveRequests 450 KeepAliveTimeout 30 #MaxConnectionsPerChild 0

a) KeepAlive (config) KeepAlive on

b) KeepAliveTimeout (config) KeepAliveTimeout 15 Nombre de secondes d'attente pour un reqûete suivante

c) TimeOut (Config) TimeOut 300 Temps d'attente de la réception d'une requête et d'expédition de chaque bloc de réponse

d) MaxKeepAliveRequests MaxKeepAliveRequests 100 Nombre de connexions persistentes 12. HostNameLookups (config, virtual host) HostNameLookupson|off|double Résolution DNS inverse 13. Include (config) Include nom_de_fichier Insère le contenu d'un fichier 14. NameVirtualHost (config) NameVirtualHost 192.168.0.100:80 Permet d'utiliser ensuite plusieurs VirtualHost utilisant un hostname sur la même ip 15. Listen (config) Vous pouvez ajouter plusieurs directives Listen. Listen 192.168.0.100:80 Ecoute la combinaison adresse+port Listen 81 Ecoute sur toutes les adresses IP sur le port 81 16. ListenBackLog (config) ListenBackLog 511 Définit la longueur maxi de la file de connexion. Cela évite d'être l'objet d'attaque de débordement de type TCP SYN. 17. ServerType (config) ServerType standalone|inetd L'option inetd génère une collection de processus fils. A déconseiller en cas de forte charge. 18. ThreadsPerChild (config Win32) ThreadsPerChild 50 Dans le cas où il existe plusieurs processus enfants 19. HeaderName (config, file, directory, location, .htaccess, virtualhost) HeaderName set|add|unset|append Entête http "valeur" 20. Options (config, file, directory, location, .htaccess, virtualhost) None Aucune option All Toutes le soptions sauf Multiviews, IncludeNOEXEC, SymLinksIfOwnerMatch (Liens symboliques suivis) FollowSymLinks Permet de suivre les liens symboliques (Linux/Unix) ExecCGI Exécution des CGI autorisée IncludesNOEXEC Les SSI sont autorisées sans les commandes #exec et #include

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 45 / 92 -

Includes Les SSI sont autorisés qu'à la condition qu'ils n'utilisent que #include Indexes Parcours de répertoire possible Multiviews Gestion multi-langue SymLinksIfOwnerMatch Les liens sont suivis à condition que l'utilisateur dispose des droits sur le lien. Exemple : Options –ExecCGI –IncludeNOEXEC +Includes -Indexes 21. CoreDumpDirectory (config) (Unix) CoreDumpDirectory /usr/www Emplacement du vidage mémoire

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 46 / 92 -

VI. Les modules

A. Expirations Pour utiliser ce module, pensez à décommenter dans le fichier httpd.conf la ligne : LoadModule expires_module modules/mod_expires.so 1. ExpiresActive Syntaxe Expires on|off Defaut Off Portée Partout et dans .htaccess lorsque AllowOverride Indexes est employé Intérêt Active ou désactive le mécanisme d'expiration. 2. ExpiresByType Syntaxe ExpiresByType type_mime durée Portée Partout et dans .htaccess lorsque AllowOverride Indexes est employé Intérêt La durée indique le temps durant lequels les fichiers doivent rester actifs. 3. ExpiresDefault Syntaxe ExpiresDefault heure Portée Partout Intérêt Heure d'expiration par défaut 4. Exemple FileETag MTime Size #Header unset Last-Modified ExpiresActive On ExpiresDefault "access plus 1 day" ExpiresByType image/gif A2419200 ExpiresByType image/jpeg A2419200 ExpiresByType image/png A2419200 ExpiresByType image/svg+xml A2419200 ExpiresByType image/vnd.microsoft.icon A2419200 ExpiresByType image/x-icon A2419200 ExpiresByType image/ico A2419200 ExpiresByType text/ico A2419200 ExpiresByType application/ico A2419200 ExpiresByType text/html A14400 ExpiresByType text/plain A14400 ExpiresByType text/javascript A2419200 ExpiresByType text/css A2419200 ExpiresByType text/xml A5 ExpiresByType application/javascript A2419200 ExpiresByType application/xml A5 ExpiresByType application/rss+xml A300 ExpiresByType application/x-httpd-php A300 ExpiresByType application/x-shockwave-flash A2419200 ExpiresByType application/x-gzip A14400 ExpiresByType application/pdf A2419200 ExpiresByType application/json A14400 ExpiresByType application/x-javascript A14400 ExpiresByType text/x-javascript A14400 ExpiresByType text/x-json A14400

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 47 / 92 -

ExpiresByType font/woff2 A2419200 ExpiresByType application/vnd.ms-fontobject A2419200 ExpiresByType application/font-woff A2419200 ExpiresByType application/font-sfnt A2419200 ExpiresByType application/font-opentype A2419200 ExpiresByType application/font-truetype A2419200 B. Le module anti-dos :mod_evasive DOSHashTableSize 3097 DOSPageCount 2 DOSSiteCount 50 DOSPageInterval 1 DOSSiteInterval 1 DOSBlockingPeriod 10 C. Le module Google : mod_pagespeed http://code.google.com/intl/fr/speed/page-speed/docs/module.html D. Le module mod_fcgid L'objet est de pouvoir exécuter des scripts CGI avec un autre utilisateur que l'utilisateur Apache. E. Le module mod_chroot F. Compression 1. Test http://www.whatsmyip.org/http_compression/ http://www.gidnetwork.com/tools/gzip-test.php 2. Le mod_deflate (Apache 2) Ce module permet d'accélérer par la compression. # MOD_DEFLATE COMPRESSION SetOutputFilter DEFLATE AddOutputFilterByType DEFLATE text/html text/css text/plain text/xml application/x-javascript application/x-httpd-php #Pour les navigateurs incompatibles 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 #ne pas mettre en cache si ces fichiers le sont déjà SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip #les proxies doivent donner le bon contenu Header append Vary User-Agent env=!dont-vary

DeflateCompressionLevel 9 SetOutputFilter DEFLATE AddOutputFilterByType DEFLATE text/html text/plain text/css text/javascript text/xml AddOutputFilterByType DEFLATE application/javascript application/xml 3. Le mod_gzip (Apache 1.x) RewriteEngine on #Check to see if browser can accept gzip files. If so and we have it - serve it! ReWriteCond %{HTTP:accept-encoding} gzip

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 48 / 92 -

RewriteCond %{HTTP_USER_AGENT} !Safari #make sure there's no trailing .gz on the url ReWriteCond %{REQUEST_FILENAME} !^.+\.gz$ #check to see if a .gz version of the file exists. RewriteCond %{REQUEST_FILENAME}.gz -f #All conditions met so add .gz to URL filename (invisibly) RewriteRule ^(.+) $1.gz [QSA,L] mod_gzip_on Yes mod_gzip_dechunk Yes mod_gzip_keep_workfiles No mod_gzip_can_negotiate Yes mod_gzip_add_header_count Yes mod_gzip_send_vary Yes mod_gzip_command_version '/mod_gzip_status' mod_gzip_min_http 1000 mod_gzip_minimum_file_size 300 mod_gzip_maximum_file_size 512000 mod_gzip_maximum_inmem_size 60000 mod_gzip_handle_methods GET POST mod_gzip_temp_dir /tmp mod_gzip_item_include file \.html$ mod_gzip_item_include file \.php$ mod_gzip_item_include file \.pl$ mod_gzip_item_include file \.rb$ mod_gzip_item_include file \.py$ mod_gzip_item_include file \.cgi$ mod_gzip_item_include file \.css$ mod_gzip_item_include file \.js$ mod_gzip_item_include mime ^application/javascript$ mod_gzip_item_include mime ^application/x-javascript$ mod_gzip_item_include mime ^text/.* mod_gzip_item_include mime ^httpd/unix-directory$ mod_gzip_item_include handler ^cgi-script$ mod_gzip_item_include handler ^server-status$ mod_gzip_item_include handler ^server-info$ mod_gzip_item_include handler ^application/x-httpd-php mod_gzip_item_exclude mime ^image/.* 4. Exemple d'utilisation du mode deflate AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE text/css 4. Le module Brotli

#SetOutputFilter DEFLATE # #AddOutputFilterByType DEFLATE text/html text/plain text/css text/javascript text/xml #AddOutputFilterByType DEFLATE application/javascript application/xml application/xhtml+xml application/rss+xml #

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 49 / 92 -

DeflateCompressionLevel 9

AddOutputFilterByType DEFLATE text/html text/plain text/css text/javascript text/xml image/svg+xml AddOutputFilterByType DEFLATE application/javascript application/xml application/xhtml+xml application/rss+xml G. Le mod_expires Ce module permet d'augmenter le stockage des données dans le cache du naviagteur. # BEGIN Expire headers ExpiresActive On ExpiresDefault "access plus 7200 seconds" ExpiresByType image/jpg "access plus 2592000 seconds" ExpiresByType image/jpeg "access plus 2592000 seconds" ExpiresByType image/png "access plus 2592000 seconds" ExpiresByType image/gif "access plus 2592000 seconds" AddType image/x-icon .ico ExpiresByType image/ico "access plus 2592000 seconds" ExpiresByType image/icon "access plus 2592000 seconds" ExpiresByType image/x-icon "access plus 2592000 seconds" ExpiresByType text/css "access plus 2592000 seconds" ExpiresByType text/javascript "access plus 2592000 seconds" ExpiresByType text/html "access plus 7200 seconds" ExpiresByType application/xhtml+xml "access plus 7200 seconds" ExpiresByType application/javascript A259200 ExpiresByType application/x-javascript "access plus 2592000 seconds" ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds" # END Expire headers H. Le mod_headers 5. Gestion du cache # BEGIN Cache-Control Headers Header set Cache-Control "max-age=2592000, public" Header set Cache-Control "max-age=2592000, private" Header set Cache-Control "max-age=7200, public"

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 50 / 92 -

# Disable caching for scripts and other dynamic files Header unset Cache-Control # END Cache-Control Header 6. Gestion de la sécurité Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" #Header always set Public-Key-Pins "pin- sha256=\"byrI8zmxutbRY2xCxUHNWyL6qEUhm0pXtvdE+Of/U88=\"; max-age=5184000; includeSubDomains" Header always set x-content-type-options "nosniff" Header always set x-xss-protection "1; mode=block" Header always set x-frame-options "sameorigin" # https://securityheaders.com/ Header always set Content-Security-Policy "default-src 'self' ; frame-src 'self' https://www.youtube-nocookie.com https://www.youtube.com https://www.google.com/calendar https://www.infoclimat.fr; child-src 'self' https://www.youtube-nocookie.com https://www.youtube.com https://www.google.com/calendar https://www.infoclimat.fr; img-src 'self' data: http: https: ; style-src 'self' data: http: https: 'unsafe-inline' ; script-src 'self' data: http: https: 'unsafe-inline' 'unsafe-eval' " #upgrade-insecure-requests ; #Header always set Content-Security-Policy-Report-Only "default-src 'self'; script-src 'self' code.jquery.com cdn.ampproject.org; style-src 'self' fonts.googleapis.com ; child-src www.youtube.com www.youtube-nocookie.com; connect-src 'self' ; font-src 'self' fonts.gstatic.com fonts.googleapis.com; form- action 'self' ;" Header always set Referrer-Policy "strict-origin-when-cross-origin" Header always set Feature-Policy "vibrate *; usermedia *; sync-xhr 'self' https://www.dsfc.net https://www.voie-militante.com https://extime.fr https://www.saint-eloi-de-fourques.net https://forum- informatique.net" #Header set Cache-Control "public, max-age=300, max-stale=300, immutable" #Header append x-robots-tag "index, follow, noarchive" Header append x-robots-tag "index,follow" Header always unset X-Powered-By Header always unset X-PingBack TraceEnable Off H2Push Off #Header unset Strict-Transport-Security #Header always set Access-Control-Allow-Origin "www.dsfc.net" #Header always set Access-Control-Allow-Methods "GET, OPTIONS" #Header always set Access-Control-Max-Age "14400" #Header always set Access-Control-Allow_Headers "Content-Type" # #Header set Vary * Header append Vary: Accept-Encoding Header append Vary: User-Agent Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure Header append Permissions-Policy: geolocation=() # I. Les eTags

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 51 / 92 -

Les entity tags sont utilisés dans la gestion du cache. Attention à les supprimer !!! Header unset ETag FileETag none J. Exemple #Header unset Pragma Header unset Etag FileETag None Header set Cache-Control "max-age=2592000, public" Header unset Last-Modified

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 52 / 92 -

VII. Gestion de l'accès du client au serveur

A. Directives d'authentification 1. AuthType Syntaxe AuthType Basic|Digest Portée Directory, .htaccess Intérêt Précise le type du contrôle d'autorisation Remarque Digest est géré par aucun navigateur 2. AuthName Syntaxe Authname "royaume" Portée Directory, .htaccess Intérêt Fournit le nom du "royaume" dans lequel les mots de passe des utilisateurs sont valides 3. AuthGroupFile Syntaxe AuthGroupFile nom_de_fichier Portée Directory, .htaccess Intérêt fournit le nom de fichiers des utilisateurs et des groupes Le fichier est du type : utilisateurs:akim ahmed benedicte administrateurs:marie denis alban stephane 4. AuthUserFile Syntaxe AuthUserFile nom_de_fichier Portée Directory, .htaccess Intérêt fournit les noms d'utilisateurs et leurs mots de passe Le fichier est du type : akim:akim ahmed:ahmed benedicte:benedicte 5. Require Syntaxe Require user user1 user2 userN|group group1 groupN|valid-user Portée Directory, .htaccess Intérêt Active la gestion des mots de passe Le fichier est du type : akim:akim ahmed:ahmed benedicte:benedicte Require all granted Require all denied

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 53 / 92 -

6. Paramètres de sécurité d'IE Faites un clic droit sur l'icône d'Internet Explorer située sur le bureau. Choisissez Propriétés dans le menu contextuel. Cliquez sur l'onglet Sécurité. Ensuite, choisissez sur le bouton Personnaliser le niveau

Pour pouvoir accéder en mode accès privé, cochez Demander le nom d'utilisateur et le mot de passe.

B. Autoriser et interdire en fonction des Ip et des noms d'hôtes 1. Allow from Syntaxe allow from all tous les hôtes sont autorisés allow station

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 54 / 92 - allow 192.168 allow 192.168.0.100 allow 192.168.0.0/255.255.255.0 allow 192.168.0.0/24 (24 premiers bits à 1) Portée Directory,.htaccess Intérêt Autorise des hôtes 2. Allow from env Syntaxe allow from env=nom_de_variable Exemple BrowserMatch 192.168 masque Allow from env=masque Portée Directory,.htaccess Intérêt Autorise des hôtes à partir de variables d'environnements 3. Deny from Inverse à la commande allow 4. Deny from env Symétrique à la commande allow from env 5. Order Syntaxe order deny allow Remarque la commande order mutual-failure autorisent les hôtes qui figurent dans allow mais qui ne figurent pas dans la liste deny Intérêt Ordre des autorisations ou interdictions C. Accès anonyme N'oubliez pas de décommenter le module : LoadModule anon_auth_module modules/mod_auth_anon.so 1. Anonymous Syntaxe Anonymous user1 user2 Intérêt L'utilisateur doit s'identifier sous l'un des noms spécifiés par cette commande. Il doit entrer un mot de passe. 2. Anonymous_NoUserId Syntaxe Anonymous_NoUserId on | off Défaut Off Portée Directory, .htaccess Remarque Lorque la directive est à on, les utilisateurs sont obligés d'entrer un mot de passe, bien que leur id puisse être vide. 3. Anonymous_LogEmail Syntaxe Anonymous_LogEmail on | off Défaut on Portée Directory, .htaccess Intérêt Les accès sont enregistrés dans logs/httpd_log ou dans le journal TransferLog. 4. Anonymous_VerifyEmail Syntaxe Anonymous_VerifEmail on | off Défaut off Portée Directory, .htaccess Intérêt L'ID doit contenir au moins un "@" et un ".". 5. Anonymous_Authorative Syntaxe Anonymous_Authorative on | off Défaut off

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 55 / 92 -

Portée Directory, .htaccess Intérêt Seul l'accès anonyme est autorisé si la valeur est à on. D. Démon identd Identity on|off permet d'interroger l'hôte afin d'en déduire son identité. E. Les cookies 1. CookieLog Syntaxe CookieLog nom_de_fichier Portée Config, virtual host Intérêt Consigne les cookies dans un journal central 2. CookieTracking Syntaxe CookieTracking on|off Portée Config, virtual host, directory,.htaccess Intérêt Apache envoie un cookie de poursuite à chaque utilisateur. Remarque N'oubliez pas de décommenter la ligne : LoadModule usertrack_module modules/mod_usertrack.so 3. CookieExpires CookieExpires "1 year 2 months 3 weeks 2 days 4 hours 20 minutes" F. .htaccess Ce fichier stocké dans chacun des répertoires permet de gérer des droits spécifiques. Son utilisation ralentit l'efficacité des requêtes. Il existe un générateur en ligne de ce fichier : http://cooletips.de/htaccess/ Pour empêcher de voir les fichiers .htaccess, entrez dans le fichier http.conf : order allow,deny deny from all 1. La protection du fichier .htaccess # protect the htaccess file order allow,deny deny from all 2. AccessFileName (config) AccessFileName .htaccess Détermine le fichier de configuration personnalisé 3. AllowOverride Cette directive permet de définir les directives qui peuvent être inclues dans le fichier .htaccess. Syntaxe AllowOverride AuthConfig | FillInfo | Indexes | Limit | Options | All |none Intérêt Cette commande évite les surcharges. Si la valeur est à None, les fichiers .htaccess sont ignorés. 4. Mise en œuvre de la sécurité par le fichier .htaccess

a) Intérêt Le fichier .htaccess doit être crée dans le répertoire contenant les fichiers consultables par le navigateur. Vous pouvez créer autant de fichiers .htaccess que de répertoires présents dans le site.

b) Exemple de fichier .htaccess AuthUserFile /var/www/html/users AuthGroupFile /var/www/html/groups AuthName "Dead zone" AuthType Basic

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 56 / 92 -

# # require olivier denis require valid-user #

c) Explications des directives La directive AuthName fait apparaître une information en tant que titre de la boîte de dailogue. Les directives AuthUserFile et AuthGroupFile définissent les fichiers contenant les utilisateurs et groupes, ainsi que le mot de passe crypté au niveau du fichier utilisateur. Ce fichier doit être créé à l'aide de la commande htpasswd –c /var/www/html/users olivier. Répétez Cette opération pour chaque utilisateur. Le fichier des groupes doit être édité par un éditeur de votre choix (Midgnight Commander bien sûr) : mc –e /var/www/html/groups Les tags indiquent que l'accès ne peut se faire que par une authentification par formulaire (réussie). Si vous avez les droits d'accès au fichier httpd.conf, alors vous pouvez modifier les directives associées au répertoire /var/www/html : AuthUserFile /var/www/html/users AuthGroupFile /var/www/html/groups AuthName "Dead zone" AuthType Basic # # require user olivier denis require valid-user #require group admin #

d) Gestion des droits sur le fichier .htaccess Si vous éditez le fichier en tant que root, n'oubliez pas de changer le propriétaire du répertoire qui est défini par la directive user dans le fichier /etc/httpd/conf/httpd.conf (sur RedHat) : chown apache /var/www/html

e) Le mode digest Lors de l'utilisation de la commande htdigest, pensez à reprendre la chaîne de caractères utilisée au niveau de la directive AuthName. htdigest -c c:/wamp/www/admin/.htpasswd "Identification" denis

AuthType Digest AuthName "Identification" AuthDigestProvider file AuthUserFile c:/wamp/www/admin/.htpasswd AuthDigestDomain /admin2 Require valid-user

5. Via PAM DefineExternalAuth pwauth pipe /usr/sbin/pwauth AuthType Basic AuthName "Zone privée" AuthBasicProvider external AuthExternal pwauth Require valid-user

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 57 / 92 -

G. MIME : négociation du contenu et de la langue 1. Définition MIME Multimedia Internet Mail Extensions 2. Module Mod_mime.c 3. Liste des types MIME Voir Annexe A 4. Directives MIME

a) TypesConfig Syntaxe TypesConfig nom_de_fichier Défaut conf/mime.types Intérêt Indique le chemin et le nom de fichie où sont définis les types MIME Portée Config

b) AddType Syntaxe AddType type_mime extension1 extension2 Exemple AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps Portée N'importe où Intérêt Cette commande ne doit pas être utilisée pour les types MIME authentiques.

c) DefaultType Syntaxe DefaultType type_mime Exemple DefaultType text/plain Portée N'importe où Intérêt En cas de type inconnu, précisez le type par défaut.

d) AddEncoding Syntaxe AddEncoding encode_mime extension1 extension2 Exemple AddEncoding x-gzip zip Portée N'importe où Intérêt Ajoute des nouveaux types d'encodage.

e) ForceType Syntaxe FordeType type_de_media Exemple ForceType image/gif Portée Directory, .htaccess Intérêt Force des types dans des répertoires déterminés. H. Index de répertoire 1. DirectoryIndex Syntaxe DirectoryIndex index Portée Config, virtual host, directory, .htaccess Intérêt Permet de traiter indifféremment index.code_pays.html ou index.html.code_pays Exemple DirectoryIndex index.htm Remarque Pour cette directive, n'oubliez pas de décommenter la ligne : AddModule mod_include.c mod_autoindex.c mod_dir.c mod_cgi.c

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 58 / 92 -

I. Redirection 1. ScriptAlias Syntaxe ScriptAlias Chemin_url_serveur Répertoire Portée Serveur config, virtual host Intérêt Permet d'indiquer un chemin différent pour les scripts en faisant référence à un répertoire différent 2. Alias Il faut gérer le répertoire défini par une directive Directory afin de gérer les droits.

Alias /liste /ftp/pub/liste

AllowOverride All Require all granted

#Alias /liste "d:/liste"

# # AllowOverride All # Require all granted #

Syntaxe ScriptAlias Chemin_url_serveur Répertoire Portée Serveur config, virtual host Intérêt Permet d'indiquer un chemin différent pour les pages htm en faisant référence à un répertoire différent 3. UserDir Syntaxe UserDir Chemin_Url_Serveur|Répertoire_serveur Remarque uniquement sur Unix Intérêt Permet l'accès à un répertoire privé 4. Redirect Attention, cette directive efface toutes les directives headers exécutées dans les fichiers de configuration précédents. Syntaxe Redirect Chemin_Url_Serveur Url Intérêt Redirige les demandes de Chemin_url vers Url redirect 301 / http://www.dsfc.net

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 59 / 92 -

VIII. Les SSI (Server Side Include)

A. Conditions de fonctionnement Le module include doit être ajouté. Sous Debian, tapez a2enmod include. Le fichier apache2.conf doit contenir les lignes suivantes : AddType text/html .shtml .stm AddOutputFilter INCLUDES .shtml .stm Options +Includes Par ailleurs, Les fichiers dont l'extension est stm et shtml qui contiennent les Scripts SSI doivent être rendus exécutables à l'aide de la commande chmod +x. B. Variables SSI DATE_GMT Date GMT DATE_LOCAL Date de la zone horaire DOCUMENT_NAME Le nom du document DOCUMENT_URI L'url du document LAST_MODIFIED Date de dernière modification du fichier QUERY_STRING_UNESCAPED La requête C. Exemple

Nous sommes le
Ce fichier a été modifié pour la dernière fois .
Le fichier pèse bytes.
Le fichier pèse .
Le fichier a été modifié le .
  
  
  
Vous êtes sur Firefox !

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 60 / 92 -

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 61 / 92 -

IX. Le proxy

A. Chargement du module En préalable, n'oubliez pas d'activer la directive : LoadModule proxy_module modules/mod_proxy.so L'activation du serveur proxy inhibe le serveur http. B. Les directives 1. ProxyVia ProxyVia On 2. ProxyRequest Syntaxe ProxyRequest on|off Défaut off Portée config Intérêt Active le proxy 3. ProxyRemote Syntaxe ProxyRemote protocole url:port Remarque Le protocole peut être désigné par une * pour désigner tous les protocoles. Malheureusement, Apache ne gère que le http. Portée config Intérêt Délègue à un autre serveur Proxy la gestion des requêtes. 4. ProxyPass Syntaxe ProxyPass Chemin Url Portée config Intérêt Transfère pour un répertoire spécifié une requête à un serveur Proxy 5. ProxyDomain Syntaxe ProxyDomain Domaine Intérêt Ne sert qu'aux serveurs intranets 6. NoProxy Syntaxe NoProxy Domaine|SousRéseau|Ip|Nom_Hôte Intérêt Ne vaut que pour les intranets. 7. ProxyPassReverse Syntaxe ProxyPassReverse chemin url Portée Config, virtual host 8. CacheRoot Syntaxe CacheRoot répertoire Portée config, virtual host 9. CacheSize Syntaxe CacheSize Taille_En_Ko Défaut 5 Portée Config, virtual host 10. CacheMaxExpire Syntaxe CacheMaxExpire heures Défaut 24 Portée Config, virtual host Intérêt Durée de conservation des documents en cache 11. CacheGcInterval Syntaxe CacheGcInterval heures

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 62 / 92 -

Défaut Jamais Portée Config, virtual host Intérêt Intervalle de lancement du vidage du répertoire au cas où il dépasse le CahceSize. 12. CacheLastModifiedFactor Syntaxe CacheLasModifiedFactor facteur Défaut 0.1 Intérêt La date d'expiration est calculée en multipliant la durée écoulée depuis la dernière modification par facteur. CacheMaxExpire est gérée en priorité. Portée Config, virtual host 13. CacheDefaultExpire Syntaxe CacheDefauktExpire heures Défaut 1 Portée Config, virtual host Intérêt Si un protocole ne gère pas les durées d'expiration, utilisez cette variable. 14. CacheDirLevels et CacheDirLength Syntaxe CacheDirLevels nombre et CacheDirLength nombre Défaut CacheDirLevels 3 et CacheDirLength 1 Intérêt CacheDirLevels hache l'url en 3 répertoires. Le nom des répertoires est déterminés par CacheDirLength. Portée Config, virtual host 15. CacheNegociatedDocs Syntaxe CacheNegociatedDocs Portée Config, virtual host 16. NoCache Syntaxe NoCache nom_hôte1|domaine1 nom_hôteN|domaineN Portée Config, virtual host C. Exemple ServerAdmin [email protected] ServerName 192.168.0.221 ErrorLog /var/log/httpd/reverseproxy-error.log LogLevel warn CustomLog /var/log/httpd/reverseproxy-access.log combined SSLEngine On SSLCipherSuite HIGH:MEDIUM SSLProtocol all -SSLv2 SSLCertificateFile /etc/pki/tls/certs/srv-fedora.crt SSLCertificateKeyFile /etc/pki/tls/private/srv-fedora.key SSLProxyEngine On SSLProxyCheckPeerExpire On SSLProxyVerifyDepth 10 RewriteEngine on RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK) RewriteRule .* - [F] #RewriteEngine On #RewriteRule ^(.*)$ http://192.168.0.220/$1 [P] ProxyRequests Off

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 63 / 92 -

ProxyPreserveHost On ProxyPass / http://192.168.0.220/ ProxyPassReverse / http://192.168.0.220/ #RewriteRule ^/(.*)$ http://192.168.0.220/$1 [P,L] #RewriteEngine On #RewriteCond %{HTTPS} off #RewriteRule (.*) https:/92.175.210.201:3128%{REQUEST_URI} [P,L] Order deny,allow Allow from all D. Récupérer les adresses ip derrière un proxy 1. Activer le module remoteip Sous Debian, vous devez activer le module remoteip à l’aide de la commande : a2enmod remoteip Sous CentOS/Fedora, ce module est activé par défaut. 2. La directive RemoteIPHeader Dans l’un des fichiers de configuration, ajoutez : RemoteIPHeader X-Forwarded-For RemoteIPTrustedProxy 127.0.0.1 ::1 3. Rechargement de la configuration Sous Debian : a2enconf remoteip Et on recharge toute la configuration Apache : systemctl reload httpd

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 64 / 92 -

X. Le module mod_status

A. Présentation Le module mod_status vous fournit un rapport d’état sur l’activité de votre serveur web Apache. B. Activer le module mod_status Sous Fedora, éditez le fichier /etc/httpd/conf.modules.d/00-base.conf et décommentez la ligne : LoadModule status_module modules/mod_status.so C. Le fichier de configuration Pour ma part, j’ai créé un fichier status.conf dans le dossier /etc/httpd/conf.d : ExtendedStatus On SetHandler server-status Order deny,allow Deny from all Allow from wanadoo.fr D. Limiter l'accès à la page J’ai volontairement restreint l’accès à l’adresse de la page server-status aux machines dont le domaine est wanadoo.fr ! E. Le rapport d’état Il est accessible à partir de l’adresse http://votre_adresse_ip/server-status. Pour qu’il s’actualise automatiquement toutes secondes, tapez plutôt http://votre_adresse_ip/server-status?refresh=1.

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 65 / 92 -

XI. Documentation

A. Site officiel http://httpd.apache.org/docs/current/ La documentation officielle http://httpd.apache.org/docs/current/fr/ Le site de la documentation officielle en Français B. Bibliographie Apache, Installation et mise en oeuvre Edition O'Reilly Ben & Peter Laurie C. Liens https://cwiki.apache.org/confluence/display/HTTPD/ Le Wiki en anglais D. Le HTML https://developer.mozilla.org/fr/docs/Web/HTML/Element

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 66 / 92 -

XII. Variables

Source : http://httpd.apache.org/docs/current/fr/expr.html A. Variables normalisées Nom HTTP_ACCEPT HTTP_COOKIE HTTP_FORWARDED HTTP_HOST HTTP_PROXY_CONNECTION HTTP_REFERER HTTP_USER_AGENT B. Autres variables liées aux requêtes Nom Description REQUEST_METHOD La méthode HTTP de la requête entrante (par exemple GET) REQUEST_SCHEME Le protocole associé à l'URI de la requête REQUEST_URI La partie chemin de l'URI de la requête DOCUMENT_URI Idem REQUEST_URI Le chemin complet dans le système de fichiers local du fichier ou du script correspondant à la requête, si le serveur l'a dèjà déterminé à l'instant où REQUEST_FILENAME REQUEST_FILENAME est référencée. Dans le cas contraire, comme dans un contexte de serveur virtuel, même valeur que REQUEST_URI SCRIPT_FILENAME Identique à REQUEST_FILENAME La date et heure de dernière modification du fichier au format 20101231235959, si LAST_MODIFIED elle est déjà connue du serveur au moment où LAST_MODIFIED est référencé. SCRIPT_USER Le nom d'utilisateur du propriétaire du script. SCRIPT_GROUP Le nom du groupe auquel appartient le script. PATH_INFO L'information relative au nom de chemin située en fin, voir la directive AcceptPathInfo QUERY_STRING La chaîne de paramètres de la requête courante IS_SUBREQ "true" si la requête courante est une sous-requête, "false" dans le cas contraire THE_REQUEST La requête complète (par exemple "GET /index.html HTTP/1.1") REMOTE_ADDR L'adresse IP de l'hôte distant REMOTE_HOST Le nom d'hôte de l'hôte distant REMOTE_USER Le nom de l'utilisateur authentifié (s'il existe) REMOTE_IDENT Le nom de l'utilisateur défini par mod_ident SERVER_NAME La valeur de la directive ServerName du serveur virtuel courant SERVER_PORT Le port associé au serveur virtuel courant ; voir la directive ServerName SERVER_ADMIN La valeur de la directive ServerAdmin du serveur virtuel courant SERVER_PROTOCOL Le protocole utilisé par la requête DOCUMENT_ROOT La valeur de la directive DocumentRoot du serveur virtuel courant AUTH_TYPE La valeur de la directive AuthType (par exemple "basic") CONTENT_TYPE Le type de contenu de la réponse HANDLER Le nom du gestionnaire qui a généré la réponse HTTPS "on" si la requête utilise https, "off" dans le cas contraire IPV6 "on" si la connexion utilise IPv6, "off" dans le cas contraire REQUEST_STATUS Le code d'erreur HTTP de la requête

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 67 / 92 -

L'identifiant du message d'erreur associé à la requête (voir la directive REQUEST_LOG_ID ErrorLogFormat) L'identifiant du message d'erreur associé à la connexion (voir la directive CONN_LOG_ID ErrorLogFormat) CONN_REMOTE_ADDR L'adresse IP du correspondant pour la connexion (voir le module mod_remoteip) CONTEXT_PREFIX CONTEXT_DOCUMENT_ROOT C. Variables diverses Nom Description TIME_YEAR L'année courante (par exemple 2010) TIME_MON Le mois courant (1, ..., 12) TIME_DAY Le jour courant dans le mois TIME_HOUR Les heures de la date courante (0, ..., 23) TIME_MIN Les minutes de la date courante TIME_SEC Les secondes de la date courante TIME_WDAY Le jour de la semaine (à partir de 0 pour dimanche) TIME La date et heure au format 20101231235959 SERVER_SOFTWARE La chaîne contenant la version du serveur La date de la version de l'API (module magic API_VERSION number) D. Variables d’environnement SetEnvIf Host (^|\.)(dsfc\.net|szalkowski\.com)$ SITE=dsfc SetEnvIf Host (^|\.)voie-militante\.com$ SITE=voie-militante SetEnvIf Host (^|\.)saint-eloi-de-fourques\.net$ SITE=saint-eloi-de-fourques #SetEnvIf Host (^|\.)winuxware\.(com|net)$ SITE=winuxware-france #SetEnvIf Host (^|\.)gammebois\.com$ SITE=gammebois #SetEnvIf Host (^|\.)latourvillaise\.com$ SITE=latourvillaise SetEnvIf Host (^|\.)extime\.fr$ SITE=extime SetEnvIf Host (^|\.)forum-informatique\.net$ SITE=forum

RewriteEngine On

RewriteCond %{REQUEST_METHOD} ^(CONNECT|DEBUG|TRACK|TRACE) [NC] RewriteRule .* - [F,L]

#RewriteRule /(feed|atom)/?$ https://feeds.feedburner.com/%{ENV:SITE}?format=xml [QSA,R=301,L] #RedirectMatch "/(feed|atom)/?$" "https://feeds.feedburner.com/%{ENV:SITE}?format=xml" #Define URI %{SCRIPT_URI} # Header set Link "<%{SCRIPT_URI}e>;rel=\"canonical\""

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 68 / 92 -

XIII. Sécuriser WordPress

A. Protéger l’interface d’administration Order deny,allow Deny from All Allow from wanadoo.fr ipv6.abo.wanadoo.fr 2a01:cb06:1f8:dd00::0/64 Deny from 2a01cb0808f14c0088210bf60eb73e71.ipv6.abo.wanadoo.fr

SSLRequireSSL Order deny,allow Deny from All Allow from wanadoo.fr ipv6.abo.wanadoo.fr 2a01:cb06:1f8:dd00::0/64 Deny from 2a01cb0808f14c0088210bf60eb73e71.ipv6.abo.wanadoo.fr

# #SSLRequireSSL #Order deny,allow #Deny from All #Allow from wanadoo.fr ipv6.abo.wanadoo.fr 2a01:cb06:1f8:dd00::0/64 195.25.86.141 #Deny from 2a01cb0808f14c0088210bf60eb73e71.ipv6.abo.wanadoo.fr #

Order Allow,Deny Deny from All

Order allow,deny Deny from all RewriteCond %{REQUEST_METHOD} ^(DELETE|PUT|POST) RewriteRule .* - [F,L] B. Traitement du spam de commentaires Order allow,deny Allow from all Deny from .ads .adsl .ae .aero .af .ai .al .am .an .ao .aq .ar .arpa .as .asia .at .au .aw .ax .az Deny from .ba .bb .bd .bf .bg .bh .bi .biz .bj .bm .bn .bo .boo .br .bs .bt .bv .bw .by .bz .by Deny from .ca .cat .cc .cd .cf .cg .ch .ci .ck .cl .cn .co .coop .cr .cs .cu .cv .cx .cy .cz Deny from .dad .de .dd .dhcp .dj .dk .dm .do .dz Deny from .eat .ec .edu .ee .eg .eh .er .es .esq .eu .et Deny from .fi .fj .fk .fly .fm .fo .foo .fx Deny from .ga .gb .gd .ge .gf .gh .gi .gl .gm .gn .gov .gq .gr .gs .gt .gu .gw .gy Deny from .here .hk .hm .hn .host .how .hr .ht .hu Deny from .id .ie .il .im .in .ing .info .int .io .iq .ir .is .it

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 69 / 92 -

Deny from .je .jm .jo .jobs .jp Deny from .ke .kg .kh .ki .km .kn .kp .kr .kw .ky .kz Deny from .la .lb .li .link .lk .lr .ls .lt .lu .lv .ly Deny from .ma .mc .md .meme .mg .mh .mk .mil .ml .mm .mn .mo .mov .mobi .mp .mr .ms .mt .mu .museum .mv .mw .m x .my Deny from .na .name .nc .ne .new .nf .ng .ni .nl .no .np .nr .nt .nu .nz Deny from .om Deny from .pa .pe .pg .ph .pk .pl .pm .pn .pr .pro .prof .ps .pt .pw .py Deny from .qa Deny from .ro .rs .rsvp .ru .rw Deny from .sa .sb .sc .sd .se .sex .sg .sh .si .sj .sk .sl .sm .sn .soy .sr .ss .st .su .sv .sy .sz Deny from .tc .td .tel .tf .tg .th .tj .tk .tl .tm .tn .to .tp .tr .travel .tt .tv .tw .tz Deny from .ua .ug .uk .um .us .uy Deny from .va .vc .ve .vg .vi .vn .vu Deny from .wf .ws Deny from .xn--* .xxx Deny from .ye .yt .yu Deny from .za .zip .zm .zr .zw

# Order allow,deny Allow from all Deny from .ads .adsl .ae .aero .af .ai .al .am .an .ao .aq .ar .arpa .as .asia .at .au .aw .ax .az Deny from .ba .bb .bd .bf .bg .bh .bi .biz .bj .bm .bn .bo .boo .br .bs .bt .bv .bw .by .bz .by Deny from .ca .cat .cc .cd .cf .cg .ch .ci .ck .cl .cn .co .coop .cr .cs .cu .cv .cx .cy .cz Deny from .dad .de .dd .dhcp .dj .dk .dm .do .dz Deny from .eat .ec .edu .ee .eg .eh .er .es .esq .eu .et Deny from .fi .fj .fk .fly .fm .fo .foo .fx Deny from .ga .gb .gd .ge .gf .gh .gi .gl .gm .gn .gov .gq .gr .gs .gt .gu .gw .gy Deny from .here .hk .hm .hn .host .how .hr .ht .hu Deny from .id .ie .il .im .in .ing .info .int .io .iq .ir .is .it Deny from .je .jm .jo .jobs .jp Deny from .ke .kg .kh .ki .km .kn .kp .kr .kw .ky .kz Deny from .la .lb .li .link .lk .lr .ls .lt .lu .lv .ly Deny from .ma .mc .md .meme .mg .mh .mk .mil .ml .mm .mn .mo .mov .mobi .mp .mr .ms .mt .mu .museum .mv .mw .m x .my Deny from .na .name .nc .ne .new .nf .ng .ni .nl .no .np .nr .nt .nu .nz Deny from .om Deny from .pa .pe .pg .ph .pk .pl .pm .pn .pr .pro .prof .ps .pt .pw .py Deny from .qa Deny from .ro .rs .rsvp .ru .rw Deny from .sa .sb .sc .sd .se .sex .sg .sh .si .sj .sk .sl .sm .sn .soy .sr .ss .st .su .sv .sy .sz Deny from .tc .td .tel .tf .tg .th .tj .tk .tl .tm .tn .to .tp .tr .travel .tt .tv .tw .tz Deny from .ua .ug .uk .um .us .uy Deny from .va .vc .ve .vg .vi .vn .vu Deny from .wf .ws Deny from .xn--* .xxx Deny from .ye .yt .yu Deny from .za .zip .zm .zr .zw Deny from 1.com 2m-equation.net 6core.net

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 70 / 92 -

Deny from accesshaiti.net adviceforbid.com affille.net aidensmusic.com albacom.net algx.net amazonaws.com anchorfree.com ardanhosting.com arsenalassociation.com as15003.net as43234.net as51430.net Deny from berkelyx.com betterdomainhosting.eu bettys-news.com bezeqint.net bizevaluator.info btcentralplus.com Deny from cantv.net cgi.ca cheapseovps.com chinamobile.com chirpan.com choopa.com choopa.net co.uk codelayer.org colocrossing.com colostore.net colt.net com.cn comcast.net comcastbusiness.com compsyscloud.com comunitel.net congesia.com contina.com continuumdatacenters.com correctnic.com crystalsoft-it.com cyberghostvpn.com Deny from dimenoc.com dinaserver.com donbranco.com dnxserver.net Deny from eastmidland.net ecatel.net eonix.net escaple3.com Deny from fairlyclose.com fictto.com filemedia.net Deny from gamespot24.com gategemstone.com ghostshosting.net globaltap.com googleusercontent.com guarmarr.com Deny from heilink.com hostedpanama.com hostvenom.com hostwindsdns.com Deny from karclub.com krypt.com kwaoo.net kyivstar.net Deny from instantnotificationservices.com ipvnow.com ispsystem.net Deny from jobcity.com jointventure.net Deny from leasededi.com leaseweb.com limitless-servers.com lypfect.com Deny from mach9servers.com marketstreetwifi.net megapath.net micfo.com milkmist.com mindcombinedserver.com myconsumerreward.com myhostmysite.com Deny from norstway.com notsteyle.com Deny from openskytelcom.net optonline.net ovh.net Deny from pmsponsors.net poneytelecom.eu pontsparachute.com purewebtech.net Deny from quadranet.com queryfoundry.net qinglongboye.com Deny from reputeo.ch romanelliproject.com rootleveltech.com rr.com Deny from sagonet.net sbcglobal.net scalabledns.com secureserver.net serverhotell.net signalservis.net shineservers.com sleyfl.com slowplum.com smart-dns.net smartone.com softlayer.com solidseodedicated.com sologalaxy.com sometimessite.com sprintdatacenter.net starrt-fortress.com stratoserver.net steephost.net supcloud.net Deny from tapestryteeth.com techserverdns.com telostor.ca telus.net topsfieldinternational.com torservers.net totbb.net trentexchange.com triolan.net Deny from ubiquityservers.com ubservers.com uk2group.com ultimatumetheme.com unil.ch unti-is.com Deny from verizon.net vilayer.com virginm.net vmline.pl vntp.net volia.net Deny from wa-01.com whackemcrackem.com wifirst.net Deny from your-server.de Deny from xi.com xssl.net Deny from 109.201.133.100 Deny from 158.255.215.107 Deny from 159.226.165.101 Deny from 176.145.108.38 176.53.21.210 Deny from 178.18.151.101 178.218.29.74 Deny from 185.130.184 Deny from 193.111.136.162 193.51.246.65 193.56.243.102 Deny from 193.56.243.8 Deny from 193.56.245.39 Deny from 194.44.63.3 Deny from 195.138.93.46 Deny from 195.24.198.7 Deny from 2.5.211.94 Deny from 2.8.116.216 Deny from 212.35.164.252 212.35.166.210 212.52.159.74 Deny from 213.152.161.85 213.174.123.193 213.183.56.93 213.60.81.7 Deny from 31.129.170 31.184.238 31.38.83.85 31.44.91.220 Deny from 37.161.98.159 37.165.204.159 37.165.59.187 37.58.132.68

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 71 / 92 -

Deny from 38 Deny from 46.148 46.161 46.21 46.218.163.97 46.28.70 Deny from 5.2.157.121 5.230.153.21 Deny from 54.93 Deny from 62.147.224.2 62.210.111.38 62.210.80.51 62.23.15.92 62.77.224.14 Deny from 77.200.124.147 Deny from 77.81.232.85 Deny from 78.153.240.173 Deny from 78.198.182.5 Deny from 78.242.113.121 Deny from 79.137.180.251 Deny from 79.141.163.15 Deny from 79.92.61.99 Deny from 8.37.231.87 Deny from 80.11.24.195 Deny from 80.12.110.207 Deny from 80.12.38.160 Deny from 80.84.50.18 Deny from 82.124.24.115 Deny from 82.126.139.229 Deny from 82.126.94.154 Deny from 82.145.217.115 Deny from 82.226.173.126 Deny from 82.230.165.58 Deny from 82.239.45.133 Deny from 82.241.162.2 Deny from 82.245.42.86 Deny from 83.114.80.175 Deny from 83.204.146.219 Deny from 84.100.58.103 Deny from 84.6.205.16 Deny from 85.114.6.54 Deny from 86.196.230.139 Deny from 86.209.172.219 Deny from 86.246.113.10 Deny from 86.70.120.161 Deny from 86.70.120.28 Deny from 86.70.58.12 Deny from 87.204.56.131 Deny from 87.231.0.214 Deny from 87.98.163.66 Deny from 88.159.172.245 Deny from 88.168.148.50 Deny from 89.105.228.5 Deny from 89.83.65.218 Deny from 90.108.143.163 Deny from 90.19.13.51 Deny from 90.52.28.8 Deny from 90.79.78.234 Deny from 91.121.132.52 Deny from 91.126.61.198 Deny from 91.176.63.45 Deny from 91.230.0.51 Deny from 92.142.17.190

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 72 / 92 -

Deny from 95.13.243.91 Deny from 95.210.223.190 Deny from 1 Deny from 100 101 103 104 105 106 107 108 Deny from 109.105.59 109.109.109 109.122 109.254 109.162 109.164.240 109.165 109.169 109.184 109.188 109.190.85.95 109.194 109.196.210 109.200.130 109.201.133 109.201.143 109.201.154 109.211.94.232 109.226.203 109.230.221 109.231.122 109.232.227 109.7.65.66 109.73.79 109.86 109.87 109.93 Deny from 110 111 112 113 114 115 116 117 118 119 Deny from 12 120 121 122 123 124 125 126 128.127.58 128.107 128.177 128.199.107 128.199.63 129.144 Deny from 13 130 131.156 131.255 133 134.249 136 137 138 139 Deny from 14 Deny from 140 141.0.14 141.138.205 141.255.156.61 142 143 144.172 144.217.15 145.255 146 148 149.56 149.202.98 149.255 Deny from 15 150 151.0.6 151.1 151.236.29 151.237.176 151.237.180 151.237.184 151.80.138.19 151.80.175.238 151.80.238.152 152 153 154 155.133.64 155.94 156.54 156.75 158.222 158.255.215 158.69 Deny from 159.122.133 159.203 159.205.136 159.224 159.226 159.255.165 159.255.169 Deny from 160.202.42 162 163 164.138.237 165 166 167 168.131 169.44.62 Deny from 170.130 171 172 173 174 175 Deny from 176.10 176.100.111 176.102.32 176.104 176.109 176.112 176.115.139 176.116.74 176.119 176.123.3 176.126.252 176.14 176.146.81 176.193 176.194 176.195 176.212 176.213 176.215 178.216.49 176.31 176.32.21 176.32.23 176.32.26 176.53.21 176.61 176.8 176.9 176.97 176.99 Deny from 177 Deny from 178.121 178.124 178.125 178.137 178.150 178.158 178.159 178.162 178.168.30 178.17.170 178.17.174 178.172.230 178.175 178.184 178.187 178.19 178.20.55.18 178.206 178.207 178.210.219 178.213 178.216.51 178.216.54 178.217.187 178.218.29 176.222.154 178.23.129 178.233 178.237.87 178.250.45 178.32 178.33 178.44 178.57 178.62.165 178.73 178.76.243 178.82 178.94 Deny from 179 Deny from 180 181 182 184 183 185 186 187 188 189 Deny from 188.123.248 188.128.99 188.134 188.138.149 188.143.232 188.143.234 188.163 188.165.206.226 188.234 188.26 188.63 188.92.75 Deny from 190 191 192 Deny from 193.105.210 193.107 193.109.199 193.111.136 193.136 193.144 193.150 193.169.144 193.171 193.189 193.201 193.248.195 193.43.158 193.90 Deny from 194.139 194.149.148 194.151 194.183.0 194.183.4 194.185 194.186.246 194.187.168 194.199.55.254 194.34.105 194.44 194.56.178.164 194.67 194.88.143 Deny from 195.114 195.12.188 195.138.81 195.142 195.154.8.111 195.182.94 195.211 195.22.126 195.22.127 195.228 195.238.108 195.24.198 195.254.135 195.3.144 195.40 195.54 195.62.25 195.81.140 195.9 195.99 Deny from 196 197 198 199 Deny from 2.13.255.56 2.136 2.188 2.50 2.93 2.95 Deny from 200 201 202 203 204 206 207 208 209 Deny from 210 211 Deny from 212.108.76 212.109.201 212.111.198 212.117.180 212.126.96 212.138.88.114 212.160.138.237 212.166 212.174.143.129 212.175 212.181 212.200 212.35.176 212.47.227.72 212.52.159 212.56 212.59 212.73.73 212.74.202 212.76.140 212.83 212.90.40 212.92 Deny from 213.0 213.111.233 213.131.47 213.136.79 213.138.94 213.144.132 213.154.203 213.159.38 213.183.56 213.184.105 213.185.81 213.186.167 213.195.171 213.197.129 213.215.201 213.227 213.238.175 213.227 213.24 213.37 213.42 213.59 213.61 213.65 Deny from 216 Deny from 217.109.29.229 217.12.199 217.147.84 217.170.201 217.195.202 217.64.110 Deny from 218 219 Deny from 220 221 222 223 Deny from 23 24 27

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 73 / 92 -

Deny from 31.131.67 31.132.6 31.133.13 31.145 31.169.83 31.172.30 31.173 31.184 31.187 31.192 31.193.196 31.202 31.204 31.223 31.23 31.28.251 31.31 31.37.121.176 31.39.125.134 31.41 31.44 31.6.71 31.7.232 Deny from 36 Deny from 37.0.121 37.0.123 37.1.49 37.112 37.113 37.115 37.131.215 37.139 37.142 37.187.79.141 37.187.88 Deny from 37.203.212 37.214.32 37.215 37.220.35 37.221 37.229 37.230.135 37.230.213 37.233.27 37.235.53 37.236 37.247.48 37.44 37.48 37.57 37.59 37.72 37.77 37.9 37.99.114 Deny from 38 39 Deny from 40 41 42 43 45 Deny from 46.102 46.105 46.109 46.118 46.119 46.147 46.148 46.151 46.16.74 46.161 46.165 46.166 46.17 46.175.254 46.183.162 46.185 46.188 46.191 46.21.99 46.211 46.22 46.243.173 46.246 46.250.0 46.28.66 46.29 46.33.250 46.36.112 46.38.62 46.39 46.41 46.61 46.7 46.98 Deny from 47.88 47.90.4 Deny from 49 Deny from 5.101 5.135 5.139 5.141 5.144.97 5.149.212 5.157 5.158 5.160 5.164 5.166 5.167 5.175 5.196.1.129 5.2.72 5.227 5.233 5.248 5.249.164 5.254 5.255 5.3 5.34 5.35.25 5.39 5.45 5.62 5.79.68 5.9 Deny from 50 51.15.43 51.15.46 51.15.51 51.15.53 51.15.6 51.254.221.166 51.254.23 54 58 59 Deny from 60 61 62.102.148 62.122 62.16 62.20 62.201.203 62.201.219 62.210.245.138 62.210.245.158 62.210.246.163 62.210.69.79 62.210.7.205 62.210.80.48 62.210.82 62.210.81.52 62.212.73 62.220.59 62.39.122 62.76 62.77.180 62.90 63 64 65 66 67 68 69 Deny from 70 71 72 74 75 76 Deny from 77.109.139 77.120 77.121 77.122 77.123 77.125 77.126 77.154.202.104 77.232.159 77.234.44 77.243 77.79.178 77.81.232 77.91.179 77.93.2.81 77.95.225 Deny from 78.10 78.109.24 78.188 78.129.215 78.137.14 78.137.44 78.211.0.203 78.225.69.85 78.237.8.14 78.242.173.101 78.25 78.29 78.30 78.38 78.63 78.96 78.97 Deny from 79.110.17 79.124.59 79.133.217 79.134 79.143.179 79.172.193 79.173.95 79.176 79.98.107 Deny from 80.191 80.203 80.232.207 80.233.134 80.28 80.39 80.71.115 80.72.37 80.82.64 80.82.65 80.79.127 80.84.50 80.86 80.93 Deny from 81 Deny from 82.102.24 82.103.140 82.112.194 82.119.86 82.126.217.100 82.137.208 82.151.83 82.192.30 82.193.109 82.204.105 82.209.251 82.221 82.225.143 82.238.179.246 Deny from 83.128 83.141.175.34 83.143.240 83.234 83.244.185 83.39 83.41 83.50 Deny from 84.240 84.243 84.244 89.34.26 84.42 84.52.78 84.72 Deny from 85.10.210 85.114.129 85.17 85.138 85.194.241 85.195.82 85.248 85.25 85.29 85.9.20 85.98 Deny from 86.12 86.120 86.121 86.51 86.57.191 86.69.93.195 86.70.120.162 86.74.208.95 86.96 Deny from 87.110 87.117 89.187.144 87.19 87.204 87.228.15 87.98.179.184 87.98.151 87.98.165.214 87.255.77 87.98.166 87.98.173 Deny from 88.125.64.25 88.147.166 88.15 88.150.163 88.159 88.190 88.246.126.43 88.255 88.64 88.80.41 Deny from 89.105 89.111 89.137 89.139 89.144.12 89.169 89.147 89.157.43.163 89.163.224 89.178 89.19.178 89.191 89.218 89.234.157.254 89.248.169 89.248.171 89.249.207 89.26.248 89.28 89.30.105.121 89.31.57 89.32.123 89.33.43 89.34.237 89.43 89.44 89.46 89.47 Deny from 90.112.161.53 90.112.187.163 90.52.66.253 90.54.190.128 Deny from 91.105.238 91.105.98 91.106 91.108.177 91.108.182 91.108.183 91.108.72 91.108.73 91.109.196 91.109.247 91.121.73.4 91.121.175.35 91.138.23 91.144.177 91.176 91.188.124 91.188.39 91.191.173 91.194.57 91.197.89 Deny from 91.200 91.205 91.207.4 91.207.5 91.207.6 91.207.7 91.207.8 Deny from 91.212.124 91.213 91.214.84 91.217.10 91.218.115 91.218.247 91.219.237 91.221.84 91.222 91.224.150 91.226.212 Deny from 91.231.40 91.232.96 91.235 91.236.74 91.236.75 91.237.249 91.238.134 91.239.15 Deny from 91.240.163 91.241.53 Deny from 91.98 91.99.61 Deny from 92.113 92.126 92.157.193.130 92.222.237 92.222.66.16 92.233 92.243.166 92.255

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 74 / 92 -

Deny from 93.115 93.118 93.120 93.127 93.170 93.171.205 93.174 93.178 93.179 93.182 93.186.251 93.188.37 93.190.139 93.21.10.70 93.72 93.74 93.77 93.84 93.85 93.94.246 Deny from 94.102.56 94.127 94.153 94 Deny from 94.23.148 94.23.30.166 94.23.155.150 94.23.157.166 94.23.6.70 Deny from 94.242.115 94.242.237 94.244.70 94.26.172 94.27 94.45 Deny from 95.104 95.105 95.130.11.147 95.130.12.31 95.132 95.133 95.139 95.141 95.154 95.163 95.181 95.183.50 95.211 95.24 95.215.61 95.238 95.28 95.65 95.67 95.71 95.77 95.78 95.79 95.85.41 Deny from 96 97 98 99 Deny from 2001:470:b037::0/48 Deny from 2001:41d0:2:71de::0/64 Deny from 2001:da8::0/32 Deny from 2a00:b980:2::0/48 Deny from 2a01:e35:242c:3350:f57f:4bb9:edf8:a5a9 Deny from 2a01:e35:2ef2:d850:756f:7aa3:a228:16e4 # Order allow,deny Allow from all Deny from .ae .asia .au Deny from .be .bid .br .by .bz Deny from .ca .cars .center .club .co .comproduct .cx Deny from .de .dk Deny from .es Deny from .forex Deny from .ga .gdn .gl .gq .guru Deny from .hk .hr .hu Deny from .id .in .io .ir .it Deny from .jp Deny from .kz Deny from .lan .link .loan .ly Deny from .ml .moscow Deny from .nl .nu .nz Deny from .onion .online Deny from .party .pet .pl .pro .pw Deny from .review .ro .ru Deny from .se .stream .su Deny from .tn .top .toys .tk .tr .tt .tv .tw Deny from .ua .uk .us Deny from .vg .vn Deny from .watch .webcam .website .wiki .win .world .ws Deny from .xyz Deny from .za #Asie Deny from 118 171.241 #Amérique du Nord / Pacifique / Amérique Centrale / Caraïbes #Deny from 104 107 108 138 142 155.94 192 204 206 209 216 23 38 49 50 52 69 96 #Amérique du Sud #Deny from 104 143 173 181 190 191 200 201 #Asie Pacifique #Deny from 1 13 14 103 106 111 112 115 116 117 118 123 125 139 168 175 182 183 202 203 210 220 223 36 42 43 45 #Russie #Deny from 2a00:1838:35:48::0/64 5

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 75 / 92 -

#Allemagne #Deny from 2a01:4f8:141:4494::0/64 #Afrique #Deny from 105 196 #europe de l'Est #Deny from 188 46.161 178.159.37 38.141.43 C. Traitement du spam de commentaires via le WAF mod_security # Default recommended configuration SecRuleEngine On SecRequestBodyAccess On SecResponseBodyAccess On SecResponseBodyLimit 67108864 SecRequestBodyInMemoryLimit 67108864 SecDebugLog /var/log/httpd/modsec_debug.log SecDebugLogLevel 0 SecAuditEngine RelevantOnly #SecAuditLogRelevantStatus "^(?:5|4(?!04))" #SecAuditLogParts ABIJDEFHZ SecAuditLogType Serial # The name of the audit log file SecAuditLog /var/log/httpd/modsec_audit.log SecArgumentSeparator & SecCookieFormat 0 SecTmpDir /var/lib/mod_security SecDataDir /var/lib/mod_security

#Filtering by GeoIP #SecGeoLookupDb /usr/share/GeoIP/GeoIP.dat #SecRule REQUEST_FILENAME "wp-comments-post.php" "id:2,deny,log,chain" #SecRule REMOTE_ADDR "@geoLookup" "chain" #SecRule REQUEST_METHOD "POST" "chain" #SecRule GEO:COUNTRY_CODE "!@rx ^(BE|CA|CH|DZ|FR|EUGF|GP|MC|MA|PF|PM|TF|TN)$"

#filtering on email SecRule REQUEST_FILENAME "wp-comments-post.php" "id:4,deny,log,chain,t:lowercase" SecRule REQUEST_METHOD "POST" "chain" SecRule ARGS:email "!@rx ^[_a-z0-9\.\-]+@[_a-z0-9\.\-]+\.[a-z]{2,}$"

#filtering on the suffixes in the email SecRule REQUEST_FILENAME "wp-comments-post.php" "id:2,deny,log,chain,t:lowercase" SecRule REQUEST_METHOD "POST" "chain" SecRule ARGS:email "@rx \.(ac|ar|at|au|be|best|biz|br|ca|ch|cc|center|cf|club|co|cx|cz|de|do|fi|fm|fun|fyi|ga|gdn?|gh|gq|gr|host|hr|ht|kr |icu|id|il|in|it|la|life|l?ink|ltd?|ly|md|me|moda|money|mx|nl|nz|online|onion|ovh|pl|pw|reviews|ro|ru(\.com)? |school|se|site|space|store|su|tech|th|tl|to|top|trade|tv|tw|ua|uk|us(\.(com|org))?|vn|we|website|wiki|wtf|xn- -[0-9a-z]+|x(yz)?|yt|yu|za)$"

#Filtering on words in comments SecRule REQUEST_FILENAME "wp-comments-post.php" "id:15,deny,log,chain,t:lowercase" SecRule REQUEST_METHOD "POST" "chain"

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 76 / 92 -

SecRule ARGS:comment "@rx (/| |- |^|\.|<|')([aA]moxicillin|assainissements?|[aA]ttorney|Brisbane|buy|[cC]asinos?|[cC]hampix|cialis|ciprofloxaci n|earn|erecti(le|on)|[fF]orex|Fortnite|cafer?got|games?|girls?|guys?|kamagra|levitra|Melbourne|[pP]arking|ph armacy|pills?|plomb(iers?|erie)|[pP]orn(o|stars?|uha|otubs?)?|[rR]eviews?|[sS]exy?|[sS]ilicone?|viagra|visitor s?|website|[wW]onderful|wrist ?bands?)(/| |\.|-|$|:|>|\?)"

#filtering on the suffixes in the email SecRule REQUEST_FILENAME "wp-comments-post.php" "id:3,deny,log,chain,t:lowercase" SecRule REQUEST_METHOD "POST" "chain" SecRule ARGS:email "@rx @(aol|inbox|googlemail|yahoo|yandex)\.com$"

#Filtering on User-Agent SecRule REQUEST_FILENAME "wp-comments-post.php" "id:1,deny,log,chain,t:lowercase" SecRule REQUEST_METHOD "POST" "chain" #SecRule HTTP_USER_AGENT "!@rx [a-zA-Z]+/[0-9\.]+$" #SecRule REQUEST_HEADERS:User-Agent "!@rx (Cyberfox|Edge|Firefox|OPR|PaleMoon|Safari|SeaMonkey||)/[0-9\.]+$" SecRule REQUEST_HEADERS:User-Agent "!@rx (^| )(Brave|Chrome|Edge|Firefox|Opera|Safari|Vivaldi)/"

#Filtering on words used in the url SecRule REQUEST_FILENAME "wp-comments-post.php" "id:5,deny,log,chain,t:lowercase" SecRule REQUEST_METHOD "POST" "chain" SecRule ARGS:url "@rx (/|- |^|\.)(amoxicillin|assainissements?|astrolog(er|y)|buy|[cC]asinos?|champix|cialis|ciprofloxacin|comment|erect i(le|on)|fornite|online|party|pharmacy|pills?|plomb(iers?|erie)|plumbing|poker|porn(ax|o|stars?|uha)?|silicon e?|streamline|viagra|vk|wristbands?)(\.|$|/|-)"

#Filtering on the suffixes used in the url SecRule REQUEST_FILENAME "wp-comments-post.php" "id:6,deny,log,chain,t:lowercase" SecRule REQUEST_METHOD "POST" "chain" SecRule ARGS:comment "@rx \.(ac|ar|at|au|be|best|biz|br|ca|ch|cc|center|cf|club|co|cx|cz|de|do|fi|fm|fun|fyi|ga|gdn?|gh|gq|gr|host|hr|ht|kr |icu|id|il|in|it|la|life|l?ink|ltd?|ly|md|me|moda|money|mx|nl|nz|online|onion|ovh|pl|pw|reviews|ro|ru(\.com)? |school|se|site|space|store|su|tech|th|tl|to|top|trade|tv|tw|ua|uk|us(\.(com|org))?|vn|we|website|wiki|wtf|xn- -[0-9a-z]+|x(yz)?|yt|yu|za)($|/|<|\")"

#Filtering on the suffixes used in the url SecRule REQUEST_FILENAME "wp-comments-post.php" "id:7,deny,log,chain,t:lowercase" SecRule REQUEST_METHOD "POST" "chain" SecRule ARGS:url "@rx \.php($|\?)"

#Filtering on the comment SecRule REQUEST_FILENAME "wp-comments-post.php" "id:8,deny,log,chain,t:lowercase" SecRule REQUEST_METHOD "POST" "chain" SecRule ARGS:comment "@rx (\[(url|URL)=|\[/(url|URL) -)"

#Filtering on the suffixes used in the url SecRule REQUEST_FILENAME "wp-comments-post.php" "id:9,deny,log,chain,t:lowercase" SecRule REQUEST_METHOD "POST" "chain" SecRule ARGS:url "@rx \.(ac|ar|at|au|be|best|biz|br|ca|ch|cc|center|cf|club|co|cx|cz|de|do|fi|fm|fun|fyi|ga|gdn?|gh|gq|gr|host|hr|ht|kr |icu|id|il|in|it|la|life|l?ink|ltd?|ly|md|me|moda|money|mx|nl|nz|online|onion|ovh|pl|pw|reviews|ro|ru(\.com)? |school|se|site|space|store|su|tech|th|tl|to|top|trade|tv|tw|ua|uk|us(\.(com|org))?|vn|we|website|wiki|wtf|xn- -[0-9a-z]+|x(yz)?|yt|yu|za)($|/)"

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 77 / 92 -

#Filtering on the author SecRule REQUEST_FILENAME "wp-comments-post.php" "id:10,deny,log,chain,t:lowercase" SecRule REQUEST_METHOD "POST" "chain" SecRule ARGS:author "@rx (^| |- |/|')(188bet|assainissements?|botox|Buy|canad(a|ian)|[cC]asinos?|cheap|clinic|erecti(le|on)|facebook|fornite| google|[iI]ndonesia|livebox|London|luxury|oils?|[oO]nline|[pP]arking|party|pharmac(ies?|y)|pills?|[pP]lomb(i ers?|erie)|poker|porno?|rent|sex|[sS]ilicone?|Streaming|villa|[wW]ristbands?)( |$|\.|-|/)"

#filtering on the suffixes in the email SecRule REQUEST_FILENAME "wp-comments-post.php" "id:11,deny,log,chain,t:lowercase" SecRule REQUEST_METHOD "POST" "chain" SecRule ARGS:url "@rx (/|\.|^)(bit|blogspot|ebay|facebook|google|issuu|linkedin|medium|ning|over- blog|plurk|pornotubs|tumblr|twitter|youtube)\.(com|ly)(/)"

#Filtering wp-login on User-Agent SecRule REQUEST_FILENAME "@rx (awstats\.pl|wp-login\.php)" "id:12,deny,log,chain,t:lowercase" SecRule REQUEST_METHOD "POST" "chain" #SecRule HTTP_USER_AGENT "!@rx [a-zA-Z]+/[0-9\.]+$" SecRule REQUEST_HEADERS:User-Agent "!@rx Firefox/[0-9\.]+$"

#Filtering wp-admin on User-Agent SecRule REQUEST_URI "@rx /(awstats|wp-admin|login)(/|$)" "id:13,deny,log,chain,t:lowercase" SecRule REQUEST_METHOD "POST" "chain" #SecRule HTTP_USER_AGENT "!@rx [a-zA-Z]+/[0-9\.]+$" SecRule REQUEST_HEADERS:User-Agent "!@rx Firefox/[0-9\.]+$"

#filtering on the suffixes in the email SecRule REQUEST_FILENAME "wp-comments-post.php" "id:14,deny,log,chain,t:lowercase" SecRule REQUEST_METHOD "POST" "chain" SecRule ARGS:comment "@rx %D0%"

#SecRule REQUEST_FILENAME "wp-comments-post.php" "id:5,deny,log,chain" #SecRule REQUEST_METHOD "POST" "chain" #SecRule REMOTE_ADDR "@rx ^(10[34]|111\.230|11[79]|138|155\.194|158|167|172|176\.36|18[13578]|19[12]|197\.255|198\.211\.121|2 19|23|36\.76|46\.(119|161)|47|5\.8\.208|61|94\.242|95\.110\.86)\."

#Block Tor #SecRule REQUEST_URI "@rx ^*$" "id:16,deny,log,chain,t:lowercase" #SecRule REQUEST_METHOD "GET" "chain" #SecRule HTTP_USER_AGENT "@rx Mozilla/5\.0 \(Windows NT [0-9]{2,}\.[0-9]; rv:[0-9]{2,}\.[0-9]\) Gecko/20100101 Firefox/[0-9]{2,}\.[0-9]$" #SecRule REQUEST_HEADERS:Accept-Language "@rx ^en-US,en;q=0\.5$"

#Filtering on words in comments SecRule REQUEST_FILENAME "wp-comments-post.php" "id:16,deny,log,chain,t:lowercase" SecRule REQUEST_METHOD "POST" "chain" SecRule ARGS:comment "@rx (^| )([eE]r|[oO]ur|[mM]uy|[cC]ocks?|[iI]ch|[gG]ood|[yY]our?|[iI]s?t?|[tT]hanks?|[tT]o|[wW]hat|[mM]uchas|[gG ]racias)( |$)"

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 78 / 92 -

#Pays SecRule REQUEST_FILENAME "wp-comments-post.php" "id:17,deny,log,chain,t:lowercase" SecRule REQUEST_METHOD "POST" "chain" SecRule HTTP_USER_AGENT "@rx ; (de|en|hu|pt|sk|zh)-(cn|CN|DE|HU|PT|SK|TW|US)[;\)]"

#User-Agent #SecRule REQUEST_FILENAME "wp-comments-post.php" "id:18,deny,log,chain,t:lowercase" #SecRule REQUEST_METHOD "POST" "chain" #SecRule HTTP_USER_AGENT "@rx ^-$"

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 79 / 92 -

XIV. Annexe : installation de Awstats sur Debian

A. Installation de Awstats

Avec la commande apt, installez le paquet awstats : apt install awstats B. Fichier de configuration

Renommez le fichier /etc/awstats/awstats.conf en /etc/awstats/awstats.localhost.conf, par exemple, et supprimez le fichier /etc/ awstats/awstats.conf : cd /etc/awstats mv awstats.conf awstats.localhost.conf rm -f awstats.conf.local

Éditez ensuite le fichier /etc/awstats/awstats.localhost.conf pour changer les directives comme suit :

SiteDomain="localhost" HostAliases="127.0.0.1 vmdebian vmdebian.kasa.local 192.168.1.53 ::1" DirData="/var/lib/awstats" AllowToUpdateStatsFromBrowser=1 #Décommentez cette ligne pour activer la collecte des données ipv6 LoadPlugin="ipv6" #Commentez la directive Include #Include "/etc/awstats/awstats.conf.local" C. Gestion des droits

Donnez les droits à l’utilisateur www-data sur le répertoire défini par la directive DirData. chown www-data:www-data /var/lib/awstats -R D. Actualisation des statistiques

Si vous actualisez les statistiques d’Awstats en root, n’oubliez pas de redonner les droits comme c’est indiqué ci-dessus !

/usr/lib/cgi-bin/awstats.pl -config=localhost -update E. Planifier un tâche d’actualisation

Du coup, il vaut mieux recourir à un script bash /root/update-awstats.sh par exemple – pour actualiser vos stats :

#!/bin/bash /usr/lib/cgi-bin/awstats.pl -config=localhost -update chown www-data:www-data /var/lib/awstats -R

A l’aide de la commande crontab -e, vous pouvez désormais planifier l’exécution du script :

0 */4 * * * /root/update-awstats.sh 2>&1

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 80 / 92 -

F. Activer le module cgi

Awstats est un script CGI écrit en Perl. Il convient donc d’activer le module cgi du serveur Apache : a2enmod cgi G. Configuration Awstats dans Apache

Dernière étape : vous devez configurer le fonctionnement du logiciel de Web Analytics, Awstats, dans Apache, en copiant le fichier d’exemple fourni dans la documentation : cp /usr/share/doc/awstats/examples/apache.conf /etc/apache2/conf- available/awstats.conf

Éditez ensuite /etc/apache2/conf-available/awstats.conf et commentez la ligne :

#ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

Activez alors la configuration : a2enconf awstats

Et rechargez le service Apache : systemctl reload apache2 H. Accès par le navigateur

Vous pouvez accéder aux statistiques produites par Awstats à partir de la barre d’adresses de votre navigateur en tapant : http://[votre_adresse_ip_ou_votre_nom_de_domaine]/cgi- bin/awstats.pl?config=localhost

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 81 / 92 -

XV. Installation de Matomo Analytics sur Debian

Matomo est un outil Open Source de Web Analytics par script, concurrent à Google Analytics. Contrairement à Awstats, il ne s’appuie pas sur les logs du serveur Web.

A. Paquets pré-requis

Vous devez installer tous les composants nécessaires au fonctionnement d’une plate-forme LAMP :

 Apache  MariaDB  PHP apt install mariadb-server apache2 php-fpm php-cli php-gd php-xml php-curl php- mysql B. Téléchargement de matomo cd /var/www/html/ wget https://github.com/matomo-org/matomo/archive/refs/tags/4.2.1.zip unzip 4.2.1.zip mv matomo-4.2.1 matomo C. Installation de composer

J’ai choisi d’installer Matomo dans le dossier /var/www/html/matomo : cd /var/www/html/matomo curl -sS https://getcomposer.org/installer | php php composer.phar install php composer.phar update cd .. chown www-data:www-data matomo –R D. Création de la base MariaDB

A partir de l’interpréteur de commandes mysql, tapez les instructions suivantes nécessaires à la création de la base utilisée par Matomo :

CREATE DATABASE matomo; CREATE USER matomo; GRANT ALL PRIVILEGES ON matomo.* TO matomo@localhost; SET PASSWORD FOR matomo@localhost=PASSWORD('matomo'); exit E. Le script d’installation de Matomo

L’adresse ip du serveur Apache est 192.168.1.253. Pour exécuter le script d’installation de Matomo, tapez à partir de votre navigateur, du fait du choix du répertoire d’installation de Matomo ci-dessus, http://192.168.1.53/matomo.

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 82 / 92 -

Matomo vérifie la présence des dépendances nécessaires à l’exécution du script PHP.

Les paramètres de la base de données correspondent, en fait, à ceux indiqués ci-dessus, lors de la création de la base de données matomo dans MariaDB.

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 83 / 92 -

Le superutilisateur est l’utilisateur qui pourra se connecter à partir de l’interface Web proposée par Matomo.

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 84 / 92 -

Vous devez indiquer l’adresse du site dont l’audience sera analysée par Matomo.

Matomo vous fournit le code du script que vous devrez incorporer dans les pages de votre site, dans la section head de la page HTML/PHP, de préférence.

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 85 / 92 -

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 86 / 92 -

Tout s’est bien passé et vous recevrez les félicitations du jury.

F. Le script Matomo à incorporer dans les pages Web

Vous disposez de deux méthodes pour disposer des statistiques de fréquentation des pages de votre site. La 1ère consiste à copier/coller ce script dans la section head des pages html/php de votre site.

La 2e solution est pas mal non plus. Il s’agit d’une méthode de tracking par image, à intégrer dans la section body du code HTML de vos pages.

G. Ma 1ère connexion

Je me connecte à l’interface de cet outil de Web par un navigateur en tapant dans la barre d’adresses http://192.168.1.53/matomo. Là, vous aurez à vous identifier à l’aide du compte « super-utilisateur » que vous avez créé lors de l’exécution du script d’installation de Matomo.

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 88 / 92 -

Choisissez votre site.

Vous disposez enfin de toutes les données de fréquentation de votre site.

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 89 / 92 -

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 90 / 92 -

XVI. Fail2ban

A. Installation classique Sur Fedora, tapez : Dnf install fail2ban B. Configuration pour les erreurs 40x et 50x

J’ai ajouté dans le répertoire /etc/fail2ban/jail.d le fichier apache.conf configuré comme suit :

[apache] enabled=true port=http,https filter=apache logpath=/var/log/httpd/vm-access_log /var/log/httpd/dsfc-access_log maxretry=2 bantime=86400 findtime=60 banaction=iptables-multiport[name=apache,port="http,https",protocol=tcp]

Pour votre compréhension, je tiens à préciser que la directive banaction fait référence au fichier iptables- multiport.conf défini dans le répertoire /etc/fail2ban/action.d. Au passage, j’ai remplacé la directive REJECT par DROP dans le fichier iptables-blocktype.conf.

Il faut ensuite créer un filtre dans le répertoire /etc/fail2ban/filter.d avec le nom défini au niveau de la directive filter. Je l’ai donc appelé apache.conf :

[Definition] failregex = ^ - - .* "(GET|POST) .* HTTP/1.1" 4[0-3][0-9] ignoreregex = proxad\.net

Je vous incite au niveau de la directive ignoreregex à ajouter le nom de domaine associé à votre connexion, fourni par votre FAI. Par exemple , proxad\.net pour Free !

L’expression est obligatoire. Elle permet d’extraire l’adresse ip de la machine. Et c’est là que le bas blesse. Les attaques nous parviennent aujourd’hui sans aucune indication quant à l’adresse ip de la machine assaillante ou à partir de machines dont le nom ne peut pas être résolu !!! Et, dans ce cas, Fail2ban nous sert à rien, sauf à nous protéger des bizuts. Si vous cherchez une solution, je vous renvoie à l’article que j’ai publié récemment sur la manière de faire face à une attaque de type DDoS au niveau de votre serveur Apache !

C. Le module Apache mod_remoteip (avec des pincettes)

Il permet d’identifier plus finement la machine qui émet la requête, même si ce n’est pas fiable à 100%. Pour lister les modules installés dans Apache, tapez la commande : apachectl -t -D DUMP_MODULES

Pour activer le module mod_remoteip sous Fedora, vous devez décommenter, dans le fichier /etc/httpd/conf.modules.d/00-base.conf, la ligne :

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 91 / 92 -

LoadModule remoteip_module modules/mod_remoteip.so

Dans les fichiers de configuration au niveau du format du fichier de log, remplacez alors le %h par le %a.

Je vous recommande, pour ma part, de désactiver la résolution DNS au niveau des logs en passant la directive HostnameLookups à off !

D. La liste des machines bloquées

Pour visualiser la liste des machines bloquées, il suffit de taper en ligne de commandes : iptables – L.

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021 Support Apache - 92 / 92 -

XVII. Authentification Kerberos https://fabien.io/installer-une-authentification-sso-windows-ldap-sur-apache-2-4-ubuntu-18/

A. /etc/krb5.conf apt -y install krb5-user libapache2-mod-auth-webkdc nano /etc/krb5.conf

[libdefaults] default_realm = PIGEOT.LOCAL # ... J'ai laissé les paramètres pour le MIT Kerberos

[realms] PIGEOT.LOCAL = { kdc = srv.pigeot.local admin_server = srv.pigeot.local default_domain = pigeot.local } [domain_realm] # Il faut obligatoirement les 2 lignes : .pigeot.local = PIGEOT.LOCAL pigeot.local = PIGEOT.LOCAL B. Sous Windows

Créer un utilisateur avec mot de passe dans l’AD ktpass -princ HTTPS/[email protected] -mapuser [email protected] -pass * - crypto RC4-HMAC-NT -ptype KRB5_NT_PRINCIPAL -out kerberos.keytab

Copiez kerberos.keytab /etc/kerberos.keytab

C. /etc/kerberos.keytab chown www-data:root /etc/kerberos.keytab chmod 640 /etc/kerberos.keytab D. Tester kinit -p [email protected] A. Directives Apache AuthType Kerberos AuthName "Demande d'identification SSO" KrbAuthRealms PIGEOT.LOCAL KrbServiceName HTTPS/www.pigeot.local Krb5Keytab /etc/kerberos.keytab KrbMethodNegotiate On KrbMethodK5Passwd On Require valid-user B. Firefox about:config network.negotiate-auth.trusted-uris avec pigeot.local

Denis Szalkowski Formateur Consultant https://www.dsfc.net Rev 2.0 - 09/04/2021