SQUID HTTP pour tous et HTTPS partiel



  • Bonjour,

    Contexte : perso, Ingénieur de production en informatique

    Besoin :
    Faire passer toutes les requetes HTTP/HTTPS de tous les utilisateurs au travers d'un proxy transparent.
    et ne pas faire passer certaines adresses IP par le proxy https uniquement.

    J'arrive à faire fonctionner cette solution avec DEBIAN, mais je voudrais utiliser PFSENSE à l'avenir.

    Actuellement sur ma configuration avec PF, tous les utilisateurs utilisent le proxy transparent HTTP+HTTPS.

    Schéma :

    INTERNET–---WAN(Routeur linksys)-----gateway(pfsense)-----LAN

    WAN (modem/routeur/box) : Routeur avec 1 adresse IP FAI DHCP

    LAN : 1 LAN (192.168.1.0/24)

    DMZ : aucun

    WIFI : DHCP interne

    Autres interfaces : DNS local, 1 carte reseau LAN + 1 carte reseau WAN

    Règles NAT : default

    Règles Firewall : default

    Packages ajoutés : 2.2.4-RELEASE (amd64) , squid3 0.4.0, squidguard 1.9.15

    Autres fonctions assignées au pfSense : N/A

    Question :
    Comment ne pas faire passer par le proxy transparent https certains utilisateurs uniquement.

    Pistes imaginées

    Sur Debian, j'utilise cette règle iptable, pour chaque adresse concernée (exclusion du https):

    iptables -t nat -A PREROUTING -i ${LAN} -s ${LAN_IP}100 -p tcp --dport 443 -j RETURN
    

    Ces règles doivent être positionnées avant celle du proxy transparent

    iptables -t nat -A PREROUTING -i ${LAN} -s ${LAN_IP_RANGE} -p tcp --dport 443 -j REDIRECT --to-port 3129
    

    Par contre sous PF, je ne sais pas comment faire pour rajouter une règle similaire depuis l'interface GUI.
    Et être positionnées avant celle du proxy

    # Setup Squid proxy redirect
    rdr on em1 proto tcp from any to !(em1) port 80 -> 127.0.0.1 port 3128
    rdr on em1 proto tcp from any to !(em1) port 443 -> 127.0.0.1 port 3129
    

    Merci d'avance pour votre contribution.



  • Merci d'avoir "formulé".

    Besoin :
    Faire passer toutes les requetes HTTP/HTTPS de tous les utilisateurs au travers d'un proxy transparent.
    et ne pas faire passer certaines adresses IP par le proxy https uniquement.

    Question :
    Comment ne pas faire passer par le proxy transparent https certains utilisateurs uniquement.

    Je ne suis pas certain de comprendre. Si on fait du proxy transparent on ne fait pas grand dose en ce qui concerne https. Sauf à déchiffrer le trafic selon les méthodes de MITN dont le principe est pour le moins "délicat". Il ne me semble pas qu'il en soit question.
    Donc finalement je ne vois pas bien ni le problème, ni l'objectif fonctionnel.



  • +1
    lorsqu'on évoque le proxy en mode transparent, il n'y a pas de notion d'utilisateur puisqu'il  n'y a pas, en tous cas au niveau du proxy, d’authentification.
    Tout au plus pourrait-on mettre en place quelque chose basé sur des informations au niveau du réseau (adresse IP ou MAC)

    Si le but est vraiment un comportement différent selon l'utilisateur, il faudrait un truc genre portail captif qui introduise cette notion de profiling et donc d’authentification préalable.

    L'autre point, comme souligné par ccnet, c'est que le proxy, en mode transparent, ne couvre pas HTTPS. Jamais… sauf à activer SSL bump, c'est à dire "Man In The Middle"  ;)



  • Je vais essayer d'être plus précis sur le besoin final (qui fonctionne sous Debian avec iptables)

    Le parc de la maison est composé d'ordinateurs portables, de tablettes, de consoles et d'Ipods.
    Je voudrais que tous les accès internet passe par un proxy afin de filtrer le contenu  avec squidguard. (protection enfants centralisée)

    Afin de pouvoir vérifier le certificat des sites bancaires, j'ai besoin d'exclure les adresses IP des postes parents (ou les enfants n'ont pas accès).
    Mais je veux continuer d'utiliser le proxy http pour la gestion du cache car la ligne ADSL ne fait que 2M.(on économise la BP comme on peut)

    proxy https = "Man in the middle" avec CA déployé sur tous les périphériques (solution déjà fonctionnel en production mais sous Debian)

    En espérant avoir été plus précis cette fois  :D



  • C'est effectivement plus clair mais pourquoi ne pas le faire en gérant des exclusions au proxy transparent en fonction non pas de l'adresse IP source mais plutôt la destination, comme le permet de le faire l'interface graphique, directement, sans règle à insérer (genre iptables)

    Et, pour aller plus loin, pourquoi avoir choisi le mode transparent du proxy ?
    Un proxy explicite est beaucoup plus souple de ce point de vue et ne limiterait pas le paramétrage à des adresses IP ou hosts  ;)



  • J'ai choisit de mettre en place un proxy transparent car cela ne nécessite aucune authentification, même si je dispose d'un AD Windows, quelque soit le périphérique.
    Je ne veux pas non plus gérer en permanence une Whitelist, les enfants sont en permanences en requête de nouveau besoins et se sentent frustrés si ils doivent passer par nous pour accéder à de nouveau contenus.

    Je ne pense pas que le proxy explicite permette aussi de régler mon problème de base.

    Est-il possible, tout simplement, de positionner une règle "stop rule" en amont de la règle proxy ?
    Toute les règles NAT ou Rules, ajoutées depuis l'interface, sont positionnées en fin du fichier /tmp/rules.debug.

    Comment  créer une règle NAT sous PF équivalent à "-j RETURN" avec iptables ? (j'ai réussit à trouver BLOCK=REJECT, ->=REDIRECT)



  • Bonjour,

    J'ai AT HOME un peut les même besoins fonctionnel que vous (liberté pour les pc des parents non accéssibles aux enfants ET sécurisé la navigation des appareils utiliser par les enfants) mais y ai répondu d'une façon légèrement différente que votre approche.

    1/ Bien évidement le wifi de la box est désactivé  ;D

    2/ Séparation des réseaux, vu le prix d'une carte pourquoi s'embéter  ;)

    J'ai donc lan principal réservé aux pc fixes des parents avec une gestion fine du outbond via les règls de FW. (sans proxy)

    L'autre réseau (Lan2enfants) ou j'ai connecter une borne wifi Cisco en N au millieux des pc fixes des enfants; j'y ai activé squid+squidguard+blacklist de toulouse. J'ai même pousser le ''vice'' jusqu'à y ajouter IMSPECTOR (outils qui loggue les soft d chat instantaner, MSN Skype) non pas pour jouer les BIG BROTHERS et lire leurs petit secrets mais vraiment pour l'aspect sécuritaire surtout en ayant une pré-ado. Cet outils s'est avérer utile à 2 reprises, 1 fausse alerte ou la soeur de la copine plus agé prénais le clavier et un autre fois ou un pré-adulte avais des propo un peut limite et s'est fait taper sur les doigts fermement^^.

    Pour conclure, les parents surf sans contraintes et les enfants sont en sécurité.

    Cdt



  • Pour https je ne comprend pas vos choix de sécurité.
    En tls 1.2 vous perdez la pfs de bout en bout.
    Vous avez la gestion critique du biclé sur le proxy.
    Tres délicat tout cela.



  • Le point important, comme baalserv a mis en place aussi, est de filtrer le contenu des pages pour les enfants.
    La solution "Man in the middle" est discutable sans aucun problème. Hors aujourd'hui il n'existe pas d'autre solution simple hormis de gérer une whiteliste.

    Je pense que je vais creuser du coté à recréer toute les règles nécessaires manuellement. (Transparent HTTP Proxy décoché)
    Je vais recréer les NAT nécessaires afin de pouvoir, si cela est possible, mieux "dominer" l'ordre des règles définit dans le fichier /tmp/rules.debug.

    Je n'ai pas encore de connaissance sur FreeBsd, je découvre PFsense. J'ai réussit à mettre en place ma solution avec Debian.
    J'avais juste besoin d'un coup de pouce pour comment gérer l'ordre de priorité sur les règles "Firewall".
    En aucun cas je veux rentrer dans un débat de SSL Bump c'est pas bien , c'est pas sécurisé….. mon objectif n'est pas la.

    Mon objectif premier est de supprimer les div de publicité, les contenus inapproprié avec une gestion simplifié des pages http et https. (mis en place avec pfsense)
    Mon deuxième objectif est donc d'authoriser de by passer uniquement le proxy https pour quelques adresses IP (En cours d'investigation)

    Merci pour votre aide



  • @highsnoop:

    J'ai choisit de mettre en place un proxy transparent car cela ne nécessite aucune authentification, même si je dispose d'un AD Windows, quelque soit le périphérique.
    Je ne veux pas non plus gérer en permanence une Whitelist, les enfants sont en permanences en requête de nouveau besoins et se sentent frustrés si ils doivent passer par nous pour accéder à de nouveau contenus.

    Il y a là aussi, me semble t-il, une incompréhension.

    • Le proxy explicite permet de mettre en œuvre une authentification, il ne rend pas celle-ci obligatoire.
    • AD à la maison, ça fait cher la licence mais pourquoi pas…  ::)

    Par ailleurs, je ne comprends pas la référence à la whitelist, ni comment ça impacte potentiellement le problème dont nous discutions. Désolé  :-[

    [quote]Je ne pense pas que le proxy explicite permette aussi de régler mon problème de base.

    Le proxy explicite permet de dire:
    "si c'est un parent, alors …." et ce quelle que soit la machine utilisée. Commentaire lié au fait que une adresse IP ou MAC, c'est différent d'un utilisateur.
    mais si ton choix c'est de travailler uniquement au niveau de la machine, pas de problème ;-) c'est juste que c'est différent de ta requête initiale.

    Est-il possible, tout simplement, de positionner une règle "stop rule" en amont de la règle proxy ?
    Toute les règles NAT ou Rules, ajoutées depuis l'interface, sont positionnées en fin du fichier /tmp/rules.debug.

    J'ai un peu du mal à comprendre pourquoi d'un coté tu demandes, je cite:

    Par contre sous PF, je ne sais pas comment faire pour rajouter une règle similaire depuis l'interface GUI.

    et d'un autre coté tu ne fais référence qu'au contenu des fichiers de config.

    En quoi les paramètres de l'interface (voir la copie d'écran ci-dessous) ne répondent-ils pas à ton besoin ?




  • Salut salut

    Je ne discuterais pas technique mais plus sur la philosophie des concepts.

    Premier point à faire est que sous linux se base sur iptable et pfsense (à forcerie les bsd en général) avec packet filter (pf) ce sont deux concepts différents de travail et de paramétrages.

    Deuxième point à faire pf se traite par le paramétrage interface par interface, si vous dites a l'interface de passer un paquet vers la voisine mais que celle ci n'a pas les paramètres adéquats pour les traiter par défaut il les rejet voir les drop.

    Contrairement à iptable a qui l'on donne une ligne pour traiter un paquet de bout en bout, pf lui en demande plusieurs (une par interface).
    Sur le long terme je préfére voir un fichier de conf pf car plus facile à lire et à débuger (abus de langage).

    Je vous conseil le livre dispo chez amazon qui pour certain pourrait etre vu comme simpliste mais qui en à aider quelques uns pour comprendre packet filter.
    http://www.amazon.fr/Le-livre-Packet-Filter-Sécurité/dp/221212516X
    Il y a d'autre titre qui traite du sujet mais celui va au plus simple.

    En passant sur le point du proxy je trouve la montage de baalver est plus que judicieux (sans vouloir polémiquer sur le bien fondé ou non d'un proxy sur un pare-feu, ce n'est en aucun cas le but de mon propos).

    Cordialement.



  • Je pense avoir répondu à mon problème (pour ceux que cela intéresse).

    1. Je désactive "Transparent HTTP Proxy"
    2. Je rajoute le proxy transparent http et https dans la section "Advanced features/Integrations" (séparation de ligne par ; )
    3. Je rajoute la redirection http et https "Firewall: NAT: Port Forward"
      (https uniquement pour le range 128->252)

    Les IP <128 ne passe pas par le proxy en https
    Les adresses enfants (DHCP) doivent être >128




  • Baalserv a donné des pistes intéressantes car basées sur sa propre expérience pratique.

    Il faut retenir la séparation des réseaux : selon le réseau, il est plus facile d'avoir un filtrage différent.

    Pour séparer en réseau, on peut

    • séparer par l'adresse ip : de 1 à 127 et de 129 à 254 pour le dernier octet : garder en mémoire que chacun peut passer en ip statique et changer ainsi de catégorie.
    • séparer par le réseau wifi : avec 2 cartes ethernet reliées chacune à une borne wifi (différente) donc à un signal SSID différent donc à une clé différente
    • séparer par l'adresse mac : dépasse le cadre perso car nécessite des switchs pro, cf NAC

    Ne pas oublier qu'une fois séparé, il faut aussi réunir : le NAS familial devrait être placé dans le réseau de sécurité plus forte (enfants) car il reste accessible aux parents …



  • Bonjour,

    @highsnoop

    Merci pour ton retour mais surtout pour l'example d'un paramétrage AVANCER et fonctionnel  ;)
    Ce post contribu à donner une valeur ajouter à ce forum  ;)

    @Tatave

    Sans relancer le débat du proxy sur FW, comme préciser en début de post, c'est une installation AT HOME  ;)
    Toujours dans la précision, la machine qui fait touner pf est un vieux serveur IBM x225 en bi-xéon avec 3 Go de ram ^^



  • Salut salut

    @baalserv

    d’où le fait que je n'ai pas insisté.

    @hitgsnoop

    J'en suis fort aise que vous ayez trouver la solution et surtout le retour que vous en faites.

    Cordialement.


Log in to reply