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é.