« Proxy » : différence entre les versions

De Justine's wiki
Aller à la navigation Aller à la recherche
(Page créée avec « = Introduction aux proxies = Proxy signifie, de façon littérale en anglais, "on behalf of", soit "par procuration" : un serveur proxy est simplement un serveur qui eff... »)
 
Aucun résumé des modifications
Ligne 2 : Ligne 2 :
= Introduction aux proxies =
= Introduction aux proxies =


Proxy signifie, de façon littérale en anglais, "on behalf of", soit "par procuration" : un serveur proxy est simplement un serveur qui effectue des requêtes pour quelqu'un d'autre. On traduit parfois le terme en français par "Serveur Mandataire". Ils servent en général d'intermédiaire entre le réseau interne et l'extérieur; il pourra être placé dans la DMZ.
Proxy signifie, de façon littérale en anglais, "on behalf of", soit "par procuration" : un serveur proxy est simplement un serveur qui effectue des requêtes pour quelqu'un d'autre. On traduit parfois le terme en français par "Serveur Mandataire". Ils servent en général d'intermédiaire entre le réseau interne et l'extérieur; il pourra être placé dans la DMZ.


== Utilité ==
== Utilité ==


Le rôle premier d'un proxy est de partager l'accès aux réseaux internes (le plus souvent, il s'agit d'Internet). Les proxies sont des intermédiaires entre les utilisateurs du réseau interne et l'extérieur. Pour les serveurs externes, toutes les requêtes sembleront émaner d'une seule et même machine, le proxy. À première vue, cela ressemble beaucoup à un routeur ! Mais un proxy a d'autres vocations :
Le rôle premier d'un proxy est de partager l'accès aux réseaux internes (le plus souvent, il s'agit d'Internet). Les proxies sont des intermédiaires entre les utilisateurs du réseau interne et l'extérieur. Pour les serveurs externes, toutes les requêtes sembleront émaner d'une seule et même machine, le proxy. À première vue, cela ressemble beaucoup à un routeur ! Mais un proxy a d'autres vocations :


*Rationnaliser la bande passante : c'est la fonction de cache  
*Rationnaliser la bande passante : c'est la fonction de cache  
*Contrôler les accès  
*Contrôler les accès  
*Compresser les données  
*Compresser les données  
Ligne 20 : Ligne 20 :
== La fonction Cache ==
== La fonction Cache ==


Un des avantages du proxy est de fournir un cache de données : il garde en mémoire les pages visitées et les ressert aux clients. Ce mécanisme sert à limiter les besoins en bande passante. Dans ce cas, aucune connexion vers l'extérieur n'est établie.
Un des avantages du proxy est de fournir un cache de données : il garde en mémoire les pages visitées et les ressert aux clients. Ce mécanisme sert à limiter les besoins en bande passante. Dans ce cas, aucune connexion vers l'extérieur n'est établie.


== La fonction de contrôle d'accès ==
== La fonction de contrôle d'accès ==
Ligne 28 : Ligne 28 :
== Quels protocoles utilisent des proxies? ==
== Quels protocoles utilisent des proxies? ==


Les proxies peuvent être utilisés par différentes applications, mais il en existe différentes sortes :
Les proxies peuvent être utilisés par différentes applications, mais il en existe différentes sortes :


*HTTP/HTTPS  
*HTTP/HTTPS  
Ligne 39 : Ligne 39 :


Il existe également des proxies utilisant le protocole SOCKS, qui permet d'encapsuler à peu près n'importe quoi.
Il existe également des proxies utilisant le protocole SOCKS, qui permet d'encapsuler à peu près n'importe quoi.
<pdf>Fichier:ProtocoleSocks.pdf</pdf>
= Présentation des proxies web =
Les proxies web sont les plus répandus. De base, ils servent à relayer les requêtes HTTP et HTTPS des applications clientes configurées pour le proxy. Mais ils peuvent cependant servir aussi à :
*Faire de la mise en cache
*Contrôler les accès
*Authentifier les clients
*Compresser les données
*Gérer l'anonymat
*Loguer les connexions
La durée de mise en cache des données est définie dans la configuration du proxy.
== Authentification des clients ==
Si l'authentification des clients est requise, les utilisateurs devront se connecter avant de pouvoir accéder aux ressources web. Cela peut se faire selon différentes méthodes :
*NTLM/SMB : Authentification transparente pour les postes Windows du domaine (Windows NT ou Samba3). Les informations de session sont utilisées pour l'authentification auprès du proxy; les comptes sont stockés sur le contrôleur de domaine.
*Kerberos / NTLM : Autre type d'authentification transparente pour les poste Windows du domaine Active Directory ou Samba4. Les comptes sont stockés là aussi sur le contrôleur de domaine.
*Authentification LDAP : Les comptes sont stockés dans un annuaire LDAP/OpenLDAP.
*Authentification MySQL : Les comptes utilisateurs sont stockés dans une base de données MySQL.
*Authentification Locale : Les comptes utilisateur sont stockés dans un fichier local ou dans la base d'utilisateurs locaux.
Les informations de connexion seront demandées à l'utilisateur si celles-ci ne peuvent pas être récupérées; le proxy renverra une erreur HTTP 407 (Proxy Authentication Required) si l'utilisateur n'est pas authentifié.
== Types de proxies pour le web ==
Il existe différents types de proxies pour HTTP/HTTPS :
*Les proxies classiques, avec lesquels les clients doivent être configurés pour utiliser le proxy
*Les proxies transparents : Pas de configuration côté client, mais il nécessite un peu de configuration de la part des administrateurs réseaux. La passerelle ne doit pas accepter les paquets sur les ports 80/443 mais rediriger vers le proxy.
*Les reverse-proxies : Ces proxies permettent d'accéder à des serveurs du réseau local depuis Internet : ils agissent dans le sens inverse des proxies classiques.
À partir d'ici, on parlera de proxies classiques.
== Configuration des clients ==
En mode classique, les applications clientes doivent être configurées pour utiliser le proxy. Le port généralement utilisé pour HTTP/HTTPS est TCP 8080, bien qu'on puisse prendre n'importe quel port > 1023 (Squid utilise par défaut TCP 3128). On a plusieurs méthodes pour configurer les clients :
*Configuration manuelle : Le nom d'hôte ou l'adresse IP et le port doivent être renseignés dans l'application cliente. Les IP ou domaines à exclure sont à préciser manuellement, et on ne pas utiliser plusieurs proxies de façon native.
*Configuration automatique : l'url du fichier .PAC (Proxy Auto Config) doit être renseignée. Les clients récupèreront les paramètres de configuration automatiquement. Si le fichier est introuvable, la plupart des clients fonctionnent en mode DIRECT, c'est-à-dire sans proxy.
*Détection Automatique : il s'agit du WPAD, soit Web Proxy Auto Discovery. Pour cette méthode, il faudra :
**Un serveur http nommé wpad.<mon_domaine.tld>, en mesure de fournir un fichier proxy.pac ou wpad.dat.
**Pour que le client trouve ce fichier, plusieurs choix :
***Une option spécifique envoyée au client DHCP
***Une résolution DNS.   
Lorsque les clients sont configurés pour utiliser le proxy, ils n'effectuent plus les requêtes DNS pour les sites visités (c'est le proxy qui s'en charge).
== Les fichiers de configuration automatique ==
On peut créer un fichier de configuration du proxy pour les clients afin de centraliser la gestion des clients. Ce fichier est hébergé sur un serveur web et les logiciels client doivent être configurés pour utiliser l'url du fichier .pac pour la configuration automatique. L'url est sous la forme protocole://monsite.mondomaine/ (par exemple : http://proxy.config.mondomaine/proxy.pac).
Le fichier .PAC permet de définir plus en détails le comportement du client : on peut ainsi choisir d'utiliser tel ou tel proxy en fonction du site web, voire même indiquer un proxy de secours. Le fichier .PAC est écrit en JavaScript, mais seules quelques fonctions sont disponibles. La plupart des navigateurs ira chercherpar défaut la fonction FindProxyForUrl(). L'inconvénient majeur des fichier .PAC est l'absence de confiance en l'adresse IP source de l'expéditeur.
=== Exemple pour firefox v47 ===
Pour Firefox, la configuration se fait par le menu Options > Avancé > Réseau. Il faut ensuite modifier les paramètres de connexion puis spécifier l'adresse de configuration automatique du proxy avec le port.
=== Exemple de fichier .PAC ===
<pre>/**
* Exemple extrait du site http://findproxyforurl.com/example-pac-file/
**/
function FindProxyForURL(url, host) {
    // If the hostname matches, send direct.
    // Si le domaine est intranet.domain.com OU
    // Si le domaine est abcdomain.com
    // On renvoie DIRECT (= connexion directe sans proxy)
    if (dnsDomainIs(host, "intranet.domain.com") ||
        shExpMatch(host, "(*.abcdomain.com|abcdomain.com)"))
        return "DIRECT";
 
    // If the protocol or URL matches, send direct.
    // Si protocole = FTP OU url commence par http://abcdomain.com/folder/
    // On renvoie DIRECT
    if (url.substring(0, 4)=="ftp:" ||
        shExpMatch(url, "http://abcdomain.com/folder/*"))
        return "DIRECT";
    // If the requested website is hosted within the internal network, send direct.
    // Si le site demande est heberge sur le reseau local, on renvoie DIRECT
    if (isPlainHostName(host) ||
        shExpMatch(host, "*.local") ||
        isInNet(dnsResolve(host), "10.0.0.0", "255.0.0.0") ||
        isInNet(dnsResolve(host), "172.16.0.0", "255.240.0.0") ||
        isInNet(dnsResolve(host), "192.168.0.0", "255.255.0.0") ||
        isInNet(dnsResolve(host), "127.0.0.0", "255.255.255.0"))
        return "DIRECT";
    // If the IP address of the local machine is within a defined
    // subnet, send to a specific proxy.
    // Pour les clients du reseau 10.10.5.0/24,
    // On renvoie le proxy specifique a utiliser d'IP:PORT 1.2.3.4:8080
    if (isInNet(myIpAddress(), "10.10.5.0", "255.255.255.0"))
        return "PROXY 1.2.3.4:8080";
    // DEFAULT RULE: All other traffic, use below proxies, in fail-over order.
    // Sinon regle par defaut, on renvoie 2 proxys a utiliser
    // 1- Proxy avec l'IP:PORT 4.5.6.7:8080
    // 2- Proxy avec l'IP:PORT 7.8.9.10:8080
    return "PROXY 4.5.6.7:8080; PROXY 7.8.9.10:8080";
}</pre>
&nbsp;
Toutes les fonctions des fichiers .PAC sont disponibles ici : http://findproxyforurl.com/pac-functions/
Plus d'informations sur les proxies et les trames qu'ils utilisent : http://www.forensicswiki.org/wiki/Proxy_server


&nbsp;
&nbsp;

Version du 15 janvier 2019 à 17:46

Introduction aux proxies

Proxy signifie, de façon littérale en anglais, "on behalf of", soit "par procuration" : un serveur proxy est simplement un serveur qui effectue des requêtes pour quelqu'un d'autre. On traduit parfois le terme en français par "Serveur Mandataire". Ils servent en général d'intermédiaire entre le réseau interne et l'extérieur; il pourra être placé dans la DMZ.

Utilité

Le rôle premier d'un proxy est de partager l'accès aux réseaux internes (le plus souvent, il s'agit d'Internet). Les proxies sont des intermédiaires entre les utilisateurs du réseau interne et l'extérieur. Pour les serveurs externes, toutes les requêtes sembleront émaner d'une seule et même machine, le proxy. À première vue, cela ressemble beaucoup à un routeur ! Mais un proxy a d'autres vocations :

  • Rationnaliser la bande passante : c'est la fonction de cache
  • Contrôler les accès
  • Compresser les données
  • Anonymiser les données
  • Pour les particuliers, il peut servir à contourner certains filtrages d'état (en Chine, par exemple).

Principe de fonctionnement

Le fonctionnement de base est simple, c'est un serveur qui relaie les requêtes et renvoie les réponses aux clients. Ainsi, pour une application donnée qui utilise le proxy, le client ne s'adresse qu'au proxy, celui-ci relayant les requêtes et les réponses.

La fonction Cache

Un des avantages du proxy est de fournir un cache de données : il garde en mémoire les pages visitées et les ressert aux clients. Ce mécanisme sert à limiter les besoins en bande passante. Dans ce cas, aucune connexion vers l'extérieur n'est établie.

