[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Control Parental [tutorial]



Le vendredi 28 avril 2006 à 00:16 +0200, Sylvain Sauvage a écrit :

> > Cette solution n'est pas présentée ici, car je n'ai pour l'instant
> > pas réussi à la faire fonctionner avec tinyproxy.
> > On supposera donc que les utilisateurs du filtrage n'ont
> > pas les compétences nécessaires pour désactiver le proxy
> > dans le navigateur web...
> 
> Comme le sujet m'intéresse en ce moment et que j'avais un peu de temps,
> j'ai réfléchi :
> 
>   Le principe est d'utiliser iptables pour rediriger les paquets allant
> vers un site oueb vers tinyproxy mais de permettre aux paquets de
> tinyproxy de passer.
>   Les règles habituelles de proxy transparent se font en PREROUTING,
> c'est-à-dire à l'entrée des paquets dans le routeur. Sauf que là, on est
> en local, donc les paquets n'entrent pas sur la machine, ils y sont créés
> et en sortent directement. Donc, il nous reste les OUTPUT et les
> POSTROUTING. Mais le pré-routage utilisé habituellement permet de ne pas
> toucher les programmes locaux. Il faut trouver une façon de différencier
> les paquets provenant de tinyproxy des autres paquets (ceux de firefox et
> autres).
>   Iptables propose le module owner pour vérifier qui envoie des paquets.
>   Ce module avait une option « --cmd-owner » qui permettait de vérifier
> le nom du programme générant les paquets. Dommage, cette option a été
> supprimée. Mais il nous reste l'option « --uid-owner ».
> 
>   Essayons ces règles :
> 
> # permettons à tinyproxy de sortir
> iptables -t nat -A OUTPUT -p tcp --dport www \
>          -m owner --uid-owner nobody         \
>          -j LOG --log-prefix "paquets de tinyproxy" --log-level notice
> iptables -t nat -A OUTPUT -p tcp --dport www \
>           -m owner --uid-owner nobody -j ACCEPT
> # redirigeons les autres vers tinyproxy
> iptables -t nat -A OUTPUT -p tcp --dport www \
>          -j LOG --log-prefix "autres progs" --log-level notice
> iptables -t nat -A OUTPUT -p tcp --dport www -j REDIRECT --to-port 8888
> 
> (J'ai laissé l'utilisateur nobody le port 8888 pour tinyproxy.)
> 
> (
>  Dans une utilisation normale, on peut sûrement éviter les LOG.
>  Par contre, ils sont très intéressants pour comprendre HTTP...
> )
> 
>   Problème : ça à l'aire de fonctionner au niveau iptables mais tinyproxy
> renvoie des erreurs : il ne sait pas faire du proxy transparent.
>   Il faut recompiler tinyproxy avec l'option --enable-transparent-proxy.
> 
>   Donc : apt-get source tinyproxy, édition de debian/rules pour ajouter
>     --enable-transparent-proxy sur la ligne « configure ... »,
>     $ debuild -uc -us --rootcmd fakeroot
>   puis installation du .deb : # dpkg -i tinyproxy*.deb
> 
> Et voilà. Youpi.
> 
> (
> On peut le vérifier avec :
>  $ telnet localhost 80
>  GET http://localhost/ HTTP/1.1
> 
> on voit bien : « Via: 1.1 tinyproxy (tinyproxy/1.6.3) » comme premier
> en-tête.
>   (On peut remplacer localhost par n'importe quel serveur/ip...)
> )
> 
> Améliorations possibles : créer un utilisateur tinyproxy (nobody n'est
> pas une super idée : d'autres s'en servent, root non plus : il a trop de
> droits).
> Et sans doute d'autres...
> 
> (Pfiou presque aussi long à décrire qu'à faire...)
> 
> -- 
>  Sylvain Sauvage
> 
> 

Merci, c'est très intéressant. Je vais intégrer ces informations
dans le tutoriel :-)
Mon seul regret est que ça devient très technique, et un peu
hors de portée d'un utilisateur moyen qui veut juste installer
facilement un filtrage. L'idéal serait de créer un package
debian intégrant la solution complète, avec peut-être
une petite interface graphique pour configurer facilement.
Quand j'aurais un peu de temps... J'espère que tu ne m'en voudras
pas si je te pose quelques questions, vu ta maîtrise
sur iptables ;-)

Pascal



Reply to: