Squid transparent HTTPS + Squid lent

Squid transparent HTTPS + Squid lent - Réseaux - Systèmes & Réseaux Pro

Marsh Posté le 07-11-2008 à 15:22:18    

bonjour a tous !!
VOila je réalise pour ma société un SQUID transparent couplé a squidguard pour limiter les sites des utilisateurs qui abusent mais j'ai un probleme ! meme deux !!
Dans un premier temps je signales jusque qu'il fonctionne en transparent sans prob et squidguard aussi mais jai deux soucis :
- le premier est qu'un fois mis en production sur le réseau internet se retrouve beaucoup plus lent !! alors que ca ne devrait pas etre le cas autant je ne sais pas trop quoi faire sachant que jai testé de nombreuses config
- ensuite, le plus important, je sais qu'avec squid en transparent le HTTPS ne passe pas mais je souhaiterais redirigé le HTTPS (port 443) sans qu'il passe par le port 3128 de mon squid, il faut savoir que je redirige le port 80 vers 3128 avec iptables afin que tout passe par mon squid. comment puis-je faire ? pour l'architecture réseau mon squid se situe entre le routeur de mon FAI et la passerelle du LAN, les utilisateurs passent tous par la passerelle pour avoir le net.
J'utilise FEDORA 9 et SQUID 3.0
 
mon fichier squid.conf est le suivant :  
 
http_port 3128 transparent
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
 
cache_mem 400 MB
maximum_object_size_in_memory 15 MB
cache_dir ufs /var/spool/squid 3200 16 256
cache_swap_low 75
cache_swap_high 90
cache_access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
pid_filename /var/run/squid.pid
 
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 30
#auth_param ntlm max_challenge_reusses 0
#auth_param ntlm max_challenge_lifetime 2 minutes
auth_param ntlm keep_alive on
 
auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic
auth_param basic children 5
auth_param basic realm Squid AD
auth_param basic credentialsttl 2 hours
 
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 SSL_ports port 443
acl SSL_ports port 563
acl SSL_ports port 873
acl Safe_ports port 80
acl Safe_ports port 21
acl Safe_ports port 443
acl Safe_ports port 70
acl Safe_ports port 210
acl Safe_ports port 1025-65535
acl Safe_ports port 280
acl Safe_ports port 488
acl Safe_ports port 591
acl Safe_ports port 777
acl Safe_ports port 901
acl purge method PURGE
acl CONNECT method CONNECT
acl sefico.lan src  ##.#.##.#/255.255.255.0
acl bdmassocies.lan src ###.###.###.#/255.255.255.0
acl banned_list url_regex "/etc/squid/banned.list"
acl password proxy_auth REQUIRED
acl snmppublic snmp_community public
snmp_port 3401
 
no_cache deny sefico.lan
no_cache deny bdmassocies.lan
http_access deny banned_list
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 localhost
http_access allow sefico.lan
http_access allow bdmassocies.lan
http_access deny all
http_access deny !password
snmp_access allow snmppublic all
 
http_reply_access allow all
icp_access allow all
 
visible_hostname squid.sefico.lan
 
log_fqdn on
append_domain .SEFICO.LAN
 
url_rewrite_program /usr/bin/squidGuard -c /etc/squid/squidGuard.conf
url_rewrite_children 5
 
 
 
mon iptables est le suivant :
 
iptables -F
 
# Nous supprimons d'éventuelles chaînes personnelles :
iptables -X
 
# Nous les faisons pointer par défaut sur DROP
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
 
 
iptables -t nat -F
iptables -t nat -X
 
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
 
######################################################################
# G E S T I O N   M A C H I N E   L O C A L E
######################################################################
 
 
iptables -A INPUT  -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
 
######################################################################
# G E S T I O N    F I R E W A L L -> L A N
#########%2

Reply

Marsh Posté le 07-11-2008 à 15:22:18   

Reply

Marsh Posté le 07-11-2008 à 15:32:23    

je viens de voir qu"il n"y avait pas la fin de mon iptables lol
 
voila la fin :
 
######################################################################
# G E S T I O N    F I R E W A L L -> L A N
######################################################################
 
 
iptables -A INPUT  -i eth0 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -m state --state NEW,ESTABLISHED -j ACCEPT
 
######################################################################
# G E S T I O N   L A N -> F I R E W A L L
######################################################################
 
 
iptables -A INPUT  -i eth0 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -m state --state ESTABLISHED -j ACCEPT
 
 
iptables -A INPUT -i eth1 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth1 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -d 194.2.0.20 -m state --state NEW -p udp --dport 53 -o eth1 -j ACCEPT
iptables -A OUTPUT -m state --state NEW -p tcp -m multiport --dport http,https -o eth1 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
 
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
 
 
 
et je précise aussi que mes blacklists sont tres tres grosse pour mon ssquidguard, je ne sais pas si ca peut etre la cause de la grosse lenteur de mon internet en passant par squid
 
VOila ! jespere que vous pourez me sauver de ma galere
Merci beaucoup ++
Niko

Reply

Marsh Posté le 07-11-2008 à 21:21:28    

j'en connais pas asser pour t'aider mais... c'est quoi la conf de ta machine? cpu/ram? Et tes cartes réseau?

Reply

Marsh Posté le 12-11-2008 à 09:46:16    

Merci d'avoir jeté un oeil ;), ce n'est pas un pb de puissance machine ou reseau c'est sur et certain, mais je pense que sa lenteur est du a mes blacklists qui sont trop grande.
Par contre pour le HTTPS je recherche toujours la solution, personne ne peut m'aider ???

Reply

Marsh Posté le 12-11-2008 à 11:29:35    

- Là tu n'as que des règles d'INPUT, càd à destination de ta machine linux... tu n'autorises pas ce qui doit passer à travers ! Il faut que tu crées une règle de forward (routage) qui autorise les connexions vers tcp/443.
iptables -A FORWARD -p tcp --dport 443 -j ACCEPT
 
- A laquelle il faudrait rajouter une règle de masquerading (nat source) :
iptables -t nat -A POSTROUTING -i eth0 -o eth1 -p tcp --dport 443 -j MASQUERADE
 
- Si ce n'est pas déjà fait, il faut activer le routage des paquets à travers ta machine via la commande :
echo > 1 /proc/sys/net/ipv4/ip_forward
 
 
Remarques :  
- Tu devrais rajouter les subnet source de ton LAN dans cette règle, c'est plus clean "-s 192.168.1.0/24" par ex.
 
- Pourquoi est-ce que ton firewall a besoin de se connecter sur le lan ?! Pour moi ça pourrait être un trou dans ta sécurité (règle iptables -A OUTPUT -o eth0 -m state --state NEW,ESTABLISHED -j ACCEPT)
 
- Tu as des règles qui se superposent
 
- Autoriser tout le monde sur ton LAN à se connecter à tous les ports de ta machine linux est peut être un peu trop "sympa". A voir...
 
- En effet, si tes BL sont énormes, c'est normal que ton SQUID se vautre :D suffit de valider/infirmer avec un "top"
 
Bref je te conseille de te documenter sur les rôles des chaînes INPUT/OUTPUT/FORWARD -c'est vraiment pas dur en plus- tu comprendras mieux pourquoi ta conf merdait et tu pourras l'améliorer :)
 
 
 

Reply

Marsh Posté le 12-11-2008 à 12:19:36    

nikofybc a écrit :


- ensuite, le plus important, je sais qu'avec squid en transparent le HTTPS ne passe pas mais je souhaiterais redirigé le HTTPS (port 443) sans qu'il passe par le port 3128 de mon squid, il faut savoir que je redirige le port 80 vers 3128 avec iptables afin que tout passe par mon squid. comment puis-je faire  
 


Tu peux agir directement au niveau du client, en ne sélectionnant le proxy QUE pour le HTTP.
Le plus propre et pratique est quand même de valider les étapes une à une
1) je valide que mon proxy fonctionne nickel
2) je met en place le proxy transparent / Iptable .
 
++


---------------
www.google.fr  
Reply

Marsh Posté le 12-11-2008 à 13:08:31    

reckoner a écrit :

- Là tu n'as que des règles d'INPUT, càd à destination de ta machine linux... tu n'autorises pas ce qui doit passer à travers ! Il faut que tu crées une règle de forward (routage) qui autorise les connexions vers tcp/443.
iptables -A FORWARD -p tcp --dport 443 -j ACCEPT
 
- A laquelle il faudrait rajouter une règle de masquerading (nat source) :
iptables -t nat -A POSTROUTING -i eth0 -o eth1 -p tcp --dport 443 -j MASQUERADE
 
- Si ce n'est pas déjà fait, il faut activer le routage des paquets à travers ta machine via la commande :
echo > 1 /proc/sys/net/ipv4/ip_forward


 
Si il faut que ça passe par le proxy, il faut pas autoriser le routage et le nat entre l'interne et l'externe sinon tu bypasse le proxy si tu as envie