La fonction de contrôle d'accès

Les proxies sont capables d'appliquer des règles de contrôle d'accès, généralement appellées ACL (Access Control Lists), permettant de bloquer l'accès à certaines ressources. Le filtrage peut être appliqué en fonction de la source, de la destination, ou bien du protocole; les proxies peuvent aussi identifier les utilisateurs ou les machines sources, afin de contrôler qui accède à quoi. Ils peuvent interroger des services d'annuaire afin d'appliquer des règles de filtrage basées sur des groupes d'utilisateurs / de machines. En cas d'interdiction d'accès, on peut renvoyer un message d'erreur avec une explication, ou bien même une autre ressource.

Quels protocoles utilisent des proxies?

Les proxies peuvent être utilisés par différentes applications, mais il en existe différentes sortes :

  • HTTP/HTTPS
  • IMAP
  • SSH
  • FTP
  • SIP
  • ARP
  • etc...

Il existe également des proxies utilisant le protocole SOCKS, qui permet d'encapsuler à peu près n'importe quoi.

<pdf>Fichier:ProtocoleSocks.pdf</pdf>

Présentation des proxies web

Les proxies web sont les plus répandus. De base, ils servent à relayer les requêtes HTTP et HTTPS des applications clientes configurées pour le proxy. Mais ils peuvent cependant servir aussi à :

  • Faire de la mise en cache
  • Contrôler les accès
  • Authentifier les clients
  • Compresser les données
  • Gérer l'anonymat
  • Loguer les connexions

La durée de mise en cache des données est définie dans la configuration du proxy.

Authentification des clients

Si l'authentification des clients est requise, les utilisateurs devront se connecter avant de pouvoir accéder aux ressources web. Cela peut se faire selon différentes méthodes :

  • NTLM/SMB : Authentification transparente pour les postes Windows du domaine (Windows NT ou Samba3). Les informations de session sont utilisées pour l'authentification auprès du proxy; les comptes sont stockés sur le contrôleur de domaine.
  • Kerberos / NTLM : Autre type d'authentification transparente pour les poste Windows du domaine Active Directory ou Samba4. Les comptes sont stockés là aussi sur le contrôleur de domaine.
  • Authentification LDAP : Les comptes sont stockés dans un annuaire LDAP/OpenLDAP.
  • Authentification MySQL : Les comptes utilisateurs sont stockés dans une base de données MySQL.
  • Authentification Locale : Les comptes utilisateur sont stockés dans un fichier local ou dans la base d'utilisateurs locaux.

Les informations de connexion seront demandées à l'utilisateur si celles-ci ne peuvent pas être récupérées; le proxy renverra une erreur HTTP 407 (Proxy Authentication Required) si l'utilisateur n'est pas authentifié.

Types de proxies pour le web

Il existe différents types de proxies pour HTTP/HTTPS :

  • Les proxies classiques, avec lesquels les clients doivent être configurés pour utiliser le proxy
  • Les proxies transparents : Pas de configuration côté client, mais il nécessite un peu de configuration de la part des administrateurs réseaux. La passerelle ne doit pas accepter les paquets sur les ports 80/443 mais rediriger vers le proxy.
  • Les reverse-proxies : Ces proxies permettent d'accéder à des serveurs du réseau local depuis Internet : ils agissent dans le sens inverse des proxies classiques.

À partir d'ici, on parlera de proxies classiques.

Configuration des clients

En mode classique, les applications clientes doivent être configurées pour utiliser le proxy. Le port généralement utilisé pour HTTP/HTTPS est TCP 8080, bien qu'on puisse prendre n'importe quel port > 1023 (Squid utilise par défaut TCP 3128). On a plusieurs méthodes pour configurer les clients :

  • Configuration manuelle : Le nom d'hôte ou l'adresse IP et le port doivent être renseignés dans l'application cliente. Les IP ou domaines à exclure sont à préciser manuellement, et on ne pas utiliser plusieurs proxies de façon native.
  • Configuration automatique : l'url du fichier .PAC (Proxy Auto Config) doit être renseignée. Les clients récupèreront les paramètres de configuration automatiquement. Si le fichier est introuvable, la plupart des clients fonctionnent en mode DIRECT, c'est-à-dire sans proxy.
  • Détection Automatique : il s'agit du WPAD, soit Web Proxy Auto Discovery. Pour cette méthode, il faudra :
    • Un serveur http nommé wpad.<mon_domaine.tld>, en mesure de fournir un fichier proxy.pac ou wpad.dat.
    • Pour que le client trouve ce fichier, plusieurs choix :
      • Une option spécifique envoyée au client DHCP
      • Une résolution DNS.

Lorsque les clients sont configurés pour utiliser le proxy, ils n'effectuent plus les requêtes DNS pour les sites visités (c'est le proxy qui s'en charge).

Les fichiers de configuration automatique

On peut créer un fichier de configuration du proxy pour les clients afin de centraliser la gestion des clients. Ce fichier est hébergé sur un serveur web et les logiciels client doivent être configurés pour utiliser l'url du fichier .pac pour la configuration automatique. L'url est sous la forme protocole://monsite.mondomaine/ (par exemple : http://proxy.config.mondomaine/proxy.pac).

Le fichier .PAC permet de définir plus en détails le comportement du client : on peut ainsi choisir d'utiliser tel ou tel proxy en fonction du site web, voire même indiquer un proxy de secours. Le fichier .PAC est écrit en JavaScript, mais seules quelques fonctions sont disponibles. La plupart des navigateurs ira chercherpar défaut la fonction FindProxyForUrl(). L'inconvénient majeur des fichier .PAC est l'absence de confiance en l'adresse IP source de l'expéditeur.

Exemple pour firefox v47

Pour Firefox, la configuration se fait par le menu Options > Avancé > Réseau. Il faut ensuite modifier les paramètres de connexion puis spécifier l'adresse de configuration automatique du proxy avec le port.

Exemple de fichier .PAC

/**

 * Exemple extrait du site http://findproxyforurl.com/example-pac-file/

 **/

function FindProxyForURL(url, host) {
    // If the hostname matches, send direct.
    // Si le domaine est intranet.domain.com OU
    // Si le domaine est abcdomain.com
    // On renvoie DIRECT (= connexion directe sans proxy)
    if (dnsDomainIs(host, "intranet.domain.com") ||
        shExpMatch(host, "(*.abcdomain.com|abcdomain.com)"))
        return "DIRECT";
   
    // If the protocol or URL matches, send direct.
    // Si protocole = FTP OU url commence par http://abcdomain.com/folder/
    // On renvoie DIRECT
    if (url.substring(0, 4)=="ftp:" ||
        shExpMatch(url, "http://abcdomain.com/folder/*"))
        return "DIRECT";

    // If the requested website is hosted within the internal network, send direct.
    // Si le site demande est heberge sur le reseau local, on renvoie DIRECT
    if (isPlainHostName(host) ||
        shExpMatch(host, "*.local") ||
        isInNet(dnsResolve(host), "10.0.0.0", "255.0.0.0") ||
        isInNet(dnsResolve(host), "172.16.0.0", "255.240.0.0") ||
        isInNet(dnsResolve(host), "192.168.0.0", "255.255.0.0") ||
        isInNet(dnsResolve(host), "127.0.0.0", "255.255.255.0"))
        return "DIRECT";

    // If the IP address of the local machine is within a defined
    // subnet, send to a specific proxy.
    // Pour les clients du reseau 10.10.5.0/24,
    // On renvoie le proxy specifique a utiliser d'IP:PORT 1.2.3.4:8080
    if (isInNet(myIpAddress(), "10.10.5.0", "255.255.255.0"))
        return "PROXY 1.2.3.4:8080";

    // DEFAULT RULE: All other traffic, use below proxies, in fail-over order.
    // Sinon regle par defaut, on renvoie 2 proxys a utiliser
    // 1- Proxy avec l'IP:PORT 4.5.6.7:8080
    // 2- Proxy avec l'IP:PORT 7.8.9.10:8080
    return "PROXY 4.5.6.7:8080; PROXY 7.8.9.10:8080";
}

 

Toutes les fonctions des fichiers .PAC sont disponibles ici : http://findproxyforurl.com/pac-functions/

Plus d'informations sur les proxies et les trames qu'ils utilisent : http://www.forensicswiki.org/wiki/Proxy_server