systemes:web:httpd

Différences

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

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
systemes:web:httpd [2017/10/06 11:20]
william [Sécurisation du serveur]
systemes:web:httpd [2019/02/06 14:03] (Version actuelle)
Ligne 3: Ligne 3:
 ===== Introduction ===== ===== Introduction =====
  
-**apache2/httpd** +  * **apache2/httpd** 
  
-**mod_security** est un "web application firewall" (WAF) et un IDS/IPS (système détection/prévention d'intrusion) pour les applications web. Il surveille le trafic HTTP en temps réel et protège les applications web des attaques. Il peut utiliser les règles CRS d'OWASP. Il filtre et modifie la réponse renvoyée par le serveur web. https://www.owasp.org/index.php/Category:OWASP_ModSecurity_Core_Rule_Set_Project+  * **mod_security** est un "web application firewall" (WAF) et un IDS/IPS (système détection/prévention d'intrusion) pour les applications web. Il surveille le trafic HTTP en temps réel et protège les applications web des attaques. Il peut utiliser les règles CRS d'OWASP. Il filtre et modifie la réponse renvoyée par le serveur web. https://www.owasp.org/index.php/Category:OWASP_ModSecurity_Core_Rule_Set_Project
  
-**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'un utilisateur demande un trop grand nombre de pages sur un site web, sur un délai de temps très court, et par conséquent de bloquer son IP par iptables.+  * **mod_evasive** est un module Apache pour contrer les attaques DoS (Denial of Service). Il est par exemple, capable de détecter lorsqu'un utilisateur demande un trop grand nombre de pages sur un site web, sur un délai de temps très court, et par conséquent de bloquer son IP par iptables.
  
-**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
 </code> </code>
  
  
-Debian : +  * Debian : <code bash>
-<code bash>+
 apt-get install apache2 apt-get install apache2
 </code> </code>
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:443 openssl s_client -connect www.domaine.fr:443
 ---informations du cert--- ---informations du cert---
Ligne 51: Ligne 44:
 ====Configuration conseillé==== ====Configuration conseillé====
  
-<file bash httpd.conf>+  * <file bash httpd.conf>
 ################################## ##################################
 # Configuration relative au serveur # Configuration relative au serveur
Ligne 159: Ligne 152:
  AddType application/x-compress .Z  AddType application/x-compress .Z
  AddType application/x-gzip .gz .tgz  AddType application/x-gzip .gz .tgz
- AddType application/x-httpd-imap map 
- # Pour forcer save de la page?  
- AddType application/octet-stream .save 
- 
  # Permettre les SSI (Inclusions Côté Serveur)  # Permettre les SSI (Inclusions Côté Serveur)
  AddType text/html .shtml  AddType text/html .shtml
Ligne 230: Ligne 219:
 </file> </file>
  
-  * Exemple de vhost :  +==== VirtualHost ==== 
-  * <file bash vhost.d/00-default.conf>+  * Exemple de vhost: <file bash vhost.d/00-default.conf>
  
 #################################################### ####################################################
Ligne 310: Ligne 299:
 === Configuration === === Configuration ===
  
-  * Configuration du module de proxy +  * Configuration du module de proxy <file bash conf.d/proxy.conf>      ProxyPreserveHost On
-  * <file bash conf.d/proxy.conf>      ProxyPreserveHost On+
        # On interdit de se servir du serveur en tant que mandataire        # On interdit de se servir du serveur en tant que mandataire
        ProxyRequests Off        ProxyRequests Off
Ligne 324: Ligne 312:
  
 ===Configuration=== ===Configuration===
-  * Exemple de configuration de proxypass vers l'app1 défini précédemment dans un vhost +  * Exemple de configuration de proxypass vers l'app1 défini précédemment dans un vhost <file bash vhost.d/00-defaut.conf>
-  * <file bash vhost.d/00-defaut.conf>+
 <VirtualHost *:443> <VirtualHost *:443>
         ###         ###
Ligne 353: Ligne 340:
 </file> </file>
  
-Redémarrer le serveur web +  * Redémarrer le serveur web <code bash>systemctl restart httpd.service</code>
- +
-<code bash>systemctl restart httpd.service</code>+
  
 ====mod_security==== ====mod_security====
 ===Installation=== ===Installation===
-<code bash>yum install mod_security mod_security_crs</code>+  * <code bash>yum install mod_security mod_security_crs</code>
  
 ===Configuration==== ===Configuration====
-Edit /etc/httpd/conf.d/mod_security.conf +  * Edit /etc/httpd/conf.d/mod_security.conf <code bash># Default recommended configuration
- +
-<code bash># Default recommended configuration+
 SecRuleEngine On SecRuleEngine On
 </code> </code>
  
-On passe **SecRuleEngine** à la valeur **DetectionOnly** afin de ne faire que de la journalisation d'erreurs sans bloquer les requêtes. On pourra la mettre à **On** quand il n'y aura plus de fonctions bloquantes.+  * On passe **SecRuleEngine** à la valeur **DetectionOnly** afin de ne faire que de la journalisation d'erreurs sans bloquer les requêtes. On pourra la mettre à **On** quand il n'y aura plus de fonctions bloquantes.
 Les logs des actions de mod_security sont dans le fichier /var/log/httpd/modsec_audit.log Les logs des actions de mod_security sont dans le fichier /var/log/httpd/modsec_audit.log
 Pour désactiver une règle pour une page spécifique : Pour désactiver une règle pour une page spécifique :
  
-<code bash><LocationMatch "/file.php">+  * <code bash><LocationMatch "/file.php">
 SecRuleRemoveById 960015 #ID que l'on peut voir dans les logs [id "960015"] SecRuleRemoveById 960015 #ID que l'on peut voir dans les logs [id "960015"]
 </code> </code>
  
-Désactiver toutes les règles sur des pages spécifiques: +  * Désactiver toutes les règles sur des pages spécifiques: <code bash><LocationMatch "/[0-9a-zA-Z/_.+-]+\.example)">
- +
-<code bash><LocationMatch "/[0-9a-zA-Z/_.+-]+\.example)">+
 SecRuleEngine off SecRuleEngine off
 </code> </code>
  
-Désactiver une règle pour une page d’IP: +  * Désactiver une règle pour une page d’IP: <code bash>SecRule REQUEST_HEADERS:x-forwarded-for "@ipmatch xxx.yyy.zzz.0/16" "phase:2,t:none,pass,nolog"
- +
-<code bash>SecRule REQUEST_HEADERS:x-forwarded-for "@ipmatch xxx.yyy.zzz.0/16" "phase:2,t:none,pass,nolog"+
 </code> </code>
  
Ligne 391: Ligne 370:
  
 ===Installation=== ===Installation===
-Ajouter un repos :vi /etc/yum.repos.d/jwall.repo +  * Ajouter un repos :vi /etc/yum.repos.d/jwall.repo <code bash>[jwall]
- +
-<code bash>[jwall]+
 name=CentOS-jwall - jwall.org packages for noarch name=CentOS-jwall - jwall.org packages for noarch
 baseurl=http://download.jwall.org/yum/jwall baseurl=http://download.jwall.org/yum/jwall
Ligne 401: Ligne 378:
 </code> </code>
  
-Ajouter la clé du dépôt:+  * Ajouter la clé du dépôt: <code bash>rpm --import http://download.jwall.org/chris.gpg</code>
  
-<code bash>rpm --import http://download.jwall.org/chris.gpg</code> +  * <code bash>yum install auditconsole</code>
- +
- +
-<code bash>yum install auditconsole</code>+
  
 ===Configuration=== ===Configuration===
-/etc/mlogc.conf +  * /etc/mlogc.conf <code bash># ModSecurity Console receiving URI. You can change the host
- +
-<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 452: Ligne 424:
 </code> </code>
  
-<code bash>systemctl restart auditconsole</code>+  * <code bash>systemctl restart auditconsole</code>
  
 ===Utilisation=== ===Utilisation===
-http://adresse-du-serveur:8080/si le serveur n'est pas accessible edit jdk1.6 -> jdk1.7 (ou 1.8) dans /etc/init.d/auditconsole ( :s/1.6/1.7/g && systemctl daemon-reload )+  * http://adresse-du-serveur:8080/si le serveur n'est pas accessible edit jdk1.6 -> jdk1.7 (ou 1.8) dans /etc/init.d/auditconsole ( :s/1.6/1.7/g && systemctl daemon-reload )
  
 +  * /etc/httpd/conf.d/mod_security.conf
  
-/etc/httpd/conf.d/mod_security.conf +  * Avec mlogc <code bash>....
- +
-Avec mlogc +
- +
-<code bash>....+
 SecAuditLog "|/usr/bin/mlogc /etc/mlogc.conf" SecAuditLog "|/usr/bin/mlogc /etc/mlogc.conf"
 </code> </code>
  
-Si vous ne pouvez pas installer/compiler mod_security, jwall fourni un outil pour collecter les logs, mais j'ai rencontré des problèmes+  * Si vous ne pouvez pas installer/compiler mod_security, jwall fourni un outil pour collecter les logs, mais j'ai rencontré des problèmes
  
-<code bash>....+  * <code bash>....
 SecAuditLog "|/usr/bin/jwall mlogc /etc/mlogc.conf" SecAuditLog "|/usr/bin/jwall mlogc /etc/mlogc.conf"
 </code> </code>
  
-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>/usr/bin/jwall send 'http://sensor:test@127.0.0.1:8080/rpc/auditLogReceiver' '/var/log/httpd/modsec_audit.log+  * <code bash>/usr/bin/jwall send 'http://sensor:test@127.0.0.1:8080/rpc/auditLogReceiver' '/var/log/httpd/modsec_audit.log
 </code> </code>
  
 ====mod_evasive==== ====mod_evasive====
 ===Installation=== ===Installation===
-<code bash>yum install mod_evasive</code>+  * <code bash>yum install mod_evasive</code>
  
 ===Configuration=== ===Configuration===
-/etc/httpd/conf.d/mod_evasive.conf +  * /etc/httpd/conf.d/mod_evasive.conf <code bash>LoadModule evasive20_module modules/mod_evasive24.so
- +
-<code bash>LoadModule evasive20_module modules/mod_evasive24.so+
 #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 511: Ligne 478:
 </code> </code>
  
-<code bash>mkdir /var/log/mod_evasive+  * <code bash>mkdir /var/log/mod_evasive
 chown apache:apache /var/log/mod_evasive chown apache:apache /var/log/mod_evasive
 </code> </code>
  
-Pour tester le fonctionnement : Un script perl plus évolué que celui fourni ( /usr/share/doc/mod_evasive-*/test.pl ) +  * Pour tester le fonctionnement : Un script perl plus évolué que celui fourni ( /usr/share/doc/mod_evasive-*/test.pl ) <code perl>#!/usr/bin/perl -w
- +
-<code perl>#!/usr/bin/perl -w+
 # 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 557: Ligne 522:
   * Certain navigateur ne l'implémente que pour TLS   * Certain navigateur ne l'implémente que pour TLS
   * Après avoir charger le module http2, la configuration se fait au niveau du vhost :    * Après avoir charger le module http2, la configuration se fait au niveau du vhost : 
-<code bash>+  * <code bash>
 <VirtualHost *:443> <VirtualHost *:443>
         ServerName domaine.fr         ServerName domaine.fr
  Protocols h2 h2c http/1.1  Protocols h2 h2c http/1.1
 </code> </code>
 +
 +==== Astuces en vrac  ====
 +
 +=== Rewrite ===
 +
 +  * Redirect dans un sous dossier enfant: ( évite loop /REPERTOIRE/cible/cible/cible/cible/cible/cible/cible ) <code bash>
 +        RewriteCond %{REQUEST_URI} !^/site/.*$
 +        RewriteRule    "^/REPERTOIRE$" "/REPERTOIRE/cible" [R,L]
 +</code>
 +
  
 [[systemes:start|Retour]] [[systemes:start|Retour]]
  • systemes/web/httpd.1507281616.txt.gz
  • Dernière modification: 2019/02/06 14:02
  • (modification externe)