Reply

Marsh Posté le 12-11-2008 à 18:02:14    

Pour ma part, aucune idee pour la partie iptables.
 
Par contre, peut etre une piste cote squid : la ligne "url_rewrite_children 5" me parait pouvoir poser probleme, surtout si tu as de grosses blacklists comme tu dis. Si tu as beaucoup d'utilisateurs en simultane, 5 rewriters ca me semble un poil faible.
 
Pour en etre sur, verifie dans tes logs squid si tu n'aurais pas des messages du style :
"WARNING: All redirector processes are busy."  
"WARNING: xxx pending requests queued"
"Consider increasing the number of redirector processes  
in your config file."
 
 
 
 

Reply

Marsh Posté le 12-11-2008 à 21:59:56    

Je@nb a écrit :


 
Si il faut que ça passe par le proxy, il faut pas autoriser le routage et le nat entre l'interne et l'externe sinon tu bypasse le proxy si tu as envie


 
Ben je suis d'accord mais le monsieur dit que squid ça marche pas en proxy transparent en https (c'est en réalité un peu plus compliqué, ça génèrerait surtout des warnings sur les certificats, car le CN ne correspondrait pas au FQDN du site ouaibe demandé). Donc à part en définissant le squid comme proxy sur les navigateurs des postes clients (ce qui impliquerait que le proxy ne soit plus transparent), il faut faire du routage + nat, je vois pas trop d'autre solution !

Reply

Marsh Posté le 13-11-2008 à 10:35:12    

merci a tous pour vos reponse !
j'ai testé tes commandes iptables Reckoner et ca ne me laisse toujours pas passer un site si il est en HTTPS, je ne pige pas !! c'est vrai que je suis un peu largué sur les regles iptables mais bon jessai de me débrouiller en lisant des trucs a droite a gauche
sinon tu me disais que j'avais des regles qui se superposaient ? lesquels ? et surtout ca a une incidence sur quelque chose ou pas ?
je sais que jen demande beaucoup mais la ca commence a faire un bon bout de temps que je travailles la dessus que je fais des tests et ca ne marche tjrs pas, mon patron commence a simpatienter et moi je commence vraiment a avoir envie de tout casser lol
 
merci encore
Cordialement
Niko

Reply

Marsh Posté le 13-11-2008 à 10:35:12   

Reply

Marsh Posté le 13-11-2008 à 14:59:06    

Ca n'a aucune incidence, t'en fais pas, c'est juste plus dur à la lecture et pour toi si tu modifies un jour ton archi.
 
Là ça ne marche pas parce que tu n'autorises pas tes clients à faire des requêtes DNS je pense... si tu essaies https://<ip_d'un_serveur_https> ça devrait marcher (avec un bon gros warning).
 
Si c'est le cas, ajoute une règle qui fait du nat source pour les requêtes dns des clients :
 
iptables -t nat -A POSTROUTING -i eth0 -o eth1 -d <ip_de_ton_dns_utilise_par les clients> -p udp --dport 53 -j MASQUERADE  
 
Mais attention : ma solution fait en sorte que les clients sortent en https directement, sans passer par le SQUID. Tu es bien d'accord là-dessus ?

Reply

Marsh Posté le 13-11-2008 à 15:38:51    

oui c'est exactement ca que je veux je vais tester ca rapidement et je vais voir ce que ca donne.
 
Pour ce qui est de la lenteur je suis entrain dessayer de modifier la valeur de url_rewrite_children, je l'ai augmenté et mainteannt quand je relance squid, squidguard met un temps interminable a me refaire mes BDD pour les blacklists lol je vais attendre encore un peu et je vais voir ce que ca donne sinon je baisserais et reessayerais. Je vous tiens au courant de mon avancement
 
Merci encore pour les reponses rapide :D
 
Niko

Reply

Marsh Posté le 13-11-2008 à 16:32:24    

Bon alors j'ai fais un test avec ta commandes iptables mais HTTPS ca ne passe toujours pas, je vais refaire d'autre tests.
Mais enfaite quand je saisis ta ligne : iptables -t nat -A POSTROUTING -i eth0 -o eth1 -d <ip_de_ton_dns_utilise_par les clients> -p udp --dport 53 -j MASQUERADE  
pour l'ajouter a iptables il me marque : can't use -i with POSTROUTING
donc je suis obligé denlever cette option car iptables ne veut pas prendre cet option

Reply

Marsh Posté le 14-11-2008 à 15:13:28    

HELLO
bon je ne trouve toujours rien !! je suis dans la galere, mon squid est lent et le HTTPS ne passe pas, si quelqu'un aurait le courage de me donner un iptables complet pour mon squid a savoir que mon squid se trouve entre mon routeur FAI et ma passerelle, il est en transparent, eth0 donne sur le LAN et eth1 donne sur internet
de plus j'ai remarque que quand je redemarrais mon squid il marquait "initializing https proxy context", je ne sais pas si c'est bon ou mauvais ??
 
Merci beaucoup
Nikofybc

Reply

Marsh Posté le 14-11-2008 à 16:56:17    

Oui, j'ai fait un mauvais copier coller, enlève le -i xxx et mets les deux règles de masquerading (https+dns).

Reply

Marsh Posté le 14-11-2008 à 22:51:48    

Ce que je préconise
Squid en transparent pour le port 80 (regle iptables)
Pas de NAT pour le lan vers l'exterieur
le HTTPS est géré par un proxy.pac (parametrage auto envoyé par le DHCP)

Reply

Marsh Posté le 15-11-2008 à 12:53:44    

splurf a écrit :

Ce que je préconise
Squid en transparent pour le port 80 (regle iptables)
Pas de NAT pour le lan vers l'exterieur
le HTTPS est géré par un proxy.pac (parametrage auto envoyé par le DHCP)


 
Dans ce cas autant ne pas mettre http en transparent. Le but est -j'imagine- de ne pas à avoir de conf à passer côté client.

Reply

Marsh Posté le 15-11-2008 à 14:51:51    

Le but est en effet de ne pas avoir de conf à passer côté client et SURTOUT de permettre aux clients DHCP n'honorant pas l'option de surfer en HTTP.

Reply

Marsh Posté le 20-11-2008 à 10:34:45    

oui voila moi je ne veux pas de conf sur les postes client, mais le PAC est un fichier qui balance les infos directement aux clients donc normalement ca pourrait le faire, mais je ne trouve pas d'infos sur un .pac pour un squid.
Sinon mon squid est toujours aussi lent :s pas de soluce ??
 
Merci pr ttes vos reps ;)
Niko

Reply

Marsh Posté le 22-11-2008 à 00:30:32    

Salut je viens te poster mon iptables que j'utilise pour squid et qui marche niquel ( https, ect...) je te mais aussi mon squid.conf qui marche sans problème pour moi.
 
Le squid.conf :  
 

Code :
  1. acl QUERY urlpath_regex cgi-bin \?
  2. acl CLIENTS src 128.13.0.0/255.255.0.0
  3. acl manager proto cache_object
  4. acl localhost src 127.0.0.1/255.255.255.255
  5. acl to_localhost dst 127.0.0.0/8
  6. acl SSL_ports port 443 563 80 70 210 3128 1025-65535 280 488 591 777
  7. acl Safe_ports port 80 443 563
  8. acl CONNECT method CONNECT
  9. acl msnlogin dstdomain nexus.passport.com
  10. no_cache allow all
  11. http_access allow manager localhost all
  12. http_access allow manager all CLIENTS
  13. http_access allow !Safe_ports
  14. http_access allow CONNECT !SSL_ports
  15. http_access allow localhost
  16. icp_access allow all
  17. miss_access allow all
  18. htcp_access deny all
  19. http_port 3128 transparent
  20. minimum_object_size 0 KB
  21. maximum_object_size 4096 KB
  22. access_log /var/log/squid/access.log squid
  23. cache_log /var/log/squid/cache.log
  24. cache_store_log /var/log/squid/store.log
  25. error_directory /etc/squid/errors
  26. cache_effective_user squid
  27. cache_effective_group squid
  28. visible_hostname PROXY


 
Le script iptables :  
 

Code :
  1. # Configuration réseau de la machine
  2. #Activation du forwarding
  3. echo 1 > /proc/sys/net/ipv4/ip_forward
  4. # Nous vidons toutes les chaines
  5. iptables -F
  6. # Nous supprimons les chaines non standards
  7. iptables -X
  8. # Par defaut tout est ferme
  9. iptables -P INPUT DROP
  10. iptables -P OUTPUT DROP
  11. iptables -P FORWARD DROP
  12. # reinitialisation table NAT
  13. iptables -t nat -F
  14. iptables -t nat -X
  15. iptables -t nat -P PREROUTING ACCEPT
  16. iptables -t nat -P POSTROUTING ACCEPT
  17. iptables -t nat -P OUTPUT ACCEPT
  18. # Translation d'adresse pour tout ce qui sort vers l'internet
  19. iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
  20. # La machine locale est sure
  21. iptables -A INPUT  -i lo -j ACCEPT
  22. iptables -A OUTPUT -o lo -j ACCEPT
  23. # Resolution DNS pour les machines du LAN
  24. iptables -A FORWARD -i eth0 -o eth0 --protocol udp --source-port 53 -j ACCEPT
  25. iptables -A FORWARD -i eth0 -o eth0 --protocol udp --destination-port 53 -j ACCEPT
  26. iptables -A FORWARD -i eth0 -o eth0 --protocol tcp --source-port 53 -j ACCEPT
  27. iptables -A FORWARD -i eth0 -o eth0 --protocol tcp --destination-port 53 -j ACCEPT
  28. # On permet toutes les connexions sur le LAN depuis le firewall
  29. iptables -A INPUT -i  eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
  30. iptables -A OUTPUT -o eth0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
  31. # On permet toutes les connexions sur le firewall depuis le LAN
  32. iptables -A INPUT -i  eth0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
  33. iptables -A OUTPUT -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
  34. # On accepte toutes les liaisons firewall-Internet
  35. iptables -A OUTPUT -o eth0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
  36. # On accepte les liaisons Internet-firewall deja etablies
  37. iptables -A  INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
  38. # On accepte toutes les liaisons LAN-Internet
  39. iptables -A FORWARD -i eth0 -o eth0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
  40. # On accepte les liaisons Internet-LAN deja etablies
  41. iptables -A FORWARD -i eth0 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
  42. #################  PROXY ################
  43. #(on fait une redirection de port 80 vers le port 8080 ( proxy ) pour que cela soit transparent pour les utilisateurs)
  44. iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
  45. #(on autorise tous les paquets entrant par notre interface eth0 dont le port de destination est le 80 et utilisant du TCP comme protocol)
  46. iptables -A OUTPUT -o eth0 -p tcp --dport 80 -j ACCEPT
  47. iptables -A INPUT -i eth0 -p tcp --sport 80 -j ACCEPT
  48. #(on autorise les autres postes à configurer le proxy à distance)
  49. iptables -A INPUT -i eth0 -p tcp --dport 10000 -j ACCEPT
  50. iptables -A OUTPUT -o eth0 -p tcp --sport 10000 -j ACCEPT
  51. #(on autorise le serveur à interroger le serveur DNS afin de pouvoir, en cas de requêtes d-un client, résoudre les noms de domaines demandés par le client)
  52. iptables -A INPUT -i eth0 -p udp --sport 53 -j ACCEPT
  53. iptables -A OUTPUT -o eth0 -p udp --dport 53 -j ACCEPT
  54. # Fin du fichier


 
 
 
Voilà j'espère que cela pourra t'aider.
 
cordialement,micko

Reply

Marsh Posté le 24-11-2008 à 11:17:40    

Merci c'est genial micko, je test tout ca et je te tiens au courant si mon probleme est résolu ;)
Niko

Reply

Marsh Posté le 24-11-2008 à 18:15:42    

Mais de rien, en espérant que cela puisse t'aider :)

Reply

Marsh Posté le 27-11-2008 à 09:48:27    

Beh pour l'instant ca ne change rien, je pense que je vais bientot jetter l'éponge je ne trouve aucune soluce...

Reply

Marsh Posté le 27-11-2008 à 13:46:10    

Bas si tu a appliquer exactement le fichier pour l'iptable il n'y-a aucune raison pour que cela ne marche pas sachant que moi je n'ai aucun soucis, tu aurais pas un autre pare feu ? ou un routeur ne laisant pas passé ?

Reply

Marsh Posté le 30-11-2008 à 20:47:50    

j'ai utilisé ça chez moi (jusqu'au dernier update debian qui a changé la version de squid, et la flemme de la modifier pour réactiver).
Si tu fais du forward avec iptables du port https, il ne devrait pas y avoir de prob.
Pour la partie DNS, tu ne devrait pas laisser tes clients y aller directement, mais plutôt installer un bind en DNS cache sur ta passerelle, et l'autoriser lui à se connecter sur internet.
Sinon, poste (en mode 'fixed') le résultat d'un iptables -L.
Enfin, si ca fonctionne toujours pas, tu peux définir une cible spécifique pour iptables qui loggue tout. Tu pourras ensuite plus facilement debugguer ce qui pose problème.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed