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

Re: Control Parental [tutorial]



Jeudi 27 avril 2006, 21:39:20 CEST, Pascal Ognibene a écrit :
>[...] 
> Bonsoir,

'soir,

>[...]

Très bon didacticiel.

Note : pourquoi changer l'utilisateur lançant tinyproxy de nobody à
root ?

> 4.5 Verrouiller le filtrage
> ----------------------------
>[...] 
> Linux propose la solution iptable pour rediriger des ports
> de manière sélective, et en particulier ceux utilisés
> pour accéder aux serveurs web.
> 
> 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



Reply to: