Configuration proxy transparent Squid3

Bonjour,

Tout d’abord je tiens à préciser que mes connaissances de Linux sont très limitées et en dehors de apt-get update et install, je suis vite dépassé. En outre j’avoue que je ne connais rien en matière de réseau.

J’ai réussi à installer tant bien que mal squid3. Je suis sous Debian Jessie 8.4 (3.16.0-4-amd64) et ma version de squid est la 3.4.8. Squid fonctionne puisqu’il bloque la liste de domaines que j’ai créé en suivant plusieurs tutos (je me suis arrêté à squid et je n’ai pas installé squidguard).

Mon problème c’est qu’il fonctionne uniquement en paramétrant iceweasel. Je suis obligé de cocher “configuration manuelle du proxy” et de renseigner l’adresse ip et le port 3128. Quant à Chromium j’ai le message suivant “Lorsque vous exécutez chrome […] les paramètres proxy du système sont utilisés. Cependant, soit votre système n’est pas compatible, soit un problème est survenu lors du lancement de votre configuration système.”

J’ai vu alors qu’il fallait rendre le proxy transparent en rajoutant d’une part “transparent” après le port 3128 dans le fichier squid.conf puis en rajoutant des règle iptables.

Malheureusement, après plusieurs tentatives je n’arrive pas à rediriger le trafic internet vers le port 3128 en “transparent”.

Est ce que quelqu’un aurait l’amabilité de m’aider et de m’expliquer comment procéder (si possible simplement) ? J’ai vu que le sujet était déjà abordé mais j’ai l’impression que cela concerne plusieurs “machines” en entreprise avec un serveur. Pour ma par il s’agit de deux ordinateurs personnels branchés derrière une freebox.

Merci d’avance.

Salut,
Tu peux nous montrer:

  • Le squid.conf
  • La partie iptables (le pare feu)
  • Éventuellement les autres manips ? (Tu as touché à /etc/sysctl.conf par exemple ?)

Salut,

Mon squid.conf est le suivant :

acl reseau_local src 192.168.1.0/24
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
acl Domain_blacklist dstdomain /etc/squid3/Domain_blacklist
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager
http_access allow localhost
http_access allow reseau_local
http_access deny Domain_blacklist
http_access deny all
http_port 3128 transparent
coredump_dir /var/spool/squid3
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|?) 0 0% 0
refresh_pattern . 0 20% 4320

cache_mem 1500 MB
cache_dir ufs /var/cache/squid/ 5000 16 256
minimum_object_size 3 KB
maximum_object_size 8 MB
cache_store_log /var/log/squid3/store.log

Par contre, je ne comprends pas ce qui se passe mais je m’aperçois que squid me bloque désormais tout le trafic alors que la dernière fois il ne me bloquait que les domaines de la liste ???

Quant au parefeu je n’ai rien fait pour l’instant, écoutant les conseils de PascalHambourg “Tu n’as pas besoin d’un pare-feu complet.”

Enfin, je n’ai rien fait dans /etc/sysctl.conf

A ta disposition pour d’autres précisions.

Salut,
La machine est une passerelle avec deux interfaces ou une seule ?
Sans règles iptables ça ne peut pas fonctionner, et a fortiori de façon transparente.

Dans le cas d’une machine avec deux interfaces (eth0=LAN eth1=WAN):

  1. Il faut activer l’IP Forwarding (La commande en dessous ne résiste pas au reboot et ne concerne que l’ipv4)
    echo 1 > /proc/sys/net/ipv4/ip_forward

  2. Pour ce qui est du des règles iptables (On redirige les demande sur le port 3128, on accepte le passage d’une interface vers l’autre et enfin on masque l’IP d’origine)
    iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-port 3128
    iptables -A FORWARD -i eth0 -j ACCEPT
    iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

Salut lol,

Au moins un qui suit :slight_smile:

En fait il s’agit de deux PC de bureau dans la chambre d’un ado et d’un pré-ado tous deux reliés à une freebox.

