sommaire
Squid + SquidGuard
Configuration

La totalité des explications sur chaque directive est disponible sur le site de Squid

Configuration de Squid: /usr/local/squid/etc/squid.conf

Lancement du service squid au boot:

Copier le fichier squid dans /etc/init.d et créer unlien symbolique sur squid.init dans /etc/rc2.d (ln -s /etc/init.d/squid /etc/rc2.d/squid)
Ne pas oublier de rendre le fichier /etc/init.d/squid executable (chmod +x /etc/init.d/squid)

Utiliser SquidGuard pour la gestion des blacklist:

url_rewrite_program /usr/local/squid/bin/squidGuard -c /usr/local/squidGuard/squidGuard.conf
# ne jamais mettre concurrency au dela de 0 avec squidGuard sinon squidguard est bypassé
url_rewrite_children 60 startup=15 idle=15 concurrency=0

Création / autorisation des contrôles d'accès (acl):

Définir les ports sur lequel doit pouvoir aller Squid:

en https:
acl SSL_ports port 443 563 8443 2096 8080 11000 20454

en http simple:
acl Safe_ports port 80
acl Safe_ports port 85
acl Safe_ports port 21
acl Safe_ports port 443 563
acl Safe_ports port 70
acl Safe_ports port 210
acl Safe_ports port 280
acl Safe_ports port 488
acl Safe_ports port 591
...

Définir quels réseaux peuvent utiliser le service Squid:

acl LAN src 192.168.0.0/24
acl DMZ src 192.168.100.0/24

Accès pour les réseaux extérieur:

acl Exterieur proxy_auth REQUIRED

Une fois l'ensemle des ACL définies il reste à les autoriser: l'ordre est important, c'est la première concordance qui est appliquée.
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow LAN
http_access allow DMZ
http_access allow Exterieur
http_access deny all
http_reply_access allow all

Message d'erreur en français:

error_directory /usr/local/squid/share/errors/fr


Gestion snmp sur le port 3401 avec la communauté "public"en en lecture.
snmp_port 3401
acl manag_snmp src 192.168.0.0/24

acl snmppublic snmp_community public
snmp_access allow snmppublic manag_snmp


Rotation des logs:
La rotation des logs se fait via logrotate avec le fichier /etc/logrotate.d/squid

/var/log/squid/access.log /var/log/squid/cache.log
/var/log/squid/squidGuard.log
 /usr/local/squidGuard/log/squidGuard.log {
        weekly
        rotate 5
        compress
        postrotate
                /usr/sbin/squidrestart
        endscript
}

Authentification pour l'exterieur:
Tous les réseaux non définis après les ACL LAN et DMZ seront considérés comme venant avec l'ACL Exterieur

Création d'un utilisateur:
Un méthode simple se fait via htpasswd. Il en existe bien d'autres comme celle utilisant un LDAP
/usr/local/squid/sbin/htpasswd /usr/local/squid/etc/passwd username

La commande demande ensuite le mot de passe
Les couples d'identifiants sont stockés dans /usr/local/squid/etc/passwd

auth_param basic program /usr/local/squid/libexec/basic_ncsa_auth /usr/local/squid/etc/passwd
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours



Nombre de File Descriptor (FD):
Par défaut l'OS en met 1024 et squid se cale dessus.

Le nombre d'utilisateur influe sur ce paramètre, pour 100-120 utilisateurs il en faut environ 1300. Pour 350 environ 4000
En le passant à 8192 cela permet d'avoir un peu de marge
 => dans /etc/security/limits.conf en fin de fichier mettre:
*       -       nofile  8192

A la prochaine connexion vérifier via ulimit -n

Enfin il faut modifier le fichier /usr/local/squid/etc/squid.conf et y mettre
max_filedescriptors 8192

Puis relancer Squid

FTP:

Si le client HTTP fait du ftp anonyme la connexion se fait avec l'identifiants: anonymous et le mot de passe proxy@fredaria.org
ftp_user proxy@fredaria.org

En cas de problème avec les liens FTP de certains site (comme ceux d'edf)
Mettre la variable ftp_epsv à off
Plus d'information sur:
http://www.squid-cache.org/Doc/config/ftp_epsv/



Configuration de SquidGuard: /usr/local/squidGuard/squidGuard.conf

SquidGuard est là pour la gestion des accès aux sites web (via blacklist / whitelist) en fonction des utilisateurs (adresses ip) des plages horaires ...
Avec la configuration proposée, l'accès est autorisé à tous les sites sauf à ceux interdits


Position des blacklist / whitelist et du fichier de log:
dbhome /usr/local/squidGuard/db
logdir /var/log/squid

Les fichiers / répertoires des blacklist / whitelist doivent appartenir à l'utilisateur nobody et au groupe nogroup.

drwxr-xr-x 2 nobody nogroup 4096 2012-02-19 02:05 adult
drwxr-xr-x 2 nobody nogroup 4096 2008-01-09 13:31 agressif
drwxr-xr-x 2 nobody nogroup 4096 2008-01-09 13:31 audio-video

-rw-r--r-- 1 nobody nogroup 17179362 2012-02-19 02:05 domains
-rw-r--r-- 1 nobody nogroup 43106304 2013-06-10 08:31 domains.db
-rw-r--r-- 1 nobody nogroup        0 2012-02-19 02:05 expressions
-rw-r--r-- 1 nobody nogroup  1849724 2012-02-19 02:05 urls
-rw-r--r-- 1 nobody nogroup  3493888 2013-06-10 08:02 urls.db

Sans cela dans le fichier /var/log/squid/squidguard.log il y aura une entrée "Going into emergency mode" et aucun filtrage ne s'effectuera.
2014-05-15 14:26:32 [14827] Error db_open: Permission denied
2014-05-15 14:26:32 [14827] Going into emergency mode


Définition des sources: ici les adresses / plage ips, pour le reste voir la doc SquidGuard
Le nommage n'a aucun rapport avec celui définit dans Squid.

source LAN {
    ip        192.168.0.0/24
    ip        192.168.100.0/24

}

source Exterieur {
    ip    0.0.0.0/0
}

Les blacklist / whitelist:

acl    {

        destination whitelist_vip {

            urllist whitelist_vip/urls
            domainlist whitelist_vip/domains
        }

  #Cette liste contient des entrées de la liste phishing

        destination phishing {
           urllist phishing/urls
           domainlist phishing/domains
        }
}

urllist est là pour gérer un fichier d'url
domainlist pour un fichier contenant des domains complet
et enfin pour gérer des expressions régulières: expressionlist

Les fichiers de blacklist sont simple puisque ce sont des fichiers textes avec une entrée par ligne. Ces fichiers sont ensuite transformé en fichier .db utilisé par SquidGuard.

Les accès en fonction des sources et blacklist / whitelist:

LAN {
        pass whitelist_vip !phishing
        redirect 301:http://webproxy.fredaria.org/filtrage/Acces_Refuse.html
    }

default {
        redirect 301:http://webproxy.fredaria.org/filtrage/Acces_Refuse.html
        pass none
    }

LAN (correspond à la souce LAN) peut donc utiliser les entrées de "whitelist" par contre ce qui est contenu dans "phishing" est interdit. L'ordre a une importance. Tout ce qui est interdit est redirigé vers http://webproxy.fredaria.org/filtrage/Acces_Refuse.html avec le code d'erreur HTTP 301 (Moved Permanently).

Tout ce qui n'est pas défini au niveau des source tombe dans la catégorie default qui interdit tout accès via le pass none.


Configuration client:

Pour se faciliter la tache, éviter les GPOs, ou les actions manuels, il suffit d'utiliser la notion de WPAD (Web Proxy Auto-Discovery Protocol), un protocole supporté par la majorité des navigateurs internet. La méthode DNS WPAD est celle qui offre une grande
compatibilité OS/Navigateur.

Par défaut un navigateur est configuré pour "détecter automatiquement les paramètres de proxy pour ce réseau" (Mozilla Firefox).
 

Il cherche dans ce cas une entrée DNS wpad.nom_de_domaine => wpad.fredaria.org.
Ensuite il essaye de télécharger un fichier wpad.dat sur: http://wpad.fredaria.org/wpad.dat

Il faut donc sur le serveur DNS ajouter un pointeur A wpad.fredaria.org.
Créer un virtual host déservant wpad.fredaria.org

Et enfin créer le fichier wpad.dat comme suit:

function FindProxyForURL(url, host) {

        if (dnsDomainIs(host, ".fredaria.org") || isInNet(dnsResolve(host), "192.168.1.0", "255.255.255.0") || isInNet(dnsResolve(host), "192.168.2.0", "255.255.255.0")    return "DIRECT";
       
        if (isInNet(myIpAddress(), "192.168.2.0", "255.255.255.0"))    return "PROXY proxy1.fredaria.org:8080";
       
        return "PROXY proxy2.fredaria.org:8080"; 

}

La première ligne fait en sorte que pour le domaine fredaria.org et pour les machines des deux plages ip 192.168.1.0/24 et 192.168.2.0/24 le navigateur n'utilise pas le proxy (return "DIRECT";)
La seconde ligne indique que si le client est sur la plage ip 192.168.1.0/24 il utilise le proxy1.fredaria.org sur le port 8080
Sinon dans tous les autres cas il utilise un second proxy: proxy2.fredaria.org sur le port 8080

A chaque lancement du navigateur le fichier wpad.dat est rechargé.