Problème Proxy Transparent avec une carte réseau

Bonjour,

Voila j’ai un petit problème pour la mise en place d’un serveur Proxy Squid en transparent.

Voici en quelques lignes mon réseau :

– Un firewall Cisco Pix entre le réseau local et Internet (adresse interne : 172.16.15.254).
– Serveur Proxy transparent (adresse : 172.16.15.224, passerelle : Firewall en 172.16.15.254).
– 150 postes clients configurer pour avoir comme passerelle le serveur Proxy donc 172.16.15.224).

– Le serveur Proxy n’a qu’une seule interface (eth0), il est en mode routeur (echo “1” > /proc/sys/net/ipv4/ip_forward).

– Mon serveur proxy écoute sur le port 3128, j’ai fait une redirection pour que le port 80 soit rediriger vers le port 3128, avec la commande suivante :

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

Le but de cette solution est de ne filtrer que le port 80 avec le Proxy et que tous les autres ports passe par le routeur qui est sur le machine Proxy.

Le souci c’est que j’arrive bien à accéder au site HTTP, mais pas ceux où il y a du HTTPS ou n’importe quel autre port. On dirait que la machine ne fait pas office de routeur.

Sinon je me suis posez une question, comme je n’ai qu’une seule interface réseau sur ma machine Proxy, le serveur Proxy va faire des requêtes sur Internet mais les réponses vont revenir sur la machine par le port 80 donc il va être rediriger à nouveau dans le Proxy par Iptables ? On n’en fini plus ?

Voila est-ce que vous auriez des réponses, ça m’aiderait bien, Merci d’avance

Tu avais déjà ouvert un fil “Rediriger le traffic avec iptables” sur ce sujet, il me semble que tu avais dit que ça fonctionnait. Quelles sont les règles iptables ?

Les réponses vont revenir depuis le port source 80 du serveur web interrogé, or la redirection concerne les paquets reçus vers le port destination 80 du proxy.

ben pour mes règles iptables, j’avais tout autorisé en FORWARD et INPUT pour la table FILTER, également pour la table NAT, juste en INPUT, j’avais tout bloqué sauf SSH. Puis j’avais juste la règle de redirection du 80 vers le 3128.

Sinon j’ai aussi cru que ça venait d’Iptables donc j’avais tous autorisé et mis la redirection.

J’ai l’impression que tout ce qui est autre que le 80 ne passe pas et que le retour ne fait pas son boulot. Petite question, enfin un petit doute, j’ai qu’une seule carte réseau ce n’est pas ça le problème ?

Le routeur, tu veux dire ? Vérifie si /proc/sys/net/ipv4/ip_forward est bien à 1.
Sauf erreur le fait d’avoir une seule carte réseau ne devrait pas gêner s’il n’y a pas de filtrage à état.
Tu peux tracer de différentes façons les paquets qui sont censés être routés :

  • avec traceroute
  • avec tcpdump, wireshark ou équivalent sur l’interface réseau
  • dans les tables et les chaînes iptables avec la cible LOG au début (-I) de chaque chaîne de chaque table ou bien avec la cible TRACE dans la chaîne PREROUTING de la table ‘raw’.

Le machine où se situe le serveur Proxy fait office de routeur comme c’est la passerelle par défaut pour mes postes clients (la machine est bien paramétrée avec /proc/sys/net/ipv4/ip_forward est bien à 1).

Quand je fait un tracert (équivalent traceroute sur Windows) depuis mon poste client Windows qui à comme passerelle mon serveur Proxy, je vois directement l’adresse IP du Firewall, je ne vois pas le serveur proxy comme intermédiaire, c’est normal ?

Sinon si je met une debian en mode routeur (sans proxy et iptables), que mes postes clients on comme passerelle par défaut cette debian, et que m’a debian à comme passerelle le firewall, normalement je peux accéder à Internet ? la debian fera juste le routage ?

Oui et non. Comme je l’expliquais dans un précédent fil, la machine qui fait routeur+proxy, lorsqu’elle renvoie un paquet par l’interface d’arrivée, envoye un message ICMP “redirect” à la machine source, qui, si elle l’accepte et en tient compte, crée une route temporaire passant directement par le PIX pour atteindre la destination du paquet. Dans ce cas les paquets suivants envoyés à cette même destination ne passent plus par le routeur+proxy.

A noter que cela peut être un problème si la même adresse distante héberge à la fois un service HTTP (dont l’accès doit passer par le proxy) et d’autres services dont l’accès doit être direct. Lors de l’accès à un service autre que HTTP, le routeur+proxy envoie un ICMP redirect à la machine source qui alors ne passe plus par le proxy pour atteindre cette adresse ni pour HTTP ni pour les autres services. Il est possible de désactiver l’envoi d’ICMP redirect par eth0 en mettant simultanément /proc/sys/net/ipv4/conf/eth0/send_redirects et /proc/sys/net/ipv4/conf/all/send_redirects à 0.

Le traceroute arrive à destination ?

Oui, mais ni plus ni moins que ton routeur+proxy actuel.

C’est bon merci ça fonctionne, il fallait bien désactiver le ICMP redirect. :smt023