En fait quand je tape ifconfig je n’ai que :

eth0 avec à la deuxième ligne
[…]
inet adr:192.168.1.14 Bcast:192.168.1.255 Masque:255.255.255.0
[…]

lo Link encap:Boucle locale
inet adr:127.0.0.1 Masque:255.0.0.0
[…]

Je n’ai pas de eth1.

Et effectivement sur quasi tous les forums je retrouve les mêmes règles iptables avec eth1 et c’est je pense la raison pour laquelle je n’y arrive pas.

Je compte sur toi pour me trouver la solution, qui est peut être toute simple. En tout cas merci.

Si j’ai bien compris, le navigateur et le proxy sont sur la même machine. Ce n’est pas la situation la plus simple. Il faut tenir compte des particularités suivantes :

  1. Les connexions à rediriger sont sortantes et non entrantes, et doivent donc être traitées par une règle iptables dans la chaîne OUTPUT et non PREROUTING.

  2. La règle iptables ne doit pas rediriger les connexions émises par le proxy lui-même, sinon ça boucle. Le moyen classique pour identifier les paquets émis par le proxy est d’utiliser la correspondance owner avec le user-id ou group-id du processus squid.

Pas le temps de détailler plus en ce moment, désolé.

Merci d’avoir pris le temps de me répondre.

Oui c’est tout à fait ça, j’aimerai bloquer le trafic sortant vers internet sur certains sites sur 2 ordinateurs et sur chacun d’eux j’ai installé squid3 et bien sûr il y a le navigateur. [quote=“PascalHambourg, post:6, topic:69227”]
Les connexions à rediriger sont sortantes et non entrantes, et doivent donc être traitées par une règle iptables dans la chaîne OUTPUT et non PREROUTING
[/quote]

Est ce que quelqu’un peut m’en dire plus sur ces fameuses règles ?

[quote=“PascalHambourg, post:6, topic:69227”]
Si j’ai bien compris, le navigateur et le proxy sont sur la même machine
[/quote]Effectivement c’est plus clair…

[quote=“asno, post:7, topic:69227”]
sur 2 ordinateurs et sur chacun d’eux j’ai installé squid3
[/quote]Je me demande s’il y a pas un moyen plus simple de faire ça…

Du coup oui, ce que je t’ai donné n’a pas de sens…
Ça devrait ressembler à ça plutôt:

iptables -t nat -A OUTPUT -p tcp --dport 80 -d 127.0.0.1 -j ACCEPT
iptables -t nat -A OUTPUT --match owner --uid-owner squid -p tcp --dport 80 -j ACCEPT
iptables -t nat -A OUTPUT -p tcp --dport 80 -m owner --uid-owner asno -j ACCEPT
iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-ports 3128

Je n’ai jamais fait ça, donc, c’est sans garantie.
Ligne 1: pas de passage par squid pour localhost
Ligne 2 et 3: Le proxy Squid ET asno sortent sans passer par le proxy (ie tous les autres doivent passer par squid => règle 3).
Ligne 4: Tout le reste passe par le proxy.

Je pense que ça devrait le faire. :yum:

Si le processus de de squid tourne sous l’UID “squid” (à verifier avec ps -Af par exemple), la règle ci-dessous devrait fonctionner :

iptables -t nat -A OUTPUT -p tcp --dport 80 -m owner ! --uid-owner squid -j REDIRECT --to-ports 3128

Notes :

  • La règle ne fonctionne qu’avec les connexions à des sites utilisant le port 80.
  • La redirection transparente ne fonctionne pas avec les sites sécurisés (HTTPS, port 443). On peut le faire à condition de configurer le proxy pour envoyer un certificat pour n’importe quell site et le navigateur pour accepter le certificat du proxy. Mais je ne sais pas faire.

[quote=“PascalHambourg, post:6, topic:69227”]
Pas le temps de détailler plus en ce moment, désolé.
[/quote]Menteur va! :wink:

A là là… c’est trop beau ces lignes d’iptables, ça me redonne espoir,

Par contre :

Est ce que c’est toujours d’actualité ?

Je tape ceci puis je fais :

Ou bien juste cette dernière ligne ?

Je vais également vérifier que squid tourne sous l’UID “squid” si j’ai bien compris avec la commande ps -Af, en tout cas à l’installation de squid3 je n’ai pas créé d’user-id ou de group-id, j’ai juste édité squid.conf que j’ai posté plus haut.

Salut,

[quote=“asno, post:11, topic:69227”]
Est ce que c’est toujours d’actualité ?
[/quote]Non, il n’y a pas de forward d’une interface à une autre.

[quote=“asno, post:11, topic:69227”]
juste cette dernière ligne ?
[/quote]Ça même. :slight_smile:

Merci, j’essaye tout ça et je vous tiens au courant les boss…

Correction à mon message précédent, il manquait une inversion “!” à la règle.

Est ce que tu peux m’expliquer s’il te plaît ? Je dois rajouter un point d’exclamation à la règle ? C’est bien ça ? Si oui ou dois je le rajouter ?

J’ai l’impression qu’il n’y a plus personne :’( Du coup j’ai été voir sur ce lien :

Donc dans mon cas ça donnerait :

`iptables -t nat - A OUTPUT -p tcp ! --dport 80 -m owner --uid-owner squid -j REDIRECT --to-ports 3128

Est ce que c’est ok ?

Salut,

Suite à la remarque de PascalHambourg :

J’ai donc tapé ps -Af et cela m’a donné pour squid :

root 976 1 0 07:58 ? 00:00:00 /usr/sbin/squid3 -YC -f /etc/squ
proxy 978 976 0 07:58 ? 00:00:00 (squid-1) -YC -f /etc/squid3/squ

proxy 1606 978 0 08:01 ? 00:00:00 (logfile-daemon) /var/log/squid3

Du coup je laisse uid-owner squid ? ou bien est-ce que je change par “proxy” ou “root” ? ça va peut être vous paraître bête mais je suis un peu perdu.
Je m’excuse auprès de PascalHambourg je n’avais pas vu qu’il avait édité son message et je sais ou se trouve l’ inversion “!”

Comme il y a plusieurs processus squid, il faut chercher celui qui fait les connexions sortantes. Logiquement cela devrait être un de ceux dont l’UID est “proxy”. On ne peut pas vérifier directement, mais on peut voir lequel écoute sur le port 3128 avec

netstat -ntlp | grep 3128

[quote=“asno, post:16, topic:69227”]
J’ai l’impression qu’il n’y a plus personne[/quote]
Souvent les gens dorment la nuit. C’est mon cas.

Salut PascalHambourg,

Tout d’abord je ne te reproche pas de dormir de temps en temps, j’exprimais juste un moment de solitude :anguished:

Pour ce qui est de : [quote=“PascalHambourg, post:18, topic:69227”]
netstat -ntlp | grep 3128
[/quote]

Cela me donne :

tcp6 0 0 :::3128 :::* LISTEN 972/(squid-1)

Donc pour la règle iptables je suppose que c’est ça :

`iptables -t nat - A OUTPUT -p tcp --dport 80 -m owner ! --uid-owner squid-1 -j REDIRECT --to-ports 3128

Désolé si je me suis trompé. J’attends ton aval.

Merci pour ta patience.

Non squid-1 est le nom du processus, qu’on retrouve avec son PID (process ID) 972 dans la sortie de ps.
ps indique que l’UID (user ID) de ce processus est proxy.

Le fait que squid ouvre une socket IPv6 me fait penser que si la machine a une connectivité IPv6 globale, l’accès aux sites accessibles en IPv6 ne passera pas par le proxy car iptables ne traite que les paquets IPv4. Pour traiter les paquets IPv6, il faut utiliser ip6tables.

Tu peux vérifier si la machine a une adresse IPv6 globale avec
ip -6 addr
Si cela n’affiche aucune ligne d’adresse IPv6 (inet6) avec “global”, tu n’es pas concerné pour le moment.