Proxy transparent avec iptables/squid/squidGuard
'lut,
J'avais mis en place un filtrage parental sur la base de squid et squidGuard basé sur l'authentification utilisateur comme décrit ici http://www.funix.org/fr/linux/main-linu … menu#Squid il se trouve que les minots ont découvert maintenant le moyen de le contourner (facile il suffit de configurer le navigateur avec une connexion directe au net). Du coup maintenant je compte maintenant installer un proxy transparent en laissant tomber l'authentification puisque les deux ne sont pas compatibles.
Pour avoir une idée de mon réseau local familial ça donne ça
internet livebox 192.168.1.1 routeur 192.168.2.1 eth1(192.168.2.11) serveur eth0(192.168.26.100) eth0 (192.168.26.50) poste client
le routeur est là pour pallier aux insuffisances de la livebox notamment en terme de wifi. Le serveur a deux cartes réseau, eth1 connecté au routeur avec l’adresse 192.168.2.11 et eth0 connecté au poste client avec l’adresse 192.168.26.100. Par ailleurs j’ai un portable qui se connecte directement au routeur.
Du client le proxy transparent marche nickel, mais pas moyen de le faire fonctionner sur le serveur.
Voilà la mon squid.conf (version 2.6)
http_port 3128 transparent
cache_dir ufs /var/spool/squid 40 16 256
cache_effective_user proxy
cache_effective_group proxy
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
access_log /var/log/squid/access.log squid
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
emulate_httpd_log off
dns_timeout 1 minutes
dns_nameservers 80.10.246.1 80.10.246.132
redirect_program /usr/local/bin/squidGuard -c /etc/squid/squidGuard.conf
redirect_children 5
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
acl allowed_hosts src 192.168.26.0/255.255.255.0
acl allowed_hostsbis src 192.168.2.0/255.255.255.0
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443 563
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 22 # ssh
acl Safe_ports port 443 563 # https, snews
acl Safe_ports port 1863 # msn
acl Safe_ports port 1025-65535 # unregistered ports
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 allow allowed_hosts
http_access allow allowed_hostsbis
http_access allow localhost
# Interdit tout le reste
http_access deny all
# Autorise les réponses pour tout le monde (par défaut)
http_reply_access allow all
# Autorise le protocole icp pour tout le monde (par défaut)
icp_access allow all
coredump_dir /var/spool/squid
et voilà le rc.firewall
Code:
#!/bin/bash
iptables -F
iptables -F -t nat
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
modprobe iptable_nat
# Turn on IP forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.26.100:3128
#iptables -t nat -p tcp -A POSTROUTING -s 192.168.2.11 --dport 80 -j SNAT --to 192.168.2.11:3128
#iptables -A PREROUTING -s 192.168.2.0/255.255.255.0 -p tcp --dport 80 -j DNAT --to-destination 192.168.2.11:3128
#iptables -t nat -A PREROUTING -s 192.168.26.0/255.255.255.0 -p tcp --dport 80 -j DNAT --to-destination 192.168.26.100:3128
#iptables -t nat -A PREROUTING -d 192.168.2.1 -p tcp --dport 80 -j REDIRECT --to-ports 3128
#iptables -t nat -A PREROUTING -o eth1 -p tcp --dport 80 -j REDIRECT --to-ports 3128
#iptables -t nat -A PREROUTING -s localhost -p tcp --dport 80 -j REDIRECT --to-port 3128
#iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-ports 3128
#iptables -t nat -A PREROUTING -s 192.168.26.0/255.255.255.0 -p tcp --dport 80 -j REDIRECT --to-ports 3128
#iptables -t nat -A PREROUTING -s localhost -p tcp --dport 80 -j REDIRECT --to-port 3128
#iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128
#iptables -t nat -A PREROUTING -d 192.168.2.1 -p tcp --dport 80 -j REDIRECT --to-port 3128
# In the NAT table (-t nat), Append a rule (-A) after routing (POSTROUTING)
# which says to MASQUERADE the connection (-j MASQUERADE).
iptables -t nat -A POSTROUTING -s 192.168.26.0/24 -j MASQUERADE
# Allows forwarding specifically to our LAN
iptables -A FORWARD -s 192.168.26.0/24 -j ACCEPT
exit 0
En commentaires apparaissent tous mes différents essais. Je sens que le problème vient des règles iptables mais là sérieusement je coince. J'apprécierais si quelqu'un pouvait me dépanner.
Olivier
# firewall ?
Posté par NeoX . Évalué à 2.
# By default this script does nothing.
modprobe iptable_nat
# Turn on IP forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
# faire le changement de port avant tout traitement
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-port 3128
# autoriser le transfert d'une interface à l'autre
# -i eth1 si la carte d'entrée est eth1
iptables -A FORWARD -i eth0 -j ACCEPT
# masquée l'adresse d'origine quand on sort vers internet
# -o eth1 car eth1 est ta carte vers internet
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
exit 0
enfin si ca peut t'aider un peu à comprendre
une image qui explique ou et dans quel ordre se font les regles
http://www.linuxchannel.net/board/board_files/alpha/phpIqSLS(...)
[^] # Re: firewall ?
Posté par Funix (site web personnel, Mastodon) . Évalué à 1.
J'y perds mon latin.
Olivier
https://www.funix.org mettez un manchot dans votre PC
[^] # Re: firewall ?
Posté par NeoX . Évalué à 2.
j'ai un doute sur le faite que ce soit faisable.
car si ta machine "serveur" est aussi cliente, tu ne peux pas rediriger le port 80 vers le 3128 pour cette machine.
en effet, squid va faire ses requetes par le port 80 classique.
donc ca marche pour les machines externes au serveur proxy mais pas pour le proxy lui meme.
[^] # Re: firewall ?
Posté par pi6Lohe . Évalué à 1.
# faire le changement de port avant tout traitement
iptables -t nat -A PREROUTING -p tcp -m tcp -i ! eth1 --dport 80 -j REDIRECT --to-port 3128
[^] # Re: firewall ?
Posté par Funix (site web personnel, Mastodon) . Évalué à 1.
https://www.funix.org mettez un manchot dans votre PC
[^] # Re: firewall ?
Posté par Funix (site web personnel, Mastodon) . Évalué à 1.
https://www.funix.org mettez un manchot dans votre PC
[^] # Re: firewall ?
Posté par NeoX . Évalué à 2.
[^] # Re: firewall ?
Posté par Funix (site web personnel, Mastodon) . Évalué à 2.
Reste à faire la même chose avec konqueror.
https://www.funix.org mettez un manchot dans votre PC
[^] # Re: firewall ?
Posté par santos . Évalué à 2.
Bref, si tu peux trouver une solution côté serveur.
Firefox, suffit de le lancer en tapant firefox -contentLocale monProfil pour qu'il démarre avec un profil sur lequel tu n'as aucun contrôle.
Et même s'ils ne liront pas le man pour trouver ça, ils penseront peut-être à taper "télécharger firefox" sur google, télécharger et exécuter une version clean.
[^] # Re: firewall ?
Posté par Funix (site web personnel, Mastodon) . Évalué à 1.
https://www.funix.org mettez un manchot dans votre PC
[^] # Re: firewall ?
Posté par Raphaël G. (site web personnel) . Évalué à 1.
J'avais l'habitude d'utiliser shorewall pour faire ces règles qu'iptables directement et la dernière colonne permettais de faire matcher un user.
Il te suffit de mettre la règle de ton serveur pour ne rediriger vers le port 3183 que si il ne s'agit pas de l'user squid ou root par exemple...
Mais bon tu sais, ces protections ça va durer un temps, il vont trouver rapidement comment faire un magnifique tunnel ssh a travers ton magnifique proxy pour contourner toutes tes règles...
Ou alors utiliser les http://www.unblocked.org/ et consort pour te filer entre pattes...
# Alternative
Posté par mathieu mathieu (site web personnel) . Évalué à 3.
Ainsi tu gardes la possibilité de t'authentifier.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.