SwiftSurf

| # SwiftSurf # Proxy web intelligent |

SwiftSurf est un proxy web qui peut être utilisé pour les protocoles http (1.0 et 1.1) et https. Il permet de plus de filtrer les pages acceptées et de limiter l'accès grâce à des mots de passe ou en fonction de l'adresse IP.

## Télécharger la dernière version (Change Log)

Voici le lien vers la page de téléchargement. Elle contient le code source ainsi que des versions précompilées pour certaines architectures.

Si vous compilez swiftsurf pour une autre architecture, merci de m'envoyer le programme compilé à l'aide de buid_tgz.sh.

## Compilation et utilisation

La compilation se fait tout simplement tapant "gmake" dans le repertoire obtenu après décompression. Il est indispensable d'avoir un compilateur ocaml correctement installé. En cas de problème, par exemple si vous ne disposez pas de compilateur natif pour ocaml, vous pouvez essayer "gmake byte", qui construit un programme bytecode au lieu d'un programme natif.

Pour installer swiftsurf sur votre machine, passez root (avec su) et tapez "gmake install".

Il convient ensuite de configurer votre navigateur pour qu'il utilise swiftsurf. Avec Netscape ou Mozilla, allez dans Edit->Preferences->Advanced->Proxies, sélectionner "Manual proxy configuration" et indiquer localhost avec le port 8080 comme proxy pour http et https.

Swiftsurf se lance ensuite avec la commande swiftsurf, qui accepte les options suivantes :

- -c conf_file : permet de définir le fichier de configuration à utiliser. Par défaut, swiftsurf cherche le fichier de configuration parmi les fichiers suivants : $HOME/.swiftsurf, /etc/swiftsurf.conf, ./swiftsurf.conf, /dev/null.
- -d : mode daemon
- -help : affiche la liste des options disponibles.

## Présentation

### a. Vocabulaire

- Proxy : Intermédiaire entre votre browser (Netscape par exemple) et Internet. Le browser demande au proxy les pages qu'il veut récupérer, et ce dernier se charge d'aller les chercher sur internet et renvoie la réponse au browser.
- http : hyper text transfer protocol : langage utilisé sur internet pour transferer les pages html.
- https : secure http : protocole sécurisé qui permet des transmissions sûres sur internet.
- filtrant : Permet de censurer certaines pages ou de les modifier avant qu'elle ne soit affichées dans le browser. Permet aussi d'empêcher que certaines informations personnelles ne soit diffusées sur internet.

### b. Intérêt du filtrage

- Censure : il est possible de filtrer les urls contenant sex, xxx ou autres.
- Confort : Supprimer des pages web toutes les publicités qui détournent l'attention.
- Accélération du chargement des pages : Les pages html contiennent beaucoup d'informations inutiles (publicités en particulier). Ne pas les télécharger permet de gagner un temps précieux, en particulier si l'on a un accès internet par l'intermédiaire d'un modem, dont le débit est généralement assez lent.
- Non diffusion d'informations personnelles. Il est possible de filtrer toutes les informations envoyées par votre browser vers les sites internet, pour éviter par exemple que celui-ci n'envoie votre nom ou toute autre information personnelle.
- Surveiller toutes les informations que votre browser échange avec l'extérieur.

NB: le filtre agit ici sur l'url (nom de la page), mais pas sur son contenu. Ceci cependant est suffisant dans un premier temps car l'url reflète souvent le contenu de la page.

## Configuration

Toute la configuration de SwiftSurf se fait au moyen du fichier de configuration . Les commentaires commencent par le symbole # et s'étendent jusqu'à la fin de la ligne.
Par défaut, la liste des urls interdites se trouve dans le fichier swiftsurf.forb. C'est donc ce fichier qui est à modifier en priorité.
Pour voir un fichier de configuration complexe, consulter swiftsurf.conf.school.

### Configurations générales

Une première partie des options de configurations concerne toutes les connexions avec le proxy (Tous les mots clefs peuvent indifféremment être écrits en minuscules ou en majuscules) :

- port : port sur lequel le proxy tourne.
- logFile : nom du fichier dans lesquels seront écrits les log (par défaut, ils sont affichés sur stdout)
- connectFrom : adresses depuis lesquelles il est autorisé de se connecter (sous forme de redex).
- nextProxy : Si les requêtes doivent être redirigées vers un autre proxy, donner son nom et le port sur lequel on se connecte (ex : www 8080). Un troisième argument optionnel fournit l'authentication pour le proxy, sous la forme user:passwd.
- noProxy : Utile seulement si nextProxy est activé : indique une liste de serveurs auxquels on peut accéder directement (ie sans utiliser le proxy suivant). Un item de cette liste peut contenir des caractères jokers (* ou ?). Cette liste peut (optionnellement) se terminer par end (pour la clarté du fichier).
- mimeType : Permet de définir une association entre une extension et un type mime, utile si votre navigateur ne reconnaît pas le type de votre document de remplacement.
- forbiddenReqHeader : début de la liste des headers http qui sont interdits pour la requête. Tout header qui coincide avec un élément de cette liste est supprimé. Ceci est un moyen efficace de s'assurer par exemple qu'aucun cookie n'est utilisé.
- forbiddenAnsHeader : idem pour les headers de la réponse.
- addReqHeader : ajoute un header à toutes les requêtes envoyées au serveur. La norme http exige que cet header soit de la forme "xxxx: yyyyyyy", où les x ne doivent être ni un espace, ni ":", ni un passage à la ligne, alors que les y peuvent être n'importe quoi sauf un passage à la ligne.
- addAnsHeader : ajoute un header à toutes les réponses renvoyée à l'utilisateur. La norme http exige que cet header soit de la forme "xxxx: yyyyyyy", où les x ne doivent être ni un espace, ni ":", ni un passage à la ligne, alors que les y peuvent être n'importe quoi sauf un passage à la ligne.
- overrideUseragent : change le champ User-Agent des headers (ce champ donne le nom du navigateur). Ceci peut-être utile pour contourner les politiques d'accès de certains sites, comme msn.com (ex : overrideUseragent Mozilla/4.76).
- timeout : timeout pour une connection inactive (defaut 30 : sec). une valeur de 0 met un timeout infini.
- maxConns : nombre maximum de connections simultanées autorisées (defaut : infini).
- stats : entier indiquant quel niveau de statistique est désiré : 0 signifie rien, 1 signifie afficher toute les urls demandées en indiquant si elles sont acceptées ou refusées, 2 rajoute en plus la date, l'heure et l'adresse ip du client de la requête.
- debug : indique le niveau de debug souhaité (entier positif). 0 signifie qu'il ne faut afficher aucune information de deboguage. Si vous voulez me signaler un bug, merci de m'indiquer l'output du programme avec debug 2.

### Utilisation de profil

Avec SwiftSurf, il est possible de définir plusieurs profils d'utilisateurs (selon les accès autorisés par exemple). Pour ce faire on définit un ou plusieurs profils de la façon suivante :

    profile login:pass
      profOpt1
      profOpt2 ...
    endProfile

Il est aussi possible de ne définir aucun profil (ce qui évite d'avoir à donner un mot de passe pour se connecter).
Les options possibles pour un profile (profOpt dans l'exemple ci-dessus) sont les suivantes :

- forbiddenFile : donne le nom d'un fichier qui contient une liste d'urls interdites suivie du nom d'un fichier contenant une image à utiliser pour remplacer les documents interdits. Si le nom de l'image est "default" (ou n'est pas spécifié), swiftsurf utilise un petit carré vert comme image. Il est aussi possible de donner un nom de couleur (white, blue, transparent, green, red, orange, black, yellow ou gray). Si vous utilisez un document avec un type esotérique, il peut etre utile de faire une association entre son association et son type mime (avec l'option mimeType décrite ci-dessus).
- forbiddenUrl : debut d'une liste d'urls à interdire : Un item de cette liste peut contenir des caractères jokers (* ou ?). Ces urls seront remplacées par une image de votre choix. Cette liste doit se terminer par end et est suivie du nom d'un fichier contenant une image à utiliser pour remplacer les documents interdits (ou default ou une couleur comme pour forbiddenFile).
- allowedUrl : début de la liste des urls autorisées : si ce champ existe dans le fichier de configuration, seules les urls qui correspondent à l'un des éléments de la liste sont affichées. Les autres sont traitées comme les "forbidden". Par défaut, toutes les urls sont autorisées. Cette liste doit se terminer par end et est suivie du nom d'un fichier contenant une image à utiliser pour remplacer les documents interdits (ou default ou une couleur comme pour forbiddenFile).
- allConnect : autorise les connections https sur tous les ports (defaut : uniquement le port 443).
- noConnect : interdit https.
- methods : donne une liste (terminée par end) des méthodes autorisées. Par défaut, cette liste est vide, ce qui autorise toutes les méthodes (GET, POST, HEAD, PUT, DELETE...).
- request : permet d'afficher tout ou partie de la requête envoyée au serveur. Le nombre indiqué est la somme des entiers suivants : 1 si l'on veut afficher les headers et 2 pour afficher le contenu (method POST).
- answer : permet d'afficher tout ou partie de la réponse renvoyée au browser. Le nombre indiqué est la somme des entiers suivants : 1 pour afficher les headers et 2 pour afficher le contenu (le document demandé).

## A faire

- Comprendre les requête FTP
- Ajouter un cache pour les pages html
- Faire du prefetching

sebastien@ailleret.com home page |