Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

squid transparent

10 réponses
Avatar
Professeur Méphisto
Bonjour,

j'ai un proxy squid (+squidgard) install=E9 sur une debian avec deux ca=
rtes=20
r=E9seau :

eth0 (192.168.1.64/24) sortie vers le Ternet, eth1(10.1.254.254/16) ver=
s le=20
client

la config de squid est sans bricolages particuliers :

acl all src all
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32
acl localnet src 10.1.0.0/16
acl SSL_ports port 443=09=09# https
acl SSL_ports port 563=09=09# snews
acl SSL_ports port 873=09=09# rsync
acl Safe_ports port 80=09=09# http
acl Safe_ports port 21=09=09# ftp
acl Safe_ports port 443=09# https
acl Safe_ports port 70=09=09# gopher
acl Safe_ports port 210=09# wais
acl Safe_ports port 1025-65535=09# unregistered ports
acl Safe_ports port 280=09# http-mgmt
acl Safe_ports port 488=09# gss-http
acl Safe_ports port 591=09# filemaker
acl Safe_ports port 777=09# multiling http
acl Safe_ports port 631=09# cups
acl Safe_ports port 873=09# rsync
acl Safe_ports port 901=09# SWAT
acl purge method PURGE
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localnet
http_access allow localhost
http_access deny all
icp_access allow localnet
icp_access deny all
http_port 3128 transparent
hierarchy_stoplist cgi-bin ?
access_log /var/log/squid/access.log squid
cache deny all
refresh_pattern ^ftp:=09=091440=0920%=0910080
refresh_pattern ^gopher:=091440=090%=091440
refresh_pattern -i (/cgi-bin/|\?) 0=090%=090
refresh_pattern (Release|Packages(.gz)*)$=090=0920%=092880
refresh_pattern .=09=090=0920%=094320
acl shoutcast rep_header X-HTTP09-First-Line ^ICY.[0-9]
upgrade_http0.9 deny shoutcast
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
extension_methods REPORT MERGE MKACTIVITY CHECKOUT
visible_hostname passoire
hosts_file /etc/hosts
coredump_dir /var/spool/squid
redirect_program /usr/bin/squidGuard
redirect_children 10

le proxy fonctionne puisque un client dont le navigateur =E0 le proxy r=
=E9gl=E9=20
sort sur Internet.

Mais je voudrais que le proxy soit transparent et malgr=E9 la ligne=20

http_port 3128 transparent

