Forum Linux.général Proxy transparent avec iptables/squid/squidGuard

Posté par  (site web personnel, Mastodon) .
Étiquettes : aucune
0
3
oct.
2008
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  . Évalué à 2.

    simplifions un peu

    # 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  (site web personnel, Mastodon) . Évalué à 1.

      je viens de tester le script, ça marche poa :-( ça filtre très bien sur le poste client et toujours pas du poste serveur où tourne squid, pourtant sur ce dernier quand je configure le navigateur avec usage du proxy, le filtre est bien actif.
      J'y perds mon latin.

      Olivier

      https://www.funix.org mettez un manchot dans votre PC

      • [^] # Re: firewall ?

        Posté par  . Évalué à 2.

        j'avais pas bien lu l'enoncé

        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  . Évalué à 1.

          Si on ne redirige pas le port sur eth1 ce devrait fonctionner non ?


          # 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  (site web personnel, Mastodon) . Évalué à 1.

          C'est un peu ce que je craignais, du coup je sais pas trop comment m'en sortir ou alors il me reste plus qu'à dédier un vieux PC à cela.

          https://www.funix.org mettez un manchot dans votre PC

          • [^] # Re: firewall ?

            Posté par  . Évalué à 2.

            ou à trouver comment tu pourrais desactiver le choix de proxy dans le navigateur (genre un fichier de configuration à modifier quelques part)
            • [^] # Re: firewall ?

              Posté par  (site web personnel, Mastodon) . Évalué à 2.

              Effectivement je me suis inspiré de http://doc.ubuntu-fr.org/clientleger_optimisation pour configurer par défaut le proxy mais il faudrait que je puisse maintenant bloquer la page de configuration de connexion de firefox.
              Reste à faire la même chose avec konqueror.

              https://www.funix.org mettez un manchot dans votre PC

              • [^] # Re: firewall ?

                Posté par  . Évalué à 2.

                Ainsi que dans wget, lynx &co...
                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  (site web personnel, Mastodon) . Évalué à 1.

                  J'ai contourné le problème de firefox avec ça http://ilias.ca/blog/2005/03/locking-mozilla-firefox-setting(...) pour konqueror j'ai installé et configuré kiosktool. C'est certainement pas infaillible mais ça me permet de gagner un peu de temps avant de trouver mieux.

                  https://www.funix.org mettez un manchot dans votre PC

                  • [^] # Re: firewall ?

                    Posté par  (site web personnel) . Évalué à 1.

                    Tu peux utiliser des redirections de port selon l'utilisateur normalement.

                    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  (site web personnel) . Évalué à 3.

    Si tu ne veux pas que tes gamins contournent ton proxy transparent, il suffit d'ajouter une régle pour leur interdire le requetes provenant de eth0 port 80 443 etc.

    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.