Attention aux nouvelles applications Google Chrome pour vos proxy Squid. En effet vous risquez l’avoir des millions de lignes dans vos logs Squid… Cela risque de saturer votre partition de logs en très peu de temps…

1410326839.358      1 10.x.x.x TCP_DENIED/403 3496 CONNECT  mtalk.google.com:5228 - NONE/- text/html
1410326839.364      1 10.x.x.x TCP_DENIED/407 3663 CONNECT  mtalk.google.com:443 - NONE/- text/html

Et comment Squid réagit quand il n’y a plus de place sur sa partition de logs ? Il ne traite plus des nouvelles connexions… Et donc plus de surf….

Origine

Après quelques recherches, il s’agit d’une nouvelle application de Google Talk pour Chrome. Et donc n’importe quel utilisateur Windows avec les droits les plus basiques peut ajouter ce plugin…

Ce plugin se connecte sur mtalk.google.com sur les ports 443 et 5228. Mais au lieu que l’application teste de temps en temps de se connecter au serveur quand l’accès lui est refusé, elle fait des dizaines de requêtes à la seconde!

De la, un seul utilisateur qui laisse sa session en pause avec Chrome d’ouvert et c’est des Go de logs Squid de générés… L’application est mal conçue de ce côté là…

Voici la source pour ceux qui veulent quelques infos : Chromium Blog: Simplifying Cloud Messaging for app developers.

Résolution du problème

Deux choix s’offraient à moi :

  • Configurer le fail2ban pour analyser les logs Squid : afin de blacklister temporairement la machine posant problème pour éviter de saturer les logs. Mais cela risque de bloquer très souvent les personnes qui ne comprendront pas pourquoi ils sont bloqués… Voici une piste si besoin.
  • Configurer Squid pour éviter de logger ces accès. Dans ce cas, on fait une exception de log pour mtalk.google.com

J’ai choisi la 2e solution pour ne pas bloquer les utilisateurs mécontents.

Selon votre version de Squid, vous avez plusieurs solutions. Dans mon cas je suis sous Debian Wheezy avec Squid v2.7. Je vais donc faire une seule ACL sur le nom de domaine.

#ACL declaration for domains listing into a file
acl never_log_domains dstdomain "/etc/squid/never_log_list.txt"

#DENY LOGGIN FOR never_log_domains and apply to access.log
log_access    deny    never_log_domains
access_log /var/log/squid/access.log squid !never_log_domains

On va mettre le domaine mtalk.google.com dans le fichier /etc/squid/never_log_list.txt. Et on applique la règle de log_access.

Attention à bien préciser le format de log « squid » à la dernière ligne et pas « common » si vous voulez garder le même format de logs.

Si vous êtes en Squid version 3.2+ alors vous pouvez combiner les ACL pour être plus précis et faire une exception de log uniquement pour les access denied à mtalk.google.com. Comme ça les accès accordés sont loggés. Je vous conseille ce lien et celui-ci si cela vous intéresse.