apache http

75
07/06/22 1 APACHE HTTP Rachid NID SAID [email protected]

Upload: rachid-nid-said

Post on 14-Dec-2014

1.978 views

Category:

Technology


2 download

DESCRIPTION

Installation Structure Configuration Directives Hôtes virtuels Modules Interception des erreurs & trace Contenu dynamique Authentification & SSL Proxy & Load Balancer Règles pour la performance et la sécurité

TRANSCRIPT

Page 1: APACHE HTTP

10/04/23 1

APACHE HTTPRachid NID SAID

[email protected]

Page 2: APACHE HTTP

10/04/23 2

Plan

Introduction Installation

Structure Configuration

Directives Hôtes virtuels Modules Interception des erreurs & trace Contenu dynamique Authentification & SSL Proxy & Load Balancer

Règles pour la performance et la sécurité

Page 3: APACHE HTTP

Introduction Apache HTTP Server, est un serveur HTTP connu pour avoir joué

un rôle clé dans la croissance de l’Internet.

Continuité du serveur NCSA HTTPd de l’université de l’Illinois et alternative non payante de la solution Netscape Communications Corporation web server (Sun Java System Web Server)

Logiciel open source développé et maintenu par la communauté Apache Software Foundation.

Il représente le 1er serveur HTTP en part de marché avec 52%, devant Nginx 14% et IIS 11% (NetCraft Survey)

L'application est disponible pour une grande variété de systèmes d'exploitation, Unix, GNU, FreeBSD, Linux, Solaris, Novell NetWare, Mac OS X, Microsoft Windows, OS2, …

Page 4: APACHE HTTP

Introduction

Versions en cours : 2.0.x : en mode maintenance, pas de nouveaux

développement 2.2.x : en mode maintenance, pas de nouveaux

développement 2.4.x : version actuelle 2.5 : la nouvelle version en cours de développement

Disponible sur le site http://httpd.apache.org/

Page 5: APACHE HTTP

Installation

Le serveur Apache HTTP peut être téléchargé à partir du site http://httpd.apache.org/download.cgi

Apache offre deux sortes de livrables : Livrable binaire prêt a l’installation Code source de la version pour une compilation sur

la machine cible. cette option permet de mettre en place une

installation optimisé pour le besoin cible

Page 6: APACHE HTTP

InstallationMode statique et mode dynamique

L’architecture Apache est une architecture modulaire, et seulement les fonctionnalités de base d’un serveur HTTP sont disponible dans le noyau apache.

Écoute réseau, interception des requêtes, traitement des requêtes, envoi de la réponse.

Toutes les autres fonctionnalités Apache sont gérés par des modules externes.

Contenu dynamique, journalisation, authentification, ssl, …

Page 7: APACHE HTTP

InstallationMode statique et mode dynamique

Mode dynamique : Les modules apaches sont configurés dans le fichier de configuration httpd.conf et peuvent être modifiés à tout moment Le module n’est chargé qu’au besoin

Mode statique : Les modules apache sont définies lors de la compilation et ne peuvent être modifiés que par une autre compilation Identifier les modules de façon pertinente pour ne pas

être obligés de recompiler Chaque module incorporés est chargé en mémoire

même si elle n’est pas utilisé Performance accrue du serveur

Page 8: APACHE HTTP

InstallationSous Unix like

Extraction : $ gzip -d httpd-NV.tar.gz $ tar xvf httpd-NV.tar $ cd httpd-NV

Configuration : $ ./configure --prefix=installPath pour charger un module en mode statique, utiliser l’option

–enabled-mods-static=‘mod1 mod2 mod3’. Compilation : $ make Installation : $ make install Test : $ installPath/bin/apachectl -k start

accéder à l’url : http://localhostPour plus de détail sur la procédure d’installation voir le document

Compilation et installation sous Unix

Page 9: APACHE HTTP

InstallationSous Unix like

Page 10: APACHE HTTP

InstallationSous Unix like

Démarrage : installPath/bin/apachectl -k startinstallPath/bin/apachectl -k start –f path-to-configFile.conf

Arrêt : installPath/bin/apachectl -k stopinstallPath/bin/apachectl -k graceful-stopkill -TERM `cat /usr/local/apache2/logs/httpd.pid`

Redémarrage : installPath/bin/apachectl -k restartinstallPath/bin/apachectl -k graceful

Tester le fichier de configuration :installPath/bin/apachectl -k configtestinstallPath/bin/apachectl -k configtest –f path-to-configFile.conf

Page 11: APACHE HTTP

InstallationSous Unix like

La plupart des distributions Linux modernes offre un package apache prêt pour installation :

Debian et Ubuntu : Installation : apt-get install apache2

CentOS, Fedora, Red Hat : Installation : yum install httpd

Page 12: APACHE HTTP

InstallationSous Windows

Apache offre aussi la possibilité de compiler le code source pour la plateforme Windows

Utiliser l'environnement de développement Visual Studio de VC++

Il est possible d’installer Apache en tant que service

httpd.exe -k install -n "nom-service"

Pour plus de détail sur la procédure d’installation voir le document Compilation et installation sous Windows

Page 13: APACHE HTTP

Structure

Section Windows Unix

Chemin d’Install par défaut

C:\Program Files\ApacheGroup\Apache2

/usr/local/apache2

Exécutable et scripts

bin/apache.exebin/

bin/httpdbin/

Fichiers de log log/error.loglog/access.loglog/httpd.pid

log/error.loglog/access.loglog/httpd.pid

Fichier de configuration

conf/httpd.conf conf/httpd.conf

Scripts CGI cgi-bin cgi-bin

Page 14: APACHE HTTP

Structure

Section Windows Unix

Fichiers entêtes .h Include/build/

Messages d’erreurs

error/ error/

Modules et bibliothèques

modules/lib/

modules/lib/

Documentation manual/ manual/

Emplacement par défaut des fichiers html

htdocs/ htdocs/

Page 15: APACHE HTTP

Configuration

Les fichiers de configuration sont placés dans le dossier conf, selon les distributions le fichier par défaut est soit httpd.conf soit apache2.conf

Pour utiliser un autre fichier autre que le fichier par défaut, il faut informer Apache de l’emplacement du nouveau fichier

httpd –f /path/to/httpd/file.conf

Page 16: APACHE HTTP

Configuration

Directives : paramètres pour configurer et contrôler la comportement du serveur Apache tels que les droits d’accès, les ports d’écoute, …

Sections : identifient le contexte dans le quel les directives sont appliqués. Par exemple les directives de droit d’accès peuvent s’appliquer sur l’ensemble du serveur ou bien sur un dossier spécifique.

Page 17: APACHE HTTP

ConfigurationSections

Directive Description

Directory/ DirectoryMatch Définie un répertoire par son chemin ou bien par une expression régulière pour DirectoryMatch

Files / FilesMatch Définie une liste de fichiers par leurs chemins ou bien par une expression régulière pour FilesMatch

If / ElseIf / Else Définie une condition qui doit être réalisé lors du traitement d’une requête pour appliquer les directives.<If "-z req('Host')"> …</If>Les expressions dans le serveur HTTP Apache

IfDefine Définie une condition qui doit être réalisé lors du démarrage du serveur pour appliquer les directives, il prend en argument un paramètre fourni par –D à la commande de démarrage httpdIfDefine peuvent être imbriqués

Page 18: APACHE HTTP

ConfigurationSections

Directive Description

IfModule Les directives ne seront appliqués que si un module est chargé ou pas.<IfModule [!] nomModule>IfModule peuvent être imbriqués

IfVersion Les directives ne seront appliqué que si la version est la mêmeUtilisent les opérateurs logiques pour le test<IfVersion >= 2.1.5>

Location / LocationMatch Similaire à la directive Directory, mais utilise des URL au lieu de nom de dossier

Proxy / ProxyMatch Utilisé si Apache est configuré en tant que proxy, et ne s’appliquent que sur le contenu mandatéIl prend en argument une URL ou une expression régulière

VirtualHost S’appliquent à un hôte virtuel et permet d’indiquer les directives appliqués pour un hôte virtuel identifié par NameVirtualHost

Page 19: APACHE HTTP

ConfigurationSections

Certains types de sections peuvent être imbriqués

on peut utiliser les sections <Files> à l'intérieur des sections <Directory>,

on peut utiliser les directives <If> à l'intérieur des sections <Directory>, <Location> et <Files>.

On peut utiliser les directives <if> à l’intérieur d’autres directives <If>

On peut utiliser n’importe quelle section au sein de la section <virtualHost>

Page 20: APACHE HTTP

ConfigurationSections

L’ordre d’application des sections suit l’ordre suivant :

1. Les sections <Directory> (à l'exception des expressions régulières) et les fichiers .htaccess sont appliqués simultanément

2. Les sections <DirectoryMatch> et <Directory ~>

3. Les sections <Files> et <FilesMatch> sont appliquées simultanément

4. Les sections <Location> et <LocationMatch> sont appliquées simultanément

5. Les directives <If>

Page 21: APACHE HTTP

ConfigurationSections

Pour chaque type de section, les directives sont appliqués dans leurs ordre d’apparition dans le fichier de configuration

Pour la section <Directory>, les sections sont traitées dans l'ordre du répertoire, du plus court vers le plus long

Les sections situées à l'intérieur de sections <VirtualHost> sont appliquées après les sections correspondantes situées en dehors de la définition de l'hôte virtuel, ce qui permet à l'hôte virtuel de prévaloir sur la configuration du serveur principal.

Page 22: APACHE HTTP

ConfigurationDirectives : Adresse IP et Ports d’écoute

La directive Listen signifie à Apache de se mettre à l'écoute sur les adresses IP et ports spécifiés et de n’accepter des requêtes entrante que sur les ports et l’interface réseau spécifiés

Listen [<IP>:]<Port Number> [protocole]

La directive <Listen> accepte des adresse IPV6

Listen [2001:db8::a00:20ff:fea7:ccea]:80

Page 23: APACHE HTTP

ConfigurationDirectives : configuration de base

ServerName permet de définir un nom pour identifier le serveur, ce nom est utile lors de l’utilisation des redirections ou de l’utilisation du serveur en tant que frontalServerName [protocole://]domain name or ip adress[:port]

User, Group indiquent au serveur de traiter les requêtes avec les privilèges de l’utilisateur ou du groupe spécifié.

User userNameGroup groupeName

Pour utiliser ces directives le serveur doit être démarré en tant que root

Il faut faire attention à l’utilisateur ou groupe et de ne pas utiliser un avec des privilèges trop fort et trop étendues

Page 24: APACHE HTTP

ConfigurationDirectives : configuration de base

ServerRoot indique le répertoire racine ou est installé apache .

ServerRoot installPath

DocumentRoot indique le répertoire par défaut ou sont stocké les fichiers visible depuis Internet DocumentRoot path Si le path ne commence pas par un /, il est considéré

comme sous dossier du ServerRoot

Page 25: APACHE HTTP

ConfigurationDirectives : dossier virtuel

Apache permet de rendre visible des documents et du contenu qui n’est pas disponible sous le dossier DocumentRoot.

Ce comportement est possible grâce à la directive Alias.Alias <virtualdirectory> <real directory>

Exemple :Alias /image /ftp/pub/imagehttp://www.demaine.com/image/pic.gif

Page 26: APACHE HTTP

ConfigurationDirectives : Redirect

Dans le cas d’un changement d’url ou d’une migration de domaine, il est préférable de garder l’ancienne url pour un certain temps pour ne pas perturber les utilisateurs

La directive Redirect (RedirectMatch) permet de réaliser ce comportement, et de faire correspondre une ancienne URL à une nouvelle.

Redirect [etat] oldPath url etat : indique un code HTTP indiquant le type de

redirection

Page 27: APACHE HTTP

ConfigurationDirectives : Include

La directive Include permet d’inclure le contenu d’un fichier de configuration dans le fichier appelant

Include filePath|folderPath|wildcard

Cette directive permet d’organiser la configuration apache d’un telle façon que le fichier racine ne devient pas ingérable.

Les directives contenu dans le fichier inclus sont intégrés dans l’ordre d’apparition de la directive Include dans le fichier appelant

IncludeOptional, même comportement qu’Include sauf si le dossier spécifié n’existe pas, apache ne génère pas d’erreur à la différence d’Include

Page 28: APACHE HTTP

ConfigurationDirectives : fichier de configuration distribué

Apache offre un mécanisme très fort pour pouvoir redéfinir des directives de configuration de façon fine et distribué.

La directive AccessFileName permet ce mécanisme en spécifiant un nom de fichier que apache va vérifier à chaque requête et pour chaque dossier de l’url de la requête

AccessFileName .htaccess Contenu du fichier .htaccessAllowOverride All|None|type directive [types directive…]

Mécanisme à utiliser avec parcimonie, il a de forts impact sur les performance du serveur, préférer l’utilisation de la section <Directory>

Page 29: APACHE HTTP

ConfigurationDirectives : Contrôle d’accès

Le directive Require fournit un mécanisme très riche pour configurer un contrôle d’accès à des ressources du serveur

Require all granted : l’accès est autorisé sans restriction Require all denied : l’accès est refusé sans restriction Require env env_variable [env-var] … : l’accès est autorisé si le

variable d’environnement est définie Require method http-method [http-method] … : l’accès n’est autorisé

que pour les méthodes HTTP spécifié Require user iserID [userID] … : l’accès est autorisé pour les

utilisateurs indiqués Require group groupeName [groupName] … : l’accès est autorisé pour

les membres des groupes indiqués Require valid-user : l’accès est autorisé pour tout utilisateur valide Require ip adresseIP [adresseIP] … : l’accès est autorisé pour les

requêtes dont la source sont les adresses IP

Page 30: APACHE HTTP

ConfigurationDirectives : Contrôle d’accès

RequireAll permet de regrouper des directives d’accès Require dont aucune ne doit échouer pour permettre l’accès

RequireAny permet de regrouper des directives d’accès Require dont au moins doit être positif pour permettre l’accès

RequireNone permet de regrouper des directives d’accès Require dont aucune ne doit être positif pour permettre l’accès

Les directives de contrôle d’accès s’appliques seulement dans la section Directory ou bien au sein d’un fichier .htaccess

Page 31: APACHE HTTP

ConfigurationDirectives : Contrôle d’accès

SetEnvIf User-Agent geck1_8 let_me_in<Directory /www/mydocs>

<RequireAll><RequireAny>

Require user superadmin<RequireAll>

Require group adminsRequire ldap-group

cn=Administrators,o=Airius<RequireAny>

Require group salesRequire ldap-attribute

dept="sales" </RequireAny></RequireAll>

</RequireAny><RequireNone>

Require env let_me_inRequire ldap-group cn=Temporary

Employees,o=Airius</RequireNone>

</RequireAll></Directory>

Page 32: APACHE HTTP

ConfigurationHôtes virtuels

Le principe des Hôtes Virtuels consiste à faire fonctionner un ou plusieurs domaines Web sur une même machine. L'utilisateur final ne perçoit pas qu'en fait il s'agit d'une même machine.

Le configuration d’un hôte virtuel est faite par la directive VirtualHost

<VirtualHost [IP ADDRESS:PORT] >ServerAdminDocumentRootServerNameServerAliasErrorLog

</ VirtualHost >

Page 33: APACHE HTTP

ConfigurationHôtes virtuels

Il existe deux façons pour identifier des hôtes virtuels : Par adresse IP : l’hôte virtuel est identifié sur la base

d’un couple adresse IP et port. Pour pouvoir utiliser des adresses IP différentes pour

chaque hôte, la machine doit avoir un interface réseau pour chaque adresse IP

Apache doit être à l’écoute du port choisi au niveau de la configuration serveur via la directive Listen

Par nom de domaine : l’hôte virtuel est identifié sur la base d’un nom de domaine « www.mondomaine.com »

Le nom de domaine doit déjà être associé à l’adresse IP de la machine au niveau du DNS

Page 34: APACHE HTTP

ConfigurationHôtes virtuels

Définition de serveurs virtuels à base d’adresse IP :

Listen 172.20.30.40:80Listen 172.20.30.50:8080

<VirtualHost 172.20.30.40:80>DocumentRoot /www/example1-80ServerName www.example.comDirectives …

</VirtualHost>

<VirtualHost 172.20.30.50:8080>DocumentRoot /www/example2-8080ServerName www.example.orgDirectives …

</VirtualHost>

Page 35: APACHE HTTP

ConfigurationHôtes virtuels

Définition de serveurs virtuels par nom IP :1. Serveur qui répond au nom de domaine www.example.com et

site.example.com2. Serveur qui répond au nom de domaine other.example.com3. Serveur qui répond à toute autre requête qui ne cible pas les

domaines précédents

<VirtualHost *:80>ServerName www.example.comServerAlias www.example.com site.example.comDocumentRoot /www/domain

</VirtualHost><VirtualHost *:80>

ServerName other.example.comDocumentRoot /www/otherdomain

</VirtualHost><VirtualHost _default_:*>

DocumentRoot /www/default</VirtualHost>

Page 36: APACHE HTTP

ConfigurationModules DSO

L’architecture modulaire du serveur APACHE permet de fournir un produit performant pour répondre à divers besoins :

Disponibilité sur une très grande variété de plateformes et d‘OS. Ne reconstruire que les modules qui le nécessitent pour la plateforme cible.

Souplesse de configuration et de mise en place d’une plateforme performante et optimisé pour les besoins de la production Cette conception autorise. N’intégrer que les fonctionnalités (modules) nécessaire pour la plateforme.

Page 37: APACHE HTTP

ConfigurationModules DSO

Lors du chargement en mémoire, les modules DSO mènent une existence séparée du processus principal httpd.

Les modules sont chargés de deux façons : Statique, Les modules DSO sont compilés en même

temps que le serveur,

Dynamique : Les modules sont chargé via la directive loadModule du module mod_so.

LoadModule module nom-fichier

Les deux modules mod_so et core sont les seules modules qui ne peuvent être chargé de façon dynamique et le sont toujours de façon statique.

Page 38: APACHE HTTP

ConfigurationModules DSO

Page 39: APACHE HTTP

ConfigurationModules DSO

Traduction des URI en chemin physique : mod_userdir : gestion des dossiers personnels des

utilisateurs mod_rewrite : moteur de réécriture à base de règles

permettant de réécrire les URLs des requêtes à la volée

Authentification / gestion d’accés : mod_auth, mod_auth_anon,mod_auth_db,

mod_auth_dbm : gestion d’authentification des utilisateurs.

mod_access : gestion des accès au ressources du système.

Journalisation: mod_log_*: journalisation

Page 40: APACHE HTTP

ConfigurationModules DSO

Identification des MIME types : mod_mime : associe les extensions des fichiers

demandés avec l'action déclenchée par ces fichiers et avec leur contenu (type MIME, langue, jeu de caractère et codage) .

mod_mime_magic : détermine le type MIME d'un fichier à partir de de son contenu "magic numbers" (e.g. fichiers gif démarrent avec le même contenu)

Gestion de URL : mod_alias : permet d’accéder à certaines parties du

système qui ne sont pas public mod_env : création de variables d’environnement mod_speling : correction automatique des URL

Page 41: APACHE HTTP

ConfigurationModules DSO

Gestion de la réponse : mod_actions : identifier les types de fichiers qui sont

des exécutables CGI mod_autoindex : construction automatique de l’index

d’un répertoire lors de sa consultation mod_cgi : gestion du contenu CGI mod_include : gestion des directives SSI mod_dir : Permet la redirection des adresses se

terminant par un répertoire sans slash de fin et la mise à disposition des fichiers index de répertoire.

mod_imagemap : Traitement des cartes des zones interactives d'une image (imagemaps) au niveau du serveur

Page 42: APACHE HTTP

ConfigurationModules DSO : Avantages

Le construction du serveur est plus flexible à l'exécution car le processus serveur peut être assemblé à l'exécution via la directive LoadModule du fichier de configuration plutôt que par des options du script configure à la compilation.

Par exemple, on peut exécuter différentes instances du serveur (standard et version SSL, version minimale et version dynamique [mod_perl, mod_php], etc...) à partir d'une seule installation d'Apache httpd.

Le construction du serveur peut être facilement étendu avec des modules tiers, même après l'installation.

Facilité de montée en version des modules statiques apxs permet de travailler en dehors de l'arborescence des

sources d'Apache, et de n'avoir besoin que de la commande apxs pour introduire une nouvelle version du module fraîchement développé, dans le serveur HTTP Apache en cours d'exécution.

Page 43: APACHE HTTP

ConfigurationModules DSO : Inconvénients

Le serveur est environ 20 % plus lent au démarrage à cause des résolutions de symboles supplémentaires que le chargeur Unix doit effectuer.

Page 44: APACHE HTTP

ConfigurationInterception des erreurs & trace

ErrorLog définit le nom du fichier dans lequel le serveur va journaliser toutes les erreurs qu'il rencontre.

ErrorLog filePath La syntaxe Loglevel syslog permet de rediriger la sortie log vers le

journal système.

LogLevel définit le niveau de détail (verbosité) des messages enregistrés dans les journaux d’erreurs

LogLevel level La syntaxe Loglevel nomModule:level permet de spécifier un niveau de

log pour un module donné

PidFile définit le nom du fichier dans lequel le serveur va journaliser les identifiants du processus apache

Page 45: APACHE HTTP

ConfigurationInterception des erreurs & trace

Page 46: APACHE HTTP

ConfigurationInterception des erreurs & trace

CustomLog permet d’activer la journalisation de des requêtes destinées au serveur et d’en spécifier une politique. Nécessite l’activation du module mod_log_config

CustomLog fichier|pipe format|alias [env=[!]variable-environnement| expr=expression]

Page 47: APACHE HTTP

ConfigurationInterception des erreurs & trace

# Journal personnalisé avec alias de format LogFormat "%h %l %u %t \"%r\" %>s %b" common

CustomLog logs/access_log common

SetEnvIf Request_URI \.gif$ gif-imageCustomLog gif-requests.log common env=gif-image

CustomLog "|/usr/local/apache/bin/rotatelogs /log/access_log 86400" common

Page 48: APACHE HTTP

Contenu dynamiqueCGI

CGI (Common Gateway Interface) permet de définir une interface de communication entre un serveur HTTP et un programme exécutable qui renvoi vers le serveur du contenu HTML pour affichage

C’est cette interface qui a permis de rendre le WEB dynamique

Le plus populaire des langages de programmation CGI est PHP

Page 49: APACHE HTTP

Contenu dynamiqueCGI

Apache est capable de s’interfacer avec CGI pour permettre de communiquer avec des programmes externes

1. Charger le module CGI apache cgi_module, s’il n’est pas chargé en statique

LoadModule cgi_module path/mod_cgi.so

2. Définir l’emplacement des fichiers programmes Au niveau serveur :

ScriptAlias /scripts/ /usr/local/apache2/cgi-bin/ Au niveau dossier :

<Directory /usr/local/apache2/htdocs/somedir>Options +ExecCGI

</Directory>

3. Identifier les type de fichiers (extension) qui sont des programmesAddHandler cgi-script .cgi .pl .php

Page 50: APACHE HTTP

Contenu dynamiqueCGI

Configurer Apache pour traiter du contenu PHP en tant que programme CGI:

ScriptAlias /scripts/ scripts/php/AddHandler cgi-script .php

AddType application/x-httpd-php .phpAction application/x-httpd-php /usr/bin/php/php-cgi.exe

Page 51: APACHE HTTP

Contenu dynamiqueSSI

SSI pour Server Side Includes

C’est un mécanisme d’intégrer dans des pages HTML du code qui est interprété et évalué coté serveur, sans utiliser un langage CGI ou toute autre technologie coté serveur.

<!--#fonction attribut=valeur attribut=valeur ... -->

Exemples :<!--#config timefmt="%A" --> <!--#echo var="DATE_LOCAL" --><!--#include virtual="/cgi-bin/counter.pl" -->

 <!--#flastmod file="ssi.shtml" -->

Page 52: APACHE HTTP

Contenu dynamiqueSSI

1. Indiquer à apache la prise en charge des directives SSI

Options +Includes Cette directive peut être ajouté au niveau serveur,

hôte virtuel, ou répertoire

2. Indiquer quels fichiers sont concernés par la prise en charge de directives

AddType text/html .shtmlAddOutputFilter INCLUDES .shtml

Page 53: APACHE HTTP

ConfigurationAuthentification par mot de passe

L’authentification est le mécanisme qui permet de vérifier qu’un utilisateur est bien celui qu’il prétend être. Authentification par mot de passe Authentification par certificat SSL

Apache fournit un ensemble de modules qui permettent de configurer un mécanisme d’authentification complet est riche. mod_auth_basic, mod_auth_digest, mod_authn_anon,

mod_authn_dbd, mod_authn_dbm, mod_authn_file, mod_authnz_ldap, mod_authn_socache.

Page 54: APACHE HTTP

ConfigurationAuthentification par mot de passe

La directive AuthType permet d’activer l’authentification au niveau d’Apache et d’indiquer de quelle façon elle va être géré. Deux types sont disponibles :

mod_auth_basic : permet d’activer une authentification basique par de mot passe

AuthType basic

mod_auth_digest : même mécanisme que le précedent, sauf que le mot de passe envoyé du client vers le serveur est crypté.

AuthType Digest

Page 55: APACHE HTTP

ConfigurationAuthentification par mot de passe

La directive AuthBasicProvider (AuthDigestProvider) permet d’indiquer le fournisseur utilisé pour identifier et authentifier les utilisateurs.

mod_authn_file : les utilisateurs et les mots de passe sont stockés dans un fichier texte.

AuthBasicProvider file

mod_authn_dbm : les utilisateurs et les mots de passe sont stockés dans un fichier dbm.

AuthBasicProvider dbm

mod_authn_dbd : les utilisateurs sont stockés au niveau d’une base de données

AuthBasicProvider dbd

mod_authnz_ldap : les utilisateurs sont stockés au niveau d’un annuaire LDAP

AuthBasicProvider ldap

Page 56: APACHE HTTP

ConfigurationAuthentification par mot de passe

Les directives d’authentification sont insérés soit au sein de la section <Directory>, soit au sein des fichiers .htaccess

Pour l'utilisation de fichiers .htaccess, ne pas oublier d’utiliser la directive AllowOverride, qui spécifie quelles directives pourront éventuellement être redéfinie.

AllowOverride AuthConfig

Page 57: APACHE HTTP

ConfigurationAuthentification par mot de passe

# htpasswd -c /path/to/passwordFile userNameNew password: mot-de-passeRe-type new password: mot-de-passeAdding password for user userName

<Directory /var/www/html/private>AuthName ‘user and password please !.’AuthType BasicAuthBasicProvider fileAuthUserFile /path/to/passwordFile Require valid-user

</Directory>

Page 58: APACHE HTTP

ConfigurationAuthentification par mot de passe

<Directory /www/docs/private>AuthName "Private« AuthType BasicAuthBasicProvider file ldapAuthUserFile /usr/local/apache/passwd/passwords AuthLDAPURL ldap://ldaphost/o=yourorg AuthGroupFile /usr/local/apache/passwd/groups Require group GroupName Require ldap-group cn=mygroup,o=yourorg

</Directory>

Page 59: APACHE HTTP

ConfigurationAuthentification par mot de passe

# configuration de mod_dbd DBDriver pgsql DBDParams "dbname=apacheauth user=apache pass=xxxxxx" DBDMin 4 DBDKeep 8 DBDMax 20 DBDExptime 300

<Directory /usr/www/mon.site/team-private/> # configuration de mod_authn_core et mod_auth_basic pour mod_authn_dbd

AuthType Basic AuthName Team AuthBasicProvider dbd

# requête SQL de mod_authn_dbd pour authentifier un utilisateur qui se connecte AuthDBDUserPWQuery \ "SELECT password FROM authn WHERE user = %s AND login = 'true'"

Page 60: APACHE HTTP

ConfigurationAuthentification par mot de passe

# le processus de connexion dbd exécute une requête pour enregistrer la connexion de l'utilisateur

Require dbd-login AuthzDBDQuery "UPDATE authn SET login = 'true'

WHERE user = %s"

# configuration de mod_authz_core pour mod_authz_dbd Require dbd-group team

# configuration de mod_authz_dbd AuthzDBDQuery "SELECT group FROM authz WHERE user = %s"

# lorsqu'un utilisateur échoue dans sa tentative d'authentification ou # d'autorisation, on l'invite à se connecter ; cette page doit # contenir un lien vers /team-private/login.html

ErrorDocument 401 /login-info.html <Files login.html>

Page 61: APACHE HTTP

ConfigurationAuthentification par mot de passe

# il n'est pas nécessaire que l'utilisateur soit déjà connecté ! AuthDBDUserPWQuery "SELECT password FROM authn

WHERE user = %s" # redirige l'utilisateur vers la page d'origine (si elle existe) après une

connexion réussie AuthzDBDLoginToReferer On

</Files> <Files logout.html>

# le processus de déconnexion dbd exécute une requête pour enregistrer la déconnexion de l'utilisateur

Require dbd-logout AuthzDBDQuery "UPDATE authn SET login = 'false'

WHERE user = %s" </Files>

</Directory>

Page 62: APACHE HTTP

ConfigurationAuthentification par mot de passe & SSL

La 1er étape pour intégrer du SSL est de charger le module ssl_module

LoadModule ssl_module modules/mod_ssl.so

SSLVerifyClient noneSSLCACertificateFile path/ssl.crt/ca.crtSSLCACertificatePath path/ssl.crt

<Directory /usr/local/apache2/htdocs/secure/area>SSLVerifyClient requireSSLVerifyDepth 5SSLOptions +FakeBasicAuthSSLRequireSSLAuthName "Authentication" AuthType BasicAuthBasicProvider fileAuthUserFile /usr/local/apache2/conf/httpd.passwdRequire valid-user

</Directory>

Page 63: APACHE HTTP

Proxy

Le serveur Apache est capable le rôle d’un proxy au sein d’une architecture réseau que ce soit en tant que proxy directe ou bien en tant que reverse proxy (frontal ou passerelle).

Proxy Directe : Serveur intermédiaire qui s'intercale entre le client et le serveur demandé. Pour obtenir un contenu hébergé sur un serveur externe, le client envoie sa requête au proxy en nommant le serveur demandé comme cible, c’est le proxy qui est responsable de contacter le serveur cible, de récupérer le contenu depuis le serveur demandé et de le renvoiyer vers le client.

Reverse proxy : apparaît au client comme étant le serveur web qui héberge le contenu. Et c’est ce dernier qui sait où renvoyer les requêtes clients pour récupérer le contenu et le renvoyer client comme s'il l'hébergeait lui-même.

Page 64: APACHE HTTP

Proxy

Page 65: APACHE HTTP

Proxy

Page 66: APACHE HTTP

Proxy

Le module mod_proxy est le responsable des fonctionnalités proxy du serveur APACHE

Proxy directe : Directive ProxyRequests active le proxy directe Directive ProxyVia, elle est est optionnel, elle indique au serveur de

mettre à jour l’entete HTTP « via » pour indiquer le chemin suivi par la requête

ProxyRequests On ProxyVia On# ne permettre l’utilisation du proxy que pour les machines locaux<Proxy *>

Require ip 182.125

</Proxy>

Page 67: APACHE HTTP

Proxy

Reverse Proxy : Directive ProxyPass active le reverse proxy, elle associe une

location au niveau local à une adresse distante Directive ProxyPassReverse nécessaire lors de l’activation du

reverse proxy, elle force le serveur à ajuster les entêtes HTTP location et URI afin d’éviter de court-circuiter le reverse proxy lors des redirections dans le serveur distant.

ProxyPass /mirror/foo http://foo.example.com/barProxyPassReverse /mirror/foo http://foo.example.com/bar

<Location /mirror/foo>ProxyPass http://foo.example.com/barProxyPassReverse http://foo.example.com/bar

</Location>

Page 68: APACHE HTTP

Répartition de charge

La répartition de charge (load balancing) est un ensemble de techniques permettant de distribuer une charge de travail entre différents ordinateurs d'un groupe.

L’activation de la répartition de charge nécessite le chargement des modules mod_proxy, mod_proxy_balancer, et l’un des modules suivant pour l’algorithme de planification de la répartition

mod_lbmethod_byrequests : nombre de requêtes mod_lbmethod_bytraffic : taille du trafic mod_lbmethod_bybusyness : requêtes en attente mod_lbmethod_heartbeat : comptage de trafic Heartbeat,

nécessite le mod_heartbeat et mod_heartmonitor au niveau des membres

Page 69: APACHE HTTP

Répartition de charge

La directive BalancerMember définit les nœuds qui participent à la répartition de charge

Le paramètre lbmethod indique quel algorithme est utilisé pour la répartition

<Proxy balancer://mycluster>BalancerMember http://192.168.1.50:80BalancerMember http://192.168.1.51:80ProxySet lbmethod=bytraffic

</Proxy> ProxyPass /test balancer://mycluster ProxyPassReverse /test balancer://mycluster

Page 70: APACHE HTTP

Répartition de charge

Répartition de charge avec abonnement :

ProxyPass /test balancer://mycluster stickysession=JSESSIONID|jsessionid scolonpathdelim=On

ProxyPassReverse /test balancer://mycluster <Proxy balancer://mycluster>

BalancerMember http://192.168.1.50:80 route=node1BalancerMember http://192.168.1.51:80 route=node2

</Proxy>

Au niveau des serveurs membres :ProxyPass route=node1

ProxyPass route=node2

Page 71: APACHE HTTP

Répartition de charge

Apache fournit un module pour pouvoir gérer le répartiteur de charge de façon dynamique via un gestionnaire.

1. Activer le module mod_status2. Au niveau de fichier de config :

<Location /balancer-manager>SetHandler balancer-manager

Require host serveur</Location>

3. Accéder au gestionnaire sur l’url http://serveur/balancer-manager

Page 72: APACHE HTTP

Règles pour la performance et la sécurité

Ne Jamais exécuter Apache comme root de la machine Utiliser un utilisateur dédié Utilisateur sans shell Utilisateur sans mot passe valide

Désactiver les modules qui ne sont pas utilisés Si l’accès à des dossiers n’est pas nécessaire, désactiver le

module mod_autoindex

Faire attention aux modules et directives CGI et SSI, ne les configurer que pour les ressources qui ont en besoin

(jamais au niveau serveur)

Ne garder que les directives Listen qui sont actives

Page 73: APACHE HTTP

Règles pour la performance et la sécurité

Nettoyer le fichier de config, vérifier les directives include et supprimer ceux qui ne sont pas necessaire.

Éviter d’utiliser les fichiers de configurations distribués .htaccess préférer la directive Directory au niveau du fichier de

configuration

Bien étudier la politique d’activation des modules (statique / dynamique) L’activation statique sollicite la mémoire de la machine L’activation dynamique sollicite le processeur de la

machine

Page 74: APACHE HTTP

Règles pour la performance et la sécurité

Utiliser le module mod_cache pour accélérer le rendu du contenu dynamique

Le niveau de journalisation doit être bien étudié un niveau trop fin engendre des écritures qui ne

sont nécessaires.

Les journaux doivent être situé dans un disk autre que le disk apache

Utiliser la journalisation par programme que par fichier directe

Page 75: APACHE HTTP

Atelier

1. Configurer un serveur Apache avec 2 hôtes virtuels par nom

1. Le 1er nécessite une authentification, utiliser mdb comme provider1. Le sous dossier /private, ne doit être accessible que

pour l’utilisateur specialUser2. Activer Customlog au niveau de cet hôte

2. Le 2éme est à accès public, est accepte les directives SSI

3. Bloquer l’accés au site par défaut du serveur.

2. Configurer un cluster avec 3 serveur, 1 proxy reverse et 2 serveurs membres.