Configuration proxy transparent Squid3

Je ne sais pas si au passage quelqu’un pourra me dire ce qui cloche, donc sur les conseils de PascalHambourg j’ai rajouté à mon squid.conf :

http_port 3129
http_port 3128 intercept

Dans mon cache.log j’ai désormais à la place du message “ERROR: No forward-proxy ports configured” :

2016/04/23 18:22:06 kid1| Accepting HTTP Socket connections at local=[::]:3129 remote=[::] FD 11 flags=9
2016/04/23 18:22:06 kid1| Accepting NAT intercepted HTTP Socket connections at local=[::]:3128 remote=[::] FD 12 flags=41

Quand je tape tail -f /var/log/squid3/access.log je vois bien que le trafic transit bien par squid.

Mais dès que je rentre la règle iptables, j’ai toujours le même souci ma navigation est totalement bloquée pour tout ce qui est en http alors que le https aucun problème.

voici ce que j’ai fait pour ma redirection proxy transparent dans ctparental, c’est pas du squid mais c’est le même principe, un proxy transparent en local sur la machine. (sa ne marche que pour le http le https il faut obligatoirement que le proxy soit paramétrées dans le navigateur!!!
en adaptent pour toi sa devrai donner quelque chose comme sa.

### SUPPRESSION de TOUTES LES ANCIENNES TABLES (OUVRE TOUT!!) ###
user=toto
IPTABLES=${IPTABLES:="/sbin/iptables"}
PROXYport=${PROXYport:="3128"}
   $IPTABLES -F
   $IPTABLES -X
   $IPTABLES -t nat -D OUTPUT -j squidnat 2> /bin/null
   $IPTABLES -t nat -F squidnat  2> /bin/null
   $IPTABLES -t nat -X squidnat  2> /bin/null
   $IPTABLES -P INPUT ACCEPT
   $IPTABLES -P OUTPUT ACCEPT
   $IPTABLES -P FORWARD ACCEPT 

#force passage par le proxy pour les utilisateurs filtrés 
$IPTABLES -t nat -A squidnat ! -d 127.0.0.1/8 -m owner --uid-owner "$user" -p tcp --dport 80 -j DNAT --to 127.0.0.1:"$PROXYport"

# on interdit l'acces https sans passer par le proxy pour les utilisateur filtré.    
$IPTABLES -A OUTPUT ! -d 127.0.0.1/8 -m owner --uid-owner "$user" -p tcp --dport 443 -j REJECT

Bonsoir Hulk,

Tout d’abord merci pour ton intervention.

J’ai donc suivi tes instructions puis j’ai tapé ceci en remplaçant “$user” par “proxy” et “$PROXYport” par 3128 (je ne sais pas si c’est bien ça) :

$IPTABLES -t nat -A squidnat ! -d 127.0.0.1/8 -m owner --uid-owner proxy -p tcp --dport 80 -j DNAT --to 127.0.0.1:3128

J’obtiens le message suivant :

“iptables: No chain/target/match by that name.”

Par contre la règle suivant est bien passée.

C’est grave docteur?

Salut tout le monde,

Je reviens aux nouvelles. Suite à mon message d’erreur, j’ai rebooté et j’ai retapé donc la règle :

$IPTABLES -t nat -A squidnat ! -d 127.0.0.1/8 -m owner --uid-owner proxy -p tcp --dport 80 -j DNAT --to 127.0.0.1:3128

Et cela me donne désormais :

“bash: -t : commande introuvable”

Une suggestion ?

On ne peut pas simplement piquer une règle iptables, ou même une commande dans un script, et s’attendre à ce que ça marche comme veut. Un jeu de règles iptables, et plus généralement un script shell, est un ensemble coherent dans lequel chaque élément depend des autres.

La commande que tu as piquée utilise une variable d’environnement $IPTABLES qui est définie plus haut dans le script. De même, la règle iptables utilise une chaîne utilisateur squidnatqui est définie plus haut dans le script. Si tu ne recopies pas ces définitions ou ne modifies pas la commande pour ne pas les utiliser, ça ne marchera pas.

Pour finir, l’exemple donné redirige les connexions HTTP d’un utilisateur particulier (“toto”, définie dans la variable $user) vers le proxy, contrairement à ta règle précédente qui redirigeait toutes les connexions HTTP ne provenant pas de l’utilisateur “proxy”. La dernière règle que tu essaies de mettre en place redirigerait seulement les connexions HTTP de l’utilisateur “proxy”, ce qui n’a pas de sens.

$user doit être remplacer par l’utilisateur que tu veut forcer a passé par ton proxy et non par l’utilisateur du service proxy.

de plus il faut aussi comme dit plus haut ,faut adapter un peut, par exemple $IPTABLES et a remplacer par /sbin/iptables , si tu ne défini pas ta variable plus haut dans ton scripte iptables.

par contre fait attention a la redirection de tous les utilisateur sauf un en particulier car sa impacte tous ton systeme y comprit les outils de mise a jour apt …

Tout d’abord je m’excuse pour les erreurs grossières que je fais. Je sais que pour vous cela parait enfantin mais moi c’est la première fois que je me lance dans l’installation d’un proxy et dans le monde des règles iptables en partant de rien. Ne m’en voulez pas donc d’être largué par moment. [quote=“PascalHambourg, post:45, topic:69227”]
La commande que tu as piquée utilise une variable d’environnement $IPTABLES qui est définie plus haut dans le script.
[/quote]

Je viens seulement de comprendre qu’il fallait d’abord créer un script si j’ai compris dans /sbin/iptables. Est ce qu’il faut lui donner des droits ? Moi je me suis contenté de tout taper en ligne de commande en root. Je sais ça va vous paraître débile :slight_smile:[quote=“hulk, post:46, topic:69227”]
$user doit être remplacer par l’utilisateur que tu veut forcer a passé par ton proxy et non par l’utilisateur du service proxy.
[/quote]

Concrètement je procède comment pour créer cet utilisateur ? Sachant donc que tout se passe sous le même ordinateur. [quote=“hulk, post:46, topic:69227”]
par contre fait attention a la redirection de tous les utilisateur sauf un en particulier car sa impacte tous ton systeme y comprit les outils de mise a jour apt …
[/quote]

Pareil je fais comment pour faire attention à la redirection ?

Désolé pour toute ces questions mais j’avoue que je suis dépassé.

Comme me le disait un mec à la hotline de free dernièrement, “je suis votre cerveau et vous êtes mes bras, contentez vous de suivre mes instructions !!!”

Donc please soyez mon cerveau. Merci d’avance pour votre patience.

ok bon si tu début avec les iptables , tu devrais en premier lieu vas voir ici pour les base.

https://www.debian-fr.org/t/installation-parefeu-iptables-ip6tables-pour-les-nuls/2183

quelques commandes utiles pour voir tes règles active.
en root ou avec sudo devant.

iptables -L
et
iptables -t nat -L

/sbin/iptables n’est pas un scripte mais la commande pour ajouter enlevais … des règles iptables .

comme indiquer dans le lien ci-dessus tu doit créer un scripte qui ce lance au démarrage de l’ordinateur dans le quel tu mais toutes tes commandes
/sbin/iptables …

Merci hulk pour le lien mais c’est par là que j’avais commencé. J’ai d’ailleurs commencé par poster ma question sur le lien Digression Installation parefeu (iptables & ip6tables) "pour les nuls"
Puis on m’a dit qu’il fallait créer un nouveau sujet, ce que j’ai donc fais ici et maintenant on me demande de retourner là bas. Je sens que je ne vais pas m’en sortir :sob:
J’y retourne et je vais voir

pour le post tu a bien fait d’en faire un nouveau , mais dans le lien il y a les explication sur comment mètre en places des règles iptables de base .
si tu suit le tutoriel de ce poste tu créer un scripte dans /etc/init.d/mon_parefeu .
une foie celui-ci fait.
fait ceci :
remplacer toto par le login de l’utilisateur a filtrer.

### SUPPRESSION de TOUTES LES ANCIENNES TABLES (OUVRE TOUT!!) ###
## on définit la variable PROXYport
PROXYport="3128"
/sbin/iptables  -F
/sbin/iptables  -X
/sbin/iptables  -t nat -D OUTPUT -j squidnat 2> /bin/null
/sbin/iptables  -t nat -F squidnat  2> /bin/null
/sbin/iptables  -t nat -X squidnat  2> /bin/null
/sbin/iptables  -P INPUT ACCEPT
/sbin/iptables  -P OUTPUT ACCEPT
/sbin/iptables  -P FORWARD ACCEPT 
/sbin/iptables  -t nat -N squidnat
/sbin/iptables -t nat -A OUTPUT -j squidnat

#force passage par le proxy pour les utilisateurs filtrés 
/sbin/iptables -t nat -A squidnat ! -d 127.0.0.1/8 -m owner --uid-owner "toto" -p tcp --dport 80 -j DNAT --to 127.0.0.1:"$PROXYport"

# on interdit l'acces https sans passer par le proxy pour les utilisateur filtré.    
/sbin/iptables -A OUTPUT ! -d 127.0.0.1/8 -m owner --uid-owner "toto" -p tcp --dport 443 -j REJECT"}

si tu a plusieurs utilisateurs a filtrer tu a juste a répéter les lignes avec toto dedans .

et tu termine par /etc/init.d/mon_parefeu stop ce qui vas permettre la sauvegardes de tes règles iptables .

tu fait aussi update-rc.d mon_parefeu defaults ce qui paramètre le systeme pour lancer le scripte /etc/init.d/mon_parefeu start a l’ouverture du system.

Ok je te remercie Hulk, je commence à y voir plus clair. C’est vrai que je n’y pensais plus du tout au pare feu. D’ailleurs dans le lien précédent où j’avais posté la 1ère fois, on m’avait dit : “Tu n’as pas besoin d’un pare-feu complet” et dans la présente discussion il n’en a plus du tout été question. Si bien que lorsque tu es intervenu je n’avais pas compris qu’il fallait à nouveau se référer au pare-feu.
Petite précision, tu me dis :

Est ce que je suis texto tout le tutoriel ((1) Installation; (2) Configuration; (3) Modifications) et j’ajoute ensuite ce que tu m’a indiqué ou bien je me contente juste de faire :
touch /etc/init.d/mon_parefeu
chmod +x /etc/init.d/mon_parefeu
Dans kedit, ouvrez le fichier /etc/init.d/mon_parefeu
Et ensuite je fais un copier/coller de ce que tu m’a indiqué en mettant bien sûr au début “#!/bin/sh” et le bon utilisateur ?
Encore une fois je m’excuse si mes questions peuvent paraître bêtes.

tu fait juste (1) Installation , tu copier/coller de ce que j’ai mi plus haut dans un terminal
en n’oubliant pas de terminer par

/etc/init.d/mon_parefeu stop
update-rc.d mon_parefeu defaults

en gros le copier/coller que je tes passer correspond (2) Configuration du tutoriel mes adapter a ce que tu veut faire.

Ok c’est clair. Merci beaucoup. Je dois m’absenter j’essayerai ce soir et je vous tiens au courant.

Bonsoir tout le monde, me revoici…je sais ça commence à être long :confused:

Donc j’ai fait (1) Installation du pare-feu, puis copier/coller toutes les règles dans un terminal.
Ensuite en arrivant à :

/sbin/iptables -t nat -A squidnat ! -d 127.0.0.1/8 -m owner --uid-owner “toto” -p tcp --dport 80 -j DNAT --to 127.0.0.1:"$PROXYport"

J’ai tapé cat /etc/passwd | awk -F: ‘{print $ 1}’ pour avoir la liste des utilisateurs ce qui donne :

root
daemon
bin
sys
sync
games
man
lp
mail
news
uucp
proxy
www-data
backup
list
irc
gnats
nobody
systemd-timesync
systemd-network
systemd-resolve
systemd-bus-proxy
messagebus
avahi
Debian-exim
statd
colord
dnsmasq
geoclue
speech-dispatcher
pulse
sshd
rtkit
saned
usbmux
lightdm
hplip
powernet
ntp

La commande who donne :

powernet :0 2016-04-25 19:10 (:0)
root pts/1 2016-04-25 19:11 (:0.0)

J’ai donc remplacé “toto” par powernet (pour la petite histoire c’est la marque de l’ordinateur) et là malheureusement à nouveau j’ai :

“iptables: No chain/target/match by that name.”

C’est à se taper la tête contre les murs.

toute mes excuses j’avais oubliée la création de la chain squidnat dans mes lignes.
j’ai corrigée l’erreur dans le post précédent, en faisant comme suit sa devrai résoudre ce problème.
/etc/init.d/mon_parefeu clean
puis recommence la procédure a partir de copier/coller.

cette ligne de commande devrai te confirmé que c’est bien pris en compte.
iptables -t nat -L

Bonjour Hulk,

Merci de t’être à nouveau penché sur mon cas. J’ai donc recommencé la procédure cette fois tout se passe bien lorsque je tape la règle :

/sbin/iptables -t nat -A squidnat ! -d 127.0.0.1/8 -m owner --uid-owner powernet -p tcp --dport 80 -j DNAT --to 127.0.0.1:"$PROXYport"

Je n’ai plus ce méchant message “iptables: No chain/target…”

Mais maintenant c’est avec la dernière ligne.

Je tape donc :

/sbin/iptables -A OUTPUT ! -d 127.0.0.1/8 -m owner --uid-owner powernet -p tcp --dport 443 -j REJECT"}

Et là ça revient à la ligne avec une petit “>” et le curseur qui clignote, j’ai bien essayé de voir d’ou pouvait venir l’erreur mais je n’y arrive pas.

Pour info la commande [quote=“hulk, post:55, topic:69227”]
iptables -t nat -L
[/quote]

donne ceci :

Chain PREROUTING (policy ACCEPT)
target prot opt source destination

Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination
squidnat all – anywhere anywhere

Chain POSTROUTING (policy ACCEPT)
target prot opt source destination

Chain squidnat (1 references)
target prot opt source destination
DNAT tcp – anywhere !loopback/8 owner UID match powernet tcp dpt:http to:127.0.0.1:3128

Sachant donc qu’il manque la dernière règle.

une erreur , il faut suprimer les caractères "} en gras dans la commande , ce qui donne.
/sbin/iptables -A OUTPUT ! -d 127.0.0.1/8 -m owner --uid-owner powernet -p tcp --dport 443 -j REJECT

Alors cette fois concernant les règles plus aucun message d’erreur. Que ce fut laborieux :slight_smile:

Par contre le filtrage ne se fait pas, pourtant Squid est bien lancé (squid3 -z), lorsque je navigue je le vois bien en tapant “tail -f /var/log/squid3/access.log”.

Mais quand je ping youporn.com, j’ai juste la ligne
PING youporn.com (31.192.116.24) 56(84) bytes of data.
puis rien ??

En outre je navigue sans soucis sur les sites en http mais tout ce qui est en https est bloqué y compris google (c’est exactement l’inverse de la situation du début).

Je sens que je vais laissé tomber, je ne sais pas si du coup ce sont mes ACL qui sont mauvaises, si il y a un problème de port 3128 ? 3129 ? “transparent” ou “intercept” ou est ce une règle iptables ?

Je vais peut être me rabattre sur une autre solution qui j’espère sera plus simple à moins que quelqu’un voit la solution.

J’ai vu Hulk ton tuto ici : Contrôle parental pour le pc debian de vos enfants :)
Je vais voir ce que ça donne.

En tout cas je pars en déplacement jusqu’à la semaine prochaine, d’ici là les choses se seront peut être décantées et la solution viendra peut être d’elle même qui sait…

c’est le fonctionnement normal ton trafique http étans redirigé sur squid de manière transparent tu accède bient aux site http via squid , mais pour le https iptable bloque juste l’accès au port 443 ver tous le monde sauf ton proxy, il faut quant même paramétrer le proxy https dans le navigateur si tu veux accédés au https.

avants d’installer CTparental , désinstalle squid ,supprime tes tègles iptables.

rm -f /etc/init.d/mon_parefeu

et redémarre le pc.

Merci pour l’info et pour ton aide (et à tous les autres bien sûr). J’espère que CTparental sera plus simple :rolling_eyes: