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 -- Lisez la FAQ de la liste avant de poser une question : http://wiki.debian.net/?DebianFrench Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et "Reply-To:" To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]