Squid est un service de proxy cache web. Il permet de filtrer, mettre en cache les informations et authentifier les utilisateurs. Cette solution puissante permet de pouvoir gérer efficacement son parc et de pouvoir répondre aux attentes du code des postes et télécommunications en matière de trafic Internet.
Sous Debian:
aptitude install squid
Sous FreeBSD:
cd /usr/ports/www/squid31
make install clean
Activez tous les modules dont vous avez besoin lorsque l’invite vous le demandera.
La configuration de SQUID est extrêmement vaste et bien documentée. Elle se trouve dans /etc/squid3/squid.conf (/usr/local/etc/squid/squid.conf.documented sous FreeBSD)
Pour inclure des fichiers il suffit d’utiliser la directive suivante.
include <path>
Je vous suggère de découper le fichier squid.conf de la manière suivante, pour plus de simplicité:
Port de connexion, spécifie le port et l’interface d’écoute. Par défaut toutes les adresses sur le port 3128
http_port <host>:<port>
Les ACL sont des listes de contrôle, comme celles de cisco, basées sur le niveau 3 de la couche OSI. On distingue plusieurs type d’ACL:
Exemple:
acl compta_service src 10.4.15.0/25
on définit l’ACL nommée compta_service de source 10.4.15.0/25, donc un réseau et son masque court sur une plage IP donnée.
Note: On aurait pu mettre une IP précise plutôt qu’en réseau
Exemple:
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1
Ici on autorise dans la règle to_localhost l’ensemble de la classe A 127.0.0.0/8 et son masque inverse. Comme vous le voyez on peut également utiliser l’IPv6 (::1)
Exemple:
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
Le fait de mettre plusieurs fois l’ACL correspond à une seule ACL avec plusieurs valeurs.
acl CONNECT method CONNECT
Cette règle est conseillée pour le TCP sinon cela risque de causer des soucis.
Vous pouvez également définir un mot à chercher dans une URL.
Exemple:
acl blacklisted_words url_regex porn warez blowjob
L’ACL blacklisted_words va faire un url_regex (expression régulière) et vérifier si les mots porn warez et blowjob sont dans l’URL.
On peut également bloquer des domaines (plus léger que la regex)
acl blacklisted_domains_cours dstdomain .facebook.com facebook.com .youtube.com
Cette ACL va bloquer les domaines distants facebook, youtube, dailymotion et deezer
Prenons un exemple afin de montrer l’application des ACL. Exemple:
http_access deny !sallemanip !cisco_service !admin
On refuse ici tous les trafics qui ne sont pas dans les ACL nommées. Le caractère “!” indique l’inverse d’une règle
http_access deny !Safe_ports
Ici de même on refuse les ports non autorisés
http_access deny CONNECT !SSL_ports
Et pour terminer on refuse les connexions sur un type de port donné
http_access deny blacklisted_domains !cisco_service
Cette règle va définir que l’on refuse les domaines blacklistés pour tout ce qui n’est pas matché par l’ACL cisco_service.
Pour configurer le mode transparent 2 choses sont à faire : dans le fichier squid.conf, rajouter la directive transparent dans la directive http_port
http_port 3128 transparent
Il faut ensuite appliquer une redirection de ports vers le port de squid
Sous Debian:
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 8080 -j REDIRECT --to-port 3128
Sous FreeBSD, dans le fichier de configuration de PacketFilter
rdr on em0 inet proto tcp from any to any port 80 -> 127.0.0.1 port 3128
pass in on $int_if inet proto tcp from any to 127.0.0.1 port 3128 keep state
pass out on $ext_if inet proto tcp from any to any port www keep state
Sous Debian:
service squid3 start
Sous FreeBSD:
service squid start
Squid intègre un filtrage de bande passante. Il faut savoir que cela consomme du CPU. Ici nous allons appliquer une limitation de bande passante à 1Mbit/sec pour chaque utilisateur du réseau 192.168.1.0/24
acl only1mbusers src 192.168.1.0/24
delay_pools 1
delay_class 1 3
delay_access 1 allow only1mbusers
delay_access 1 deny all
delay_parameters 1 512000/512000 -1/-1 128000/512000
Je vous invite à consulter le tutoriel du wiki de squid présent ICI pour plus d’informations
Pour vous authentifier sur un annuaire LDAP, il suffit de créer les directives suivantes dans le squid.conf
auth_param basic program /usr/lib/squid3/squid_ldap_auth -b "ou=people,dc=example,dc=com"
-h ldap.example.com
auth_param basic credentialsttl 3 hours
auth_param basic realm Merci de vous authentifier
auth_param basic children 5
Sous FreeBSD remplacer la ligne par:
auth_param basic program squid_ldap_auth -b "ou=people,dc=example,dc=com"
-h ldap.example.com
On va déjà installer les dépendances winbind, samba, krb5-config, krb5-user.
aptitude install winbind samba krb5-config krb5-user
Ouvrez le fichier /etc/samba/smb.conf
[global]
workgroup = DOMAIN
password server = activedirectory
realm = DOMAIN.TLD
netbios name = squid-gateway
server string = %h server
dns proxy = no
log file = /var/log/samba/log.%m
max log size = 1000
syslog = 0
panic action = /usr/share/samba/panic-action %d
security = domain
encrypt passwords = true
passdb backend = tdbsam
obey pam restrictions = yes
unix password sync = yes
passwd program = /usr/bin/passwd %u
passwd chat = *Entersnews*spassword:* %nn *Retypesnews*spassword:* %nn
*passwordsupdatedssuccessfully* .
pam password change = yes
load printers = no
idmap uid = 10000-20000
idmap gid = 10000-20000
template shell = /bin/bash
template homedir = /home/%D/%U
winbind separator = +
winbind enum groups = yes
winbind enum users = yes
winbind use default domain = yes
prefered master = no
Ouvrez maintenant le fichier /etc/krb5.conf
[libdefaults]
default_realm = DOMAIN.TLD
kdc_timesync = 1
ccache_type = 4
forwardable = true
proxiable = true
v4_instance_resolve = false
v4_name_convert = {
host = {
rcmd = host
ftp = ftp
}
plain = {
something = something-else
}
}
fcc-mit-ticketflags = true
[realms]
DOMAIN.TLD = {
kdc = activedirectory.domain.tld
admin_server = mail@domain.tld
default_domain = DOMAIN.tld
a_server = activedirectory.domain.tld
}
[domain_realm]
.domain.tld = activedirectory.domain.tld
domain.tld = activedirectory.domain.tld
[login]
[appdefaults]
pam = {
debug = false
forwardable = true
}
Pour terminer nous allons lier winbind au pam. Ouvrez /etc/nsswitch.conf
passwd: compat winbind
group: compat winbind
shadow: compat
hosts: files dns
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: nis
service winbind restart && service samba restart
net ads join -U administrateur
kinit -V administrateur@DOMAIN.TLD
Pour Winbind:
wbinfo -u
Pour Kerberos:
klist
Pour Samba:
smbclient -L localhost -U DOMAIN\Administrateur
Il existe un problème de droits bien connu, pour le résoudre tapez les commandes suivantes:
usermod -G winbind_priv squid
Terminer par ceci pour relancer les pipes d’authentification NTLM
killall ntlm_auth
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 5
Voici les ACL à implémenter:
acl msnp req_mime_type -i ^application/x-msn-messenger$
acl msnq rep_mime_type ^application/x-msn-messenger$
http_reply_access deny msnp
http_reply_access deny msnq
On bloque l’user-agent de skype. Sur les version récentes, skype ne présente plus d’UserAgent. Aucun des navigateurs Internet récent ne naviguant sans UserAgent, on va donc bloquer ceci.
acl Skype_UA browser ^skype^
http_access deny Skype_UA
acl invalidUserAgent browser S+
http_access deny invalidUserAgent