le r=E9glage du proxy reste indispensable au client :-(


J'ai un peu googl=E9 et j'ai lu (sans comprendre :-( ) qu'il fallait jo=
uer sur=20
les iptables.

voil=E0 ce que j'ai test=E9 :

# echo 1 > /proc/sys/net/ipv4/ip_forward=20

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

# iptables-save=20
# Generated by iptables-save v1.4.8 on Thu Oct 23 08:54:33 2014
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [1:116]
:OUTPUT ACCEPT [1:116]
-A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3=
128=20
COMMIT
# Completed on Thu Oct 23 08:54:33 2014


=E9videment, sinon je ne poserais pas la question, cela ne marche pas. =
Le=20
navigateur du client ne sort pas sur l'Internet sans r=E9glage du proxy=
.

J'=E9tais d=E9j=E0 arriv=E9 =E0 faire tomber un truc de ce genre en mar=
che mais je ne=20
retrouve plus comment.

Quelqu'un peut-il me donner un petit coup de main ?
merci

10 réponses

Avatar
Pascal Hambourg
Salut,

Professeur Méphisto a écrit :

évidement, sinon je ne poserais pas la question, cela ne marche pas. Le
navigateur du client ne sort pas sur l'Internet sans réglage du proxy.



Que se passe-t-il exactement ?
Le poste client a-t-il une configuration IP complète (passerelle=proxy,
DNS joignables) ?
Que donnent la résolution DNS des noms extérieurs et le ping/traceroute
vers les adresses IP extérieures ?
Avatar
noname
Professeur Méphisto a utilisé son clavier pour écrire :


Mais je voudrais que le proxy soit transparent et malgré la ligne

http_port 3128 transparent

le réglage du proxy reste indispensable au client :-(



Salut

J'ai lu qu'il fallait faire ça aussi :

il faut aussi gérer la redirection vers squidGuard en ajoutant a la
fin du fichier squid.conf ces 2 lignes :

redirect_program /usr/bin/squidGuard -c /etc/squid/squidGuard.conf
redirect_children 10
Avatar
Professeur Méphisto
noname a wroté :

il faut aussi gérer la redirection vers squidGuard en ajoutant a la
fin du fichier squid.conf ces 2 lignes :

redirect_program /usr/bin/squidGuard -c /etc/squid/squidGuard.conf
redirect_children 10



ces deux lignes y sont, certes sans la référence qu fichier de conf , mais
squidguard étant fonctionnel, je pense que le problème est ailleurs .
Avatar
Professeur Méphisto
Pascal Hambourg a wroté :

Le poste client a-t-il une configuration IP complète (passerelle= proxy,
DNS joignables) ?



oui. Dans le doute j'ai ajouté le paquet bind9 à mon proxy : rien n e
change...
Si je mets un DNS en dur (8.8.8.8 par ex.) sur le client, même chose : rien.

Le client est un XP mais je suppose que cela ne change rien au problè me.

Que donnent la résolution DNS des noms extérieurs et le ping/trac eroute
vers les adresses IP extérieures ?



Je relance le bazar et je regarde.
Avatar
Kevin Denis
Le 23-10-2014, Professeur Méphisto a écrit :
j'ai un proxy squid (+squidgard) installé sur une debian avec deux cartes
réseau :

eth0 (192.168.1.64/24) sortie vers le Ternet, eth1(10.1.254.254/16) vers le
client

visible_hostname passoire



Ca c'est du nom de machine :)

le proxy fonctionne puisque un client dont le navigateur à le proxy réglé
sort sur Internet.
Mais je voudrais que le proxy soit transparent et malgré la ligne

http_port 3128 transparent

le réglage du proxy reste indispensable au client :-(

J'ai un peu googlé et j'ai lu (sans comprendre :-( ) qu'il fallait jouer sur
les iptables.

voilà ce que j'ai testé :

# echo 1 > /proc/sys/net/ipv4/ip_forward

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

évidement, sinon je ne poserais pas la question, cela ne marche pas. Le
navigateur du client ne sort pas sur l'Internet sans réglage du proxy.

J'étais déjà arrivé à faire tomber un truc de ce genre en marche mais je ne
retrouve plus comment.



Tu peux regarder tes flux avec tcpdump, ça peut aider pour le diagnostic:
tcpdump -n -i eth0 -s0 tcp port 80
en adaptant le port et l'interface.

Ensuite, si depuis un client lambda du réseau local, tu fais:
telnet www.google.fr 80
est ce que tu vois la connexion qui s'établit:
$ telnet www.google.fr 80
Trying 173.194.67.94...
Connected to www.google.fr.
Escape character is '^]'.

Ou ça s'arrête à la ligne Trying? (pas de pb de DNS non plus?)

Ensuite, quels sont les IP/ports en sortie du squid?

Autre point, tu n'attrapes avec ta règle iptables que les flux en
destination du port 80. Ce qui signifie que les flux https (443)
sortent en direct. Si tu testes la connexion avec google (qui se met
en https) alors tu ne matches pas le redirect de la règle iptables.

Ajoutes un MASQUERADING à la machine 'passoire':
iptables -t nat -A OUTPUT -o eth0 -j MASQUERADE
--
Kevin
Avatar
Professeur Méphisto
bonsoir à tous,

je reprend mon bidule pour répondre aux questions posées :

Pascal Hambourg a wroté :

Que donnent la résolution DNS des noms extérieurs et le ping/trac eroute
vers les adresses IP extérieures ?



$ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
^C
--- 8.8.8.8 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2016ms

$ traceroute 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 64 hops max
1 * * *
2 * * *
3 * * *
(etc...)

$ ping fsf.org
PING fsf.org (208.118.235.131) 56(84) bytes of data.
^C
--- fsf.org ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2015ms

en espérant que ça te parle plus qu'à moi ;-)
Avatar
Professeur Méphisto
Professeur Méphisto a wroté :

petite correction, les iptables du proxy n'étaient pas chargées...

$ traceroute 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 64 hops max
1 * * *
2 * * *
3 * * *
(etc...)



en fait c'est :

$ traceroute 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 64 hops max
1 10.1.254.254 0,049ms 0,160ms 0,254ms
2 * * *
3 * * *
Avatar
Professeur Méphisto
Kevin Denis a wroté :

visible_hostname passoire



Ca c'est du nom de machine :)



en fait il s'agit juste d'avoir pour des tests, en virtualbox (pas pré cisé
dans le post initial, mais c'est peut-être important) l'équivalent, vu côté
client, d'un proxy tel que ceux que l'on a dans les établissements
scolaires. Comem je me contrefiche du côté parefeu de la machine et que le
filtrage de sites web peut se limiter à quelques domaines, le nom est assez
clair ;-)

Ensuite, si depuis un client lambda du réseau local, tu fais:
telnet www.google.fr 80
est ce que tu vois la connexion qui s'établit:
$ telnet www.google.fr 80
Trying 173.194.67.94...
Connected to www.google.fr.
Escape character is '^]'.

Ou ça s'arrête à la ligne Trying? (pas de pb de DNS non plus?)



c'est ça, rien de plus que :

$ telnet www.google.fr
Trying 173.194.67.94...
Trying 2a00:1450:400c:c05::5e...
telnet: Unable to connect to remote host: Network is unreachable

Ensuite, quels sont les IP/ports en sortie du squid?



c'est à dire ?

Autre point, tu n'attrapes avec ta règle iptables que les flux en
destination du port 80. Ce qui signifie que les flux https (443)
sortent en direct. Si tu testes la connexion avec google (qui se met
en https) alors tu ne matches pas le redirect de la règle iptables.



pas grave : le côté transparent ne m'interresse que pour http (port 80).

Ajoutes un MASQUERADING à la machine 'passoire':
iptables -t nat -A OUTPUT -o eth0 -j MASQUERADE



# iptables -t nat -A OUTPUT -o eth0 -j MASQUERADE
ip_tables: MASQUERADE target: used from hooks OUTPUT, but only usable f rom
POSTROUTING
iptables: Invalid argument. Run `dmesg' for more information.

il y a un truc qui coince...


merci à tous pour votre aide
Avatar
Professeur Méphisto
Professeur Méphisto a wroté :

# iptables -t nat -A OUTPUT -o eth0 -j MASQUERADE
ip_tables: MASQUERADE target: used from hooks OUTPUT, but only usable from
POSTROUTING
iptables: Invalid argument. Run `dmesg' for more information.

il y a un truc qui coince...



sans trop comprendre ce que je fais, j'ai remplacé OUTPUT par POSTROU TING
(bin quoi, c'est le message d'erreur qui me l'a suggéré ;-) et ça semble
être OK :

un navigateur *sans réglage du proxy* sort sur internet... par contre , chose
étrange, cela fonctionne aussi en httpS. Alors que le proxy de mon ba hut ne
le permet pas.

le filtre de méchants sites fonctionne

$ traceroute to 8.8.8.8 (8.8.8.8), 64 hops max
1 10.1.254.254 0,004ms 0,389ms 0,174ms
2 192.168.1.1 45,941ms 98,055ms 100,336ms <- mon speedtouch à moi, ça
y est je suis dehors...
3 * * *
4 10.125.219.10 20,071ms 17,445ms 17,539ms
5 193.253.91.33 16,593ms 17,098ms 16,099ms
6 193.252.160.109 18,181ms 16,590ms 17,211ms
7 81.253.184.186 23,968ms 23,199ms 23,943ms
8 72.14.195.26 19,877ms 19,387ms 42,228ms
9 209.85.251.150 20,979ms 24,734ms 20,146ms
10 209.85.251.246 52,321ms 21,347ms 31,354ms
11 209.85.241.228 33,266ms 32,172ms 32,663ms
12 216.239.48.133 37,940ms 49,477ms 36,109ms
13 209.85.254.189 35,916ms 36,833ms 35,621ms
14 * * *
15 8.8.8.8 37,316ms 35,392ms 36,376ms

telnet ne marche pas mieux, mais je n'en ai pas d'usage à priori

$ telnet www.google.fr
Trying 173.194.67.94...
Trying 2a00:1450:400c:c05::5e...
telnet: Unable to connect to remote host: Network is unreachable


encore merci pour l'aide mais je reste à l'écoute de vos remarques
éventuelles si vous en avez à propos de tout ce que je n'ai pas com pris...
et il y a du boulot ! ;-)
Avatar
Kevin Denis
Le 26-10-2014, Professeur Méphisto a écrit :
# iptables -t nat -A OUTPUT -o eth0 -j MASQUERADE
ip_tables: MASQUERADE target: used from hooks OUTPUT, but only usable from
POSTROUTING
iptables: Invalid argument. Run `dmesg' for more information.

il y a un truc qui coince...





Faute de frappe, c'est bien POSTROUTING

sans trop comprendre ce que je fais, j'ai remplacé OUTPUT par POSTROUTING
(bin quoi, c'est le message d'erreur qui me l'a suggéré ;-) et ça semble
être OK :

un navigateur *sans réglage du proxy* sort sur internet... par contre, chose
étrange, cela fonctionne aussi en httpS. Alors que le proxy de mon bahut ne
le permet pas.



Le filtrage de l'école semble efficace..

le filtre de méchants sites fonctionne



cool :)

$ traceroute to 8.8.8.8 (8.8.8.8), 64 hops max
1 10.1.254.254 0,004ms 0,389ms 0,174ms
2 192.168.1.1 45,941ms 98,055ms 100,336ms <- mon speedtouch à moi, ça
y est je suis dehors...
3 * * *
4 10.125.219.10 20,071ms 17,445ms 17,539ms
5 193.253.91.33 16,593ms 17,098ms 16,099ms
6 193.252.160.109 18,181ms 16,590ms 17,211ms
7 81.253.184.186 23,968ms 23,199ms 23,943ms
8 72.14.195.26 19,877ms 19,387ms 42,228ms
9 209.85.251.150 20,979ms 24,734ms 20,146ms
10 209.85.251.246 52,321ms 21,347ms 31,354ms
11 209.85.241.228 33,266ms 32,172ms 32,663ms
12 216.239.48.133 37,940ms 49,477ms 36,109ms
13 209.85.254.189 35,916ms 36,833ms 35,621ms
14 * * *
15 8.8.8.8 37,316ms 35,392ms 36,376ms

telnet ne marche pas mieux, mais je n'en ai pas d'usage à priori

$ telnet www.google.fr
Trying 173.194.67.94...
Trying 2a00:1450:400c:c05::5e...
telnet: Unable to connect to remote host: Network is unreachable



Sans préciser le port, telnet teste le port 23. Qui doit être filtré
sur les serveurs de google...
telnet www.google.fr 80
tape le port 80 des serveurs de google et ça doit passer.
--
Kevin