Apache : sécuriser son site WEB

Avatar de l’utilisateur
Malekal_morte
Site Admin
Site Admin
Messages : 86868
Inscription : 10 sept. 2005 13:57
Contact :

Apache : sécuriser son site WEB

Message par Malekal_morte » 05 oct. 2015 09:40

Première règle élémentaire de sécurité : on réfléchit puis on clic et pas l'inverse - Les fichiers/programmes c'est comme les bonbons, quand ça vient d'un inconnu, on n'accepte pas

Sécuriser son ordinateur (version courte)

Tutoriels Logiciels - Tutoriel Windows - Windows 10

Stop publicités - popups intempestives
supprimer-trojan.com : guide de suppression de malwares

Partagez malekal.com : n'hésitez pas à partager sur Facebook et GooglePlus les articles qui vous plaisent.


Avatar de l’utilisateur
Malekal_morte
Site Admin
Site Admin
Messages : 86868
Inscription : 10 sept. 2005 13:57
Contact :

Sécurité WEB : Apache limiter les accès

Message par Malekal_morte » 05 oct. 2015 12:22

J'ajoute quelques notes qui peuvent être utiles concernant la sécurité de votre site WEB.
Notamment un mot sur les permissions des dossiers qui sont très importants.

Voici rapidement le fonctionnement des permissions sur un systèmes *UNIX.
Il existe pas mal de littérature comme tout élément touchant *UNIX sur la toile, si vous souhaitez parfaire ces connaissances.

Image

On obtient :
  • 1 : Ce sont les permissions du "owner" / propriétaire du dossier/fichier
  • 2 : Les permissions liés aux groupes
  • 3 : Les permissions liés à "others", autres utilisateurs
Vous avez donc les permissions du propriétaire du fichier/dossier, du groupe auquel appartient le fichier/dossier et enfin autre.
Il est donc possible de ne donner les droits qu'au propriétaire, propriétaire/groupe ou à tout le monde.
Les permissions sont en :
  • r : lecture
  • w : écriture
  • x : exécution
Dans la capture ci-dessous, le propriétaire est root, le groupe est www-data, qui est l'utilisateur du serveur WEB (dans d'autres distributions on peut avoir apache, apache2 ou httpd).
En règle générale pour un serveur WEB, on donne les droits pour l'utilisateur qui exécute Apache et éventuellement un groupe lié à l'accès FTP.
Par exemple, ce script PHP up.php veut écrire un fichier demo.txt dans test.
Cela ne fonctionnera pas, car l'utilisateur www-data n'a pas accès en écriture dans ce dossier test (il manque le w)

Image

Ce que cette page essaye de mettre en lumière est que votre l'utilisateur Apache se comporte comme un utilisateur classique.
Si un script souhaite pouvoir écrire dans un dossier ou modifier un fichier PHP existant, l'utilisateur Apache doit avoir accès en écriture sur le dossier ou fichier.
C'est tout à fait vrai dans le cas d'un attaquant qui souhaite uploader une PHP Backdoor.

Si vous souhaitez donc sécuriser votre site WEB, vous pouvez donc limiter l'écriture dans certains dossiers, bien sûr, pour cela, il faut connaître le fonctionnement de son site.
Souvent, ce n'est pas trop le cas avec un forum ou un CMS.

Un petit mot concernant les dossiers images, cache ou autres.
La création de fichiers par le serveur WEB est nécessaire dans ces dossiers, le site va automatiquement créé des fichiers dans ces dossiers, de ce fait, le serveur WEB doit donc avoir accès en écriture dans ce dossier et pouvoir lire les fichiers.
Bien souvent, un fichier .htaccess de filtrage est créé à la racine de ce dernier pour filtrer l'accès GET sur ces fichiers afin que les internautes ne puissent pouvoir lire les ressources.
(Pour plus d'informations sur le fichier htaccess, vous pouvez vous reporter à la page : How-To Apache).

Code : Tout sélectionner

<Files *>
	Order Allow,Deny
	Deny from All
</Files>
Ce qui donne par exemple, ici un fichier PHP demo qui permet un phpinfo.
On créé le fichier .htaccess

Image

Lorsque l'on tente d'accéder aux fichiers PHP, on se prend un forbidden 403 :

Image

Côté serveur, dans les logs :
[Tue Oct 07 04:50:03.657484 2014] [access_compat:error] [pid 2757] [client 192.168.1.10:43302] AH01797: client denied by server configuration: /var/www/wordpress/test/demo.php
Outre l'utilisation de fichier .htaccess
Apache permet de créer des directives dans le fichier de configuration afin donner une règle générale à tous les dossiers portants certains noms.
On peut matcher les dossiers/fichiers avec les directives :
<Directory>
<DirectoryMatch>
<Files>
<FilesMatch>
Plus d'informations : http://httpd.apache.org/docs/2.4/fr/sections.html
Les directives sont donc à mettre dans les fichiers de configuration Apache (vous n'y avez pas accès sur un serveur mutualisé), le gros avantage, est qu'il évite les boulettes.
Du style, une personne tiers qui supprime/modifie par erreur un fichier .htaccess de filtrage.

Par exemple, par défaut, Apache2 empêche l'accès aux fichiers .htaccess afin de ne pouvoir être lus avec la directive suivante :

Code : Tout sélectionner

<FilesMatch "^\.ht">
        Require all denied
</FilesMatch>
On a souvent la même chose pour les fichiers de configuration PHP, style config.php

Il est donc tout à fait possible d'empếcher l'accès à tous les dossiers test, sans fichier .htaccess, avec la directive :

Code : Tout sélectionner

	<DirectoryMatch ".*/test/.*">
		Order Allow,Deny
		Deny from All
	</DirectoryMatch>
HTTP 403 :
Image

Vous pouvez donc protéger vos dossiers cache de cette manière.

Dans le cas des Images, il faut que l'internaute puisse lire le contenu, sinon l'image ne s'affichera pas, mais on peut empếcher par exemple l'exécution de fichier PHP en réduisant la directive suivante :

Code : Tout sélectionner

	<DirectoryMatch ".*/test/.*\.php">
		Order Allow,Deny
		Deny from All
	</DirectoryMatch>
Image

Il est tout à fait possible de désactiver PHP dans un dossier comme ceci :

Code : Tout sélectionner

	<DirectoryMatch ".*/test/.*">
		php_flag engine off
	</DirectoryMatch>
Dans le cas de WordPress, on peut donc empếcher l'accès à certains dossiers :

Code : Tout sélectionner

	<DirectoryMatch ".*/test/.*">
		php_flag engine off
	</DirectoryMatch>
On peut aussi bloquer des méthodes avec la directive Limit.
Par exemple, si on souhaite empécher les POST sur tous les fichiers WordPress sauf dans wp-admin et sur wp-login.php

Code : Tout sélectionner

  <DirectoryMatch "/var/www/wordpress/(?!wp-login.php|wp-admin/.*)">
                <Limit POST>
                Deny from all
                </Limit>
        </DirectoryMatch>
Il est aussi possible de définir des variables pour agir dessus, ceci se fait avec la directive SetEnIfNoCase.
Par exemple, si on veut ouvrir les POSTS sur wp-login.php et wp-admin que sur certaines IPs clientes :

Code : Tout sélectionner

  SetEnvIfNoCase Remote_Addr "^192\.168\.1\.4$" whitelist_ip
        SetEnvIfNoCase Remote_Addr "^127\.0\.0\.1$" whitelist_ip

        <DirectoryMatch "/var/www/wordpress/(wp-login.php|wp-admin/.*)">
                <Limit POST>
                Order Deny,Allow
                Deny from all
                Allow from env=whitelist_ip
                </Limit>
        </DirectoryMatch>
Autre exemple, si on souhaite définir des bots et bloquer l'accès à ces derniers :

Code : Tout sélectionner

SetEnvIfNoCase User-Agent "^Keyword Density/0.9" bad_bot
SetEnvIfNoCase User-Agent "^Kenjin Spider" bad_bot
SetEnvIfNoCase User-Agent "^Cegbfeieh" bad_bot

<Limit GET POST>
Order Allow,Deny
Allow from all
Deny from env=bad_bot
</Limit>
Bref, comme vous pouvez le voir, on peut faire à peu près tout ce que l'on souhaite sur Apache.

Liens internes :
Plus généralement : [réseau] Sécuriser un serveur Apache/PHP/MySQL (LAMP)
L'index des pages liés à la sécurité WEB sur Apache : Apache : Sécuriser son site WEB
Première règle élémentaire de sécurité : on réfléchit puis on clic et pas l'inverse - Les fichiers/programmes c'est comme les bonbons, quand ça vient d'un inconnu, on n'accepte pas

Sécuriser son ordinateur (version courte)

Tutoriels Logiciels - Tutoriel Windows - Windows 10

Stop publicités - popups intempestives
supprimer-trojan.com : guide de suppression de malwares

Partagez malekal.com : n'hésitez pas à partager sur Facebook et GooglePlus les articles qui vous plaisent.

Répondre

Revenir vers « Tech, Tips & Tricks »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité