Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
| systemes:web:httpd [2016/01/28 17:15] – [Introduction] pam | systemes:web:httpd [2019/02/06 13:03] (Version actuelle) – modification externe 127.0.0.1 | ||
|---|---|---|---|
| Ligne 3: | Ligne 3: | ||
| ===== Introduction ===== | ===== Introduction ===== | ||
| - | **apache2/ | + | * **apache2/ |
| - | **mod_security** est un "web application firewall" | + | * **mod_security** est un "web application firewall" |
| - | **AuditConsole** est une console web pour afficher les logs de modsecurity plus clairement. | + | * **AuditConsole** est une console web pour afficher les logs de modsecurity plus clairement. |
| - | **mod_evasive** est un module Apache pour contrer les attaques DoS (Denial of Service). Il est par exemple, capable de détecter lorsqu' | + | * **mod_evasive** est un module Apache pour contrer les attaques DoS (Denial of Service). Il est par exemple, capable de détecter lorsqu' |
| - | **mod_proxy** sert à transmettre les requêtes propres vers le bon serveur. | + | * **mod_proxy** sert à transmettre les requêtes propres vers le bon serveur. |
| ===== Installation ===== | ===== Installation ===== | ||
| - | RHEL : | + | * RHEL : <code bash> |
| - | <code bash> | + | |
| yum install httpd | yum install httpd | ||
| </ | </ | ||
| - | Debian : | + | * Debian : <code bash> |
| - | <code bash> | + | |
| apt-get install apache2 | apt-get install apache2 | ||
| </ | </ | ||
| Ligne 28: | Ligne 26: | ||
| ===== Tests de fonctionnement ===== | ===== Tests de fonctionnement ===== | ||
| - | + | * Test http : <code bash> | |
| - | + | ||
| - | Test http : | + | |
| - | <code bash> | + | |
| telnet www.domaine.fr 80 | telnet www.domaine.fr 80 | ||
| GET /index.php HTTP/1.1 | GET /index.php HTTP/1.1 | ||
| Ligne 38: | Ligne 33: | ||
| - | Test https : | + | * Test https : <code bash> |
| - | + | ||
| - | <code bash> | + | |
| openssl s_client -connect www.domaine.fr: | openssl s_client -connect www.domaine.fr: | ||
| ---informations du cert--- | ---informations du cert--- | ||
| Ligne 47: | Ligne 40: | ||
| </ | </ | ||
| - | ===== Sécurisation | + | ===== Configuration |
| + | ====Configuration conseillé==== | ||
| + | * <file bash httpd.conf> | ||
| + | ################################## | ||
| + | # Configuration relative au serveur | ||
| + | ################################## | ||
| + | # Ecoute du serveur | ||
| + | Listen 80 | ||
| + | ServerName < | ||
| + | ServerAdmin webmaster@domaine.fr | ||
| - | ====Proxy_http==== | + | # Directory par defaut |
| - | ===Installation=== | + | DocumentRoot "/usr/local/WWW" |
| - | vi /etc/httpd/conf.d/proxy.conf | + | |
| - | <code bash> | + | ################################## |
| - | | + | # Configuration generale |
| - | | + | ################################## |
| - | + | # Process | |
| - | | + | ServerRoot "/ |
| - | Order deny, | + | PidFile run/httpd.pid |
| - | Allow from all | + | |
| - | + | ||
| - | #Controle le flux des requetes | + | |
| - | ProxyVia On | + | |
| - | </code> | + | |
| + | # Permet de garder un certain laps de temps les connexions ouverte | ||
| + | KeepAlive On | ||
| - | ===Configuration=== | + | # Nombre de connexion ouverte à garder |
| - | <code bash> | + | MaxKeepAliveRequests 200 |
| - | | + | |
| + | # Temps avant qu'une connexion soit fermée faute de demande | ||
| + | KeepAliveTimeout 15 | ||
| - | | + | # User d' |
| - | ProxyPassreverse / http:// | + | User apache |
| + | Group apache | ||
| + | ################################## | ||
| + | # Serveur/ Modules | ||
| + | ################################## | ||
| - | | + | # Inclusion des modules |
| - | ProxyHTMLURLMap http:// | + | Include conf.modules.d/*.conf |
| - | # Reecriture d'URL | + | # Multi-Processing Modules - Nombre de serveur/ |
| - | SetOutputFilter INFLATE; | + | #// InfoDoc: Le MPM prefork utilise plusieurs processus enfants possédant chacun un seul thread. |
| + | #// Chaque processus gère une seule connexion à la fois. Sur de nombreux systèmes, prefork est comparable en matière de vitesse à worker | ||
| + | #// mais il utilise plus de mémoire | ||
| + | #// Si probleme de perf, il faudra passer en mode " | ||
| + | < | ||
| + | # Nombre min de processus serveurs enfants inactifs | ||
| + | MinSpareServers | ||
| + | # Nombre max de processus serveurs enfants inactifs | ||
| + | MaxSpareServers | ||
| + | # Nombre max de processus serveurs enfants en parralèle ( Anciennement MaxClients ) - (Calcul : RAM Mo / 30 ) | ||
| + | # ( Defaut MaxRequestWorkers | ||
| + | # Nombre de requetes avant de tuer le worker ( Anciennement MaxRequestsPerChild ) | ||
| + | #// Calcul : total amount of daily requests / total number of daily processes | ||
| + | MaxConnectionsPerChild | ||
| + | #// Avec les MPMs prefork et event, n' | ||
| + | #// ( Default ServerLimit | ||
| + | #// Prechauffe du serveur au demarrage | ||
| + | #// ( Default StartServers 5) | ||
| + | </ | ||
| + | |||
| + | # Configuration ancienne désormais native en apache 2.4 | ||
| + | #// AutoIndentification IP:Port | ||
| + | #// (Default UseCanonicalName Off ) | ||
| + | #// Desactiver reverse DNS | ||
| + | #// (Default HostnameLookups off ) | ||
| + | #// Desactiver l' | ||
| + | #// (Default EnableSendfile Off ) | ||
| + | #// Nom des fichier htaccess | ||
| + | #// (Default AccessFileName .htaccess ) | ||
| + | #// Temps pour fermer une connection ouverte mais qui n'a pas été utilisée - Baisser en cas de DDOS | ||
| + | #// (Default: Timeout 300) | ||
| + | |||
| + | ################################## | ||
| + | # Securité | ||
| + | ################################## | ||
| + | |||
| + | # Prod=" | ||
| + | ServerTokens Prod | ||
| + | # Aucune infos sur les pages d' | ||
| + | ServerSignature Off | ||
| + | |||
| + | # Interdire de parcourir l' | ||
| + | < | ||
| + | AllowOverride none | ||
| + | Require all denied | ||
| + | </ | ||
| + | |||
| + | <Files " | ||
| + | Require all denied | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | UserDir disabled root | ||
| + | </ | ||
| + | |||
| + | |||
| + | ################################## | ||
| + | # Configuration types de fichiers et langue | ||
| + | ################################## | ||
| + | |||
| + | < | ||
| + | TypesConfig / | ||
| + | |||
| + | AddType application/ | ||
| + | AddType application/ | ||
| + | # Permettre les SSI (Inclusions Côté Serveur) | ||
| + | AddType text/html .shtml | ||
| + | AddOutputFilter INCLUDES .shtml | ||
| + | |||
| + | AddEncoding x-compress Z | ||
| + | AddEncoding x-gzip gz | ||
| + | AddLanguage en .en | ||
| + | AddLanguage fr .fr | ||
| + | AddLanguage de .de | ||
| + | AddLanguage da .da | ||
| + | AddLanguage el .el | ||
| + | AddLanguage it .it | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | MIMEMagicFile conf/magic | ||
| + | </ | ||
| + | |||
| + | |||
| + | < | ||
| + | LanguagePriority | ||
| + | ForceLanguagePriority Prefer Fallback | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | DirectoryIndex index.html | ||
| + | </ | ||
| + | |||
| + | |||
| + | ################################## | ||
| + | # Mise en forme des logs | ||
| + | ################################## | ||
| + | |||
| + | ErrorLog " | ||
| + | LogLevel warn | ||
| + | |||
| + | < | ||
| + | # | ||
| + | # The following directives define some format nicknames for use with | ||
| + | # a CustomLog directive (see below). | ||
| + | # | ||
| + | LogFormat "%h %l %u %t \" | ||
| + | LogFormat "%h %l %u %t \" | ||
| + | |||
| + | < | ||
| + | # You need to enable mod_logio.c to use %I and %O | ||
| + | LogFormat "%h %l %u %t \" | ||
| + | </ | ||
| + | |||
| + | CustomLog " | ||
| + | </ | ||
| + | |||
| + | ################################## | ||
| + | # Supplemental configuration | ||
| + | ################################## | ||
| + | |||
| + | IncludeOptional conf.d/ | ||
| + | |||
| + | ################################## | ||
| + | # Configuration des vhost | ||
| + | # // Lu par ordre alphabetique 0-z | ||
| + | ################################## | ||
| + | |||
| + | Include vhost.d/ | ||
| + | |||
| + | </ | ||
| + | |||
| + | ==== VirtualHost ==== | ||
| + | * Exemple de vhost: <file bash vhost.d/ | ||
| + | |||
| + | #################################################### | ||
| + | # HTTP - Redirection vers SSL | ||
| + | #################################################### | ||
| + | |||
| + | < | ||
| + | ### | ||
| + | # Parametres vhost | ||
| + | ### | ||
| + | ServerName nomduserveur.domaine.fr | ||
| + | ServerAdmin webmaster@domaine.fr | ||
| + | ErrorLog / | ||
| + | LogLevel debug | ||
| + | CustomLog / | ||
| + | |||
| + | ### | ||
| + | # Redirection vers SSL | ||
| + | ### | ||
| + | RewriteEngine on | ||
| + | RewriteCond %{HTTPS} off | ||
| + | RewriteRule (.*) https:// | ||
| + | |||
| + | </ | ||
| + | |||
| + | #################################################### | ||
| + | # HTTPS | ||
| + | #################################################### | ||
| + | |||
| + | < | ||
| + | ### | ||
| + | # Parametres vhost | ||
| + | ### | ||
| + | DocumentRoot "/ | ||
| + | ServerName nomduserveur.domaine.fr | ||
| + | ServerAdmin webmaster@domaine.fr | ||
| + | SSLEngine on | ||
| + | ErrorLog / | ||
| + | LogLevel warn | ||
| + | CustomLog / | ||
| + | |||
| + | |||
| + | < | ||
| + | SetHandler server-status | ||
| + | AuthName " | ||
| + | AuthType Basic | ||
| + | AuthBasicProvider ldap | ||
| + | Require group-admin | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | SetHandler server-info | ||
| + | AuthName " | ||
| + | AuthType Basic | ||
| + | AuthBasicProvider ldap | ||
| + | Require group-admin | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | # On interdit tout accès | ||
| + | AllowOverride none | ||
| + | Require all none | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | # Eviter FollowSymlinks à la racine, cela reduit les performances apache | ||
| + | Options Indexes FollowSymLinks | ||
| + | # Si besoin d'un htaccess, mais il serait préférable d' | ||
| + | AllowOverride All | ||
| + | # On autorise l' | ||
| + | Require all granted | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | </ | ||
| + | |||
| + | ====Proxy_http==== | ||
| + | === Configuration === | ||
| + | |||
| + | * Configuration du module de proxy <file bash conf.d/ | ||
| + | # On interdit de se servir du serveur en tant que mandataire | ||
| + | | ||
| + | | ||
| + | Order deny,allow | ||
| + | Allow from all | ||
| - | | + | # |
| - | ProxyHTMLEnable | + | ProxyVia |
| - | ProxyHTMLURLMap http:// | + | </file> |
| - | | + | |
| - | | + | |
| - | + | ||
| - | # | ||
| - | # | ||
| - | # | ||
| - | # | ||
| - | # | ||
| - | # | ||
| - | </code> | + | ===Configuration=== |
| + | * Exemple de configuration de proxypass vers l'app1 défini précédemment dans un vhost <file bash vhost.d/00-defaut.conf> | ||
| + | < | ||
| + | ### | ||
| + | # Parametres vhost | ||
| + | ### | ||
| - | Redémarrer le serveur web | + | |
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | |||
| + | ### | ||
| + | # Parametres SSL | ||
| + | ### | ||
| + | | ||
| + | | ||
| + | |||
| + | |||
| + | < | ||
| + | | ||
| + | | ||
| + | </ | ||
| + | |||
| + | </ | ||
| + | </ | ||
| - | <code bash> | + | * Redémarrer le serveur web : <code bash> |
| ====mod_security==== | ====mod_security==== | ||
| ===Installation=== | ===Installation=== | ||
| - | <code bash>yum install mod_security mod_security_crs</ | + | * <code bash>yum install mod_security mod_security_crs</ |
| ===Configuration==== | ===Configuration==== | ||
| - | Edit / | + | * Edit / |
| - | + | ||
| - | <code bash># Default recommended configuration | + | |
| SecRuleEngine On | SecRuleEngine On | ||
| </ | </ | ||
| - | On passe **SecRuleEngine** à la valeur **DetectionOnly** afin de ne faire que de la journalisation d' | + | * On passe **SecRuleEngine** à la valeur **DetectionOnly** afin de ne faire que de la journalisation d' |
| Les logs des actions de mod_security sont dans le fichier / | Les logs des actions de mod_security sont dans le fichier / | ||
| Pour désactiver une règle pour une page spécifique : | Pour désactiver une règle pour une page spécifique : | ||
| - | <code bash>< | + | * <code bash>< |
| SecRuleRemoveById 960015 #ID que l'on peut voir dans les logs [id " | SecRuleRemoveById 960015 #ID que l'on peut voir dans les logs [id " | ||
| </ | </ | ||
| - | Désactiver toutes les règles sur des pages spécifiques: | + | * Désactiver toutes les règles sur des pages spécifiques: |
| - | + | ||
| - | <code bash>< | + | |
| SecRuleEngine off | SecRuleEngine off | ||
| </ | </ | ||
| - | Désactiver une règle pour une page d’IP: | + | * Désactiver une règle pour une page d’IP: <code bash> |
| - | + | ||
| - | <code bash> | + | |
| </ | </ | ||
| Ligne 140: | Ligne 370: | ||
| ===Installation=== | ===Installation=== | ||
| - | Ajouter un repos :vi / | + | * Ajouter un repos :vi / |
| - | + | ||
| - | <code bash> | + | |
| name=CentOS-jwall - jwall.org packages for noarch | name=CentOS-jwall - jwall.org packages for noarch | ||
| baseurl=http:// | baseurl=http:// | ||
| Ligne 150: | Ligne 378: | ||
| </ | </ | ||
| - | Ajouter la clé du dépôt: | + | * Ajouter la clé du dépôt: |
| - | <code bash>rpm --import http:// | + | * <code bash>yum install auditconsole</ |
| - | + | ||
| - | + | ||
| - | <code bash>yum install auditconsole</ | + | |
| ===Configuration=== | ===Configuration=== | ||
| - | / | + | * / |
| - | + | ||
| - | <code bash># ModSecurity Console receiving URI. You can change the host | + | |
| # and the port parts but leave everything else as is. | # and the port parts but leave everything else as is. | ||
| # | # | ||
| Ligne 201: | Ligne 424: | ||
| </ | </ | ||
| - | <code bash> | + | * <code bash> |
| ===Utilisation=== | ===Utilisation=== | ||
| - | http:// | + | * http:// |
| + | * / | ||
| - | / | + | * Avec mlogc <code bash> |
| - | + | ||
| - | Avec mlogc | + | |
| - | + | ||
| - | <code bash> | + | |
| SecAuditLog " | SecAuditLog " | ||
| </ | </ | ||
| - | Si vous ne pouvez pas installer/ | + | * Si vous ne pouvez pas installer/ |
| - | <code bash> | + | * <code bash> |
| SecAuditLog " | SecAuditLog " | ||
| </ | </ | ||
| - | Alors on peut utiliser une commande alternative en tache cron pour lancer la collecte: | + | * Alors on peut utiliser une commande alternative en tache cron pour lancer la collecte: |
| - | <code bash>/ | + | * <code bash>/ |
| </ | </ | ||
| ====mod_evasive==== | ====mod_evasive==== | ||
| ===Installation=== | ===Installation=== | ||
| - | <code bash>yum install mod_evasive</ | + | * <code bash>yum install mod_evasive</ |
| ===Configuration=== | ===Configuration=== | ||
| - | / | + | * / |
| - | + | ||
| - | <code bash> | + | |
| #Taille de la table hash, plus grande est la valeur, plus de mémoire sera nécessaire pour parcourir la | #Taille de la table hash, plus grande est la valeur, plus de mémoire sera nécessaire pour parcourir la | ||
| #table, plus la valeur sera petite, plus le parcours de la table sera rapide. | #table, plus la valeur sera petite, plus le parcours de la table sera rapide. | ||
| Ligne 260: | Ligne 478: | ||
| </ | </ | ||
| - | <code bash> | + | * <code bash> |
| chown apache: | chown apache: | ||
| </ | </ | ||
| - | Pour tester le fonctionnement : Un script perl plus évolué que celui fourni ( / | + | * Pour tester le fonctionnement : Un script perl plus évolué que celui fourni ( / |
| - | + | ||
| - | <code perl># | + | |
| # Script original : mod_dosevasive test.pl | # Script original : mod_dosevasive test.pl | ||
| # A ajouter : : Permettre un sleep, Choisir un nombre de requêtes, | # A ajouter : : Permettre un sleep, Choisir un nombre de requêtes, | ||
| Ligne 298: | Ligne 514: | ||
| exit; | exit; | ||
| + | </ | ||
| + | |||
| + | ====HTTP2 | ||
| + | ===Activation dans le vhost === | ||
| + | * HTTP2 est un module d' | ||
| + | * Par exemple pour adminwiki.fr nous sommes passé de 2.8 secondes de chargement pour la page d' | ||
| + | * Certain navigateur ne l' | ||
| + | * Après avoir charger le module http2, la configuration se fait au niveau du vhost : | ||
| + | * <code bash> | ||
| + | < | ||
| + | ServerName domaine.fr | ||
| + | Protocols h2 h2c http/1.1 | ||
| + | </ | ||
| + | |||
| + | ==== Astuces en vrac ==== | ||
| + | |||
| + | === Rewrite === | ||
| + | |||
| + | * Redirect dans un sous dossier enfant: ( évite loop / | ||
| + | RewriteCond %{REQUEST_URI} !^/site/.*$ | ||
| + | RewriteRule | ||
| </ | </ | ||
| [[systemes: | [[systemes: | ||