# Configuration proxy transparent Squid3

**URL:** <https://www.debian-fr.org/t/configuration-proxy-transparent-squid3/69227>\
**Category:** Support Debian\
**Created:** [Avril 17, 2016, 9:07 UTC](https://www.debian-fr.org/t/configuration-proxy-transparent-squid3/69227 "2016-04-17T21:07:43Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![asno](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/e8c25b/32.png) [@asno](https://www.debian-fr.org/u/asno)\
**Post date:** [Avril 17, 2016, 9:07 UTC](https://www.debian-fr.org/t/configuration-proxy-transparent-squid3/69227/1 "2016-04-17T21:07:43Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![lol](https://www.debian-fr.org/user_avatar/www.debian-fr.org/lol/32/15629_2.png) [@lol](https://www.debian-fr.org/u/lol)\
**Post date:** [Avril 19, 2016, 5:44 UTC](https://www.debian-fr.org/t/configuration-proxy-transparent-squid3/69227/2 "2016-04-19T17:44:26Z")

</div>

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 ?)

---

<div class="post-metadata">

**Author:** ![asno](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/e8c25b/32.png) [@asno](https://www.debian-fr.org/u/asno)\
**Post date:** [Avril 19, 2016, 7:46 UTC](https://www.debian-fr.org/t/configuration-proxy-transparent-squid3/69227/3 "2016-04-19T19:46:20Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![lol](https://www.debian-fr.org/user_avatar/www.debian-fr.org/lol/32/15629_2.png) [@lol](https://www.debian-fr.org/u/lol)\
**Post date:** [Avril 20, 2016, 5:40 UTC](https://www.debian-fr.org/t/configuration-proxy-transparent-squid3/69227/4 "2016-04-20T05:40:19Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![asno](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/e8c25b/32.png) [@asno](https://www.debian-fr.org/u/asno)\
**Post date:** [Avril 20, 2016, 2:05 UTC](https://www.debian-fr.org/t/configuration-proxy-transparent-squid3/69227/5 "2016-04-20T14:05:56Z")

</div>

Salut lol,

Au moins un qui suit 🙂

> [@lol](#):
>
> La machine est une passerelle avec deux interfaces ou une seule ?

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.

> [@lol](#):
>
> Dans le cas d’une machine avec deux interfaces (eth0=LAN eth1=WAN):

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.

---

<div class="post-metadata">

**Author:** ![PascalHambourg](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pascalhambourg/32/5837_2.png) [@PascalHambourg](https://www.debian-fr.org/u/PascalHambourg)\
**Post date:** [Avril 20, 2016, 2:26 UTC](https://www.debian-fr.org/t/configuration-proxy-transparent-squid3/69227/6 "2016-04-20T14:26:40Z")

</div>

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é.

---

<div class="post-metadata">

**Author:** ![asno](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/e8c25b/32.png) [@asno](https://www.debian-fr.org/u/asno)\
**Post date:** [Avril 20, 2016, 3:09 UTC](https://www.debian-fr.org/t/configuration-proxy-transparent-squid3/69227/7 "2016-04-20T15:09:43Z")

</div>

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=«&nbsp;PascalHambourg, post:6, topic:69227&nbsp;»]  
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]

> [@PascalHambourg](#):
>
> 1. 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.

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

---

<div class="post-metadata">

**Author:** ![lol](https://www.debian-fr.org/user_avatar/www.debian-fr.org/lol/32/15629_2.png) [@lol](https://www.debian-fr.org/u/lol)\
**Post date:** [Avril 20, 2016, 3:46 UTC](https://www.debian-fr.org/t/configuration-proxy-transparent-squid3/69227/8 "2016-04-20T15:46:11Z")

</div>

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

[quote=«&nbsp;asno, post:7, topic:69227&nbsp;»]  
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…

> [@asno](#):
>
> Est ce que quelqu’un m’en dire plus sur ces fameuses règles ?

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. 😋

---

<div class="post-metadata">

**Author:** ![PascalHambourg](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pascalhambourg/32/5837_2.png) [@PascalHambourg](https://www.debian-fr.org/u/PascalHambourg)\
**Post date:** [Avril 20, 2016, 3:53 UTC](https://www.debian-fr.org/t/configuration-proxy-transparent-squid3/69227/9 "2016-04-20T15:53:17Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![lol](https://www.debian-fr.org/user_avatar/www.debian-fr.org/lol/32/15629_2.png) [@lol](https://www.debian-fr.org/u/lol)\
**Post date:** [Avril 20, 2016, 4:11 UTC](https://www.debian-fr.org/t/configuration-proxy-transparent-squid3/69227/10 "2016-04-20T16:11:22Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![asno](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/e8c25b/32.png) [@asno](https://www.debian-fr.org/u/asno)\
**Post date:** [Avril 20, 2016, 4:32 UTC](https://www.debian-fr.org/t/configuration-proxy-transparent-squid3/69227/11 "2016-04-20T16:32:01Z")

</div>

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

Par contre :

> [@lol](#):
>
> echo 1 \> /proc/sys/net/ipv4/ip\_forward

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

Je tape ceci puis je fais :

> [@PascalHambourg](#):
>
> `iptables -t nat - A OUTPUT -p tcp --dport 80 -m owner --uid-owner squid -j REDIRECT --to-ports 3128

Ou bien juste cette dernière ligne ?

Je vais également vérifier que squid tourne sous l’UID «&nbsp;squid&nbsp;» 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.

---

<div class="post-metadata">

**Author:** ![lol](https://www.debian-fr.org/user_avatar/www.debian-fr.org/lol/32/15629_2.png) [@lol](https://www.debian-fr.org/u/lol)\
**Post date:** [Avril 20, 2016, 5:02 UTC](https://www.debian-fr.org/t/configuration-proxy-transparent-squid3/69227/12 "2016-04-20T17:02:04Z")

</div>

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. 🙂

---

<div class="post-metadata">

**Author:** ![asno](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/e8c25b/32.png) [@asno](https://www.debian-fr.org/u/asno)\
**Post date:** [Avril 20, 2016, 5:28 UTC](https://www.debian-fr.org/t/configuration-proxy-transparent-squid3/69227/13 "2016-04-20T17:28:56Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![PascalHambourg](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pascalhambourg/32/5837_2.png) [@PascalHambourg](https://www.debian-fr.org/u/PascalHambourg)\
**Post date:** [Avril 20, 2016, 6:09 UTC](https://www.debian-fr.org/t/configuration-proxy-transparent-squid3/69227/14 "2016-04-20T18:09:25Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![asno](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/e8c25b/32.png) [@asno](https://www.debian-fr.org/u/asno)\
**Post date:** [Avril 20, 2016, 7:09 UTC](https://www.debian-fr.org/t/configuration-proxy-transparent-squid3/69227/15 "2016-04-20T19:09:49Z")

</div>

> [@PascalHambourg](#):
>
> il manquait une inversion «&nbsp;!&nbsp;» à 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 ?

---

<div class="post-metadata">

**Author:** ![asno](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/e8c25b/32.png) [@asno](https://www.debian-fr.org/u/asno)\
**Post date:** [Avril 20, 2016, 9:50 UTC](https://www.debian-fr.org/t/configuration-proxy-transparent-squid3/69227/16 "2016-04-20T21:50:29Z")

</div>

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

> [@Régles iptables](https://www.debian-fr.org/t/regles-iptables/64961/2):
>
> Hello, dans ce que tu cherches à faire, il y a peut-être un début de solution avec une règle iptables représentée par le point d’exclamation (!). Pour tes ports 500 et 4500 à ne laisser en accès que par l’IP du site distant comme tu le demandes, on peut imaginer une règle Iptables comportant ce point d’exclamation. Cette règle se terminerait par un DROP et serait précédée par ce point d’exclamation devant l’adresse IP source de ton site distant : (où 85.158.25.31 serait l’adresse IP de ton si…

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 ?

---

<div class="post-metadata">

**Author:** ![asno](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/e8c25b/32.png) [@asno](https://www.debian-fr.org/u/asno)\
**Post date:** [Avril 21, 2016, 6:22 UTC](https://www.debian-fr.org/t/configuration-proxy-transparent-squid3/69227/17 "2016-04-21T06:22:41Z")

</div>

Salut,

Suite à la remarque de PascalHambourg :

> [@PascalHambourg](#):
>
> Si le processus de squid tourne sous l’UID «&nbsp;squid&nbsp;» (à verifier avec ps -Af par exemple)

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 «&nbsp;proxy&nbsp;» ou «&nbsp;root&nbsp;» ? ç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 «&nbsp;!&nbsp;»

---

<div class="post-metadata">

**Author:** ![PascalHambourg](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pascalhambourg/32/5837_2.png) [@PascalHambourg](https://www.debian-fr.org/u/PascalHambourg)\
**Post date:** [Avril 21, 2016, 8:05 UTC](https://www.debian-fr.org/t/configuration-proxy-transparent-squid3/69227/18 "2016-04-21T08:05:13Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![asno](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/e8c25b/32.png) [@asno](https://www.debian-fr.org/u/asno)\
**Post date:** [Avril 21, 2016, 4:17 UTC](https://www.debian-fr.org/t/configuration-proxy-transparent-squid3/69227/19 "2016-04-21T16:17:17Z")

</div>

Salut PascalHambourg,

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

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.

---

<div class="post-metadata">

**Author:** ![PascalHambourg](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pascalhambourg/32/5837_2.png) [@PascalHambourg](https://www.debian-fr.org/u/PascalHambourg)\
**Post date:** [Avril 22, 2016, 9:36 UTC](https://www.debian-fr.org/t/configuration-proxy-transparent-squid3/69227/20 "2016-04-22T09:36:40Z")

</div>

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.

[Page suivante](https://www.debian-fr.org/t/configuration-proxy-transparent-squid3/69227.md?page=2)
