Squid, mise en place d’un proxy¶
Cette installation est réalisée sur une debian6
Installation basique¶
Sur Debian comme souvent un petit tour dans apt permet de trouver rapidement ce qu’on cherche
apt-cache search squid
nous allons donc réaliser les étapes suivantes:
- installation de squid
- sauvegarde du fichier de conf (squid.conf)
- créer un fichier de conf ne comportant que l’essentiel (on supprime commentaire et lignes inutiles)
apt-get install squid
apt-get install sudo
cd /etc/squid
mv squid.conf squid.conf.old
cat squid.conf.old | grep -v ^# | grep -v ^$ > squid.conf
Si votre machine est dans un domaine et va jouer le rôle du proxy du domaine il:
- ajouter une déclaration acl (à la suite des autres déclarations acl)
acl VotreDomaine src 192.168.0.0/255.255.255.0
- et dire que le domaine a accès à internet (avant la dernierè ligne “http_access deny all”)
http_access allow VotreDomaine
Si votre machine ne fait pas partie d’un domaine mais juste d’un simple réseau il faut remplacer la ligne
http_access deny all
par
http_access allow all
Redémarrer le serveur pour prendre en compte les modifications
/etc/init.d/squid restart
Vous pouvez faire un test côté client en configurant un proxy:
- ip de votre machine debian proxy
- port 3128
vous pouvez maintenant utilisé votre navigateur paramétré avec le proxy pour aller sur internet via votre proxy
vous pouvez voir les logs de la connexion en réalisant
cd /var/log/squid
ls -ltr
Note
pour avoir accès aux serveurs internes soit vous modifiez la configuration proxy de votre client soit vous ajoutez dans le fichier squid.conf la ligen suivante: append_domain .mondomaine.net
Note
vous pouvez changer le port 3128 en modifiant la ligne dans squid.conf “http_port 3128” par par exemple “http_port 8080”
- les « acl » (Access Control List) permettent de définir, par exemple, une plage d’adresses IP, celles qui constituent notre réseau local, par exemple une acl regroupant tout les poste en 192.168.0.???
acl reseau_local src 192.168.0.0/24
- les « http_access » (restrictions) qui définissent l’autorisation ou l’interdit, pour une acl donnée.Par exemple autoriser l’acl reseau_local à avoir accès à internet
http_access allow reseau_local
Optimisation¶
Modification de la taille du cache¶
Pour cela il faut ajouter ou modifier dans squid.conf
cache_dir ufs /var/spool/squid 1024 256 256
Voici la signification des différentes valeurs :
- Type de stockage
- Emplacement du cache
- Taille totale du cache en MB
- Nombre de répertoires de niveau 1 et de niveau 2
Ensuite, il faut initialiser le cache avec ces commandes :
/etc/init.d/squid stop
squid -z
/etc/init.d/squid start
Création d’un cache supplémentaire¶
Création du répertoire sur le deuxième disque (ex : /sdb1)
mkdir /sdb1/squid
Affectation des mêmes droits que le répertoire du premier cache “/var/spool/squid” créé lors de l’installation
chmod 750 /sdb1/squid
chown proxy.proxy /sdb1/squid
Il faut ajouter ou modifier dans squid.conf
cache_dir ufs /var/spool/squid 1024 256 256
Puis
/etc/init.d/squid stop
squid -z
/etc/init.d/squid start
Optimisation¶
Vous pouvez modifier certains paramètres du fichier squid.conf
cache_mem 128 MB
maximum_object_size 15 MB
Attention
maximum_object_size 15 MB indique la taille maximal des objects en cache
SquidGuard¶
Squidguard permet de filtrer plus finement ce qui ce passe sur le proxy. Son principale utilisation permet:
- de bloquer des sites depuis une base d’url commune (site pornographique, youtube, ...)
- bloquer l’accès à internet suivant des plages horaires
Installation¶
comme souvent un petit tour dans apt permet de trouver rapidement ce qu’on cherche
apt-cache search squidguard
apt-get install squidguard
apt-get install sudo
Hint
si vous souhaitez installer squid et squidguard, un simple apt-get install squidguard suffit
une fois squidGuard installer il faut:
- télécharger et installer la liste des sites sensibles
- modifier la configuration de squid
- modifier la configuration de squidGuard
cd
wget ftp://ftp.univ-tlse1.fr/pub/reseau/cache/squidguard_contrib/blacklists.tar.gz
tar zxvf blacklists.tar.gz -C /var/lib/squidguard/db/
cd /var/lib/squidguard/db
mv blacklists/* .
chown -R proxy:proxy /var/lib/squidguard/db/*
find /var/lib/squidguard/db -type f | xargs chmod 644
find /var/lib/squidguard/db -type d | xargs chmod 755
modifier /etc/squid/squid.conf en ajoutant
redirect_program /usr/bin/squidGuard
redirect_children 10
épuration du fichier squidGuard.conf
cd /etc/squid/
mv squidGuard.conf squidGuard.conf.save
cat squidGuard.conf.save | grep -v ^# | grep -v ^$ > squidGuard.conf
voici un exemple de fichier squiGuard.conf
dbhome /var/lib/squidguard/db
logdir /var/log/squid
time workhours {
weekly mtwhf 08:00 - 16:30
date *-*-01 08:00 - 16:30
}
# DESTINATION CLASSES:
dest good {
}
dest local {
}
dest adult {
domainlist adult/domains
urllist adult/urls
expressionlist adult/expressions
redirect http://fr.barbie.com
}
acl {
default {
pass !adult
redirect http://fr.barbie.com
}
}
puis on va construire la base de squidguard
sudo -u proxy squidGuard -C all
mise à jours auto de la base squidGuard¶
un simple bash et contrab peut faire l’affaire
le fichier /root/bin/squid_blacklist_update.sh
TARGET=/var/lib/squidguard/db/blacklists
cd $TARGET || exit
# only run if squidGuard is active!
[ "`ps auxw | grep squid[G]uard`" ] || exit
rsync -az squidguard.mesd.k12.or.us::filtering $TARGET
for DIR in `ls $TARGET`
do
if [ -f $DIR/domains.include ]
then
TMP=$RANDOM
cat $DIR/domains $DIR/domains.include | sort | uniq > $DIR/domains.$TMP
mv -f $DIR/domains.$TMP $DIR/domains
fi
if [ -f $DIR/urls.include ]
then
TMP=$RANDOM
cat $DIR/urls $DIR/urls.include | sort | uniq > $DIR/urls.$TMP
mv -f $DIR/urls.$TMP $DIR/urls
fi
done
/usr/bin/squidGuard -c /etc/squid/squidGuard.conf -C all
# /usr/sbin/squidGuard -c /etc/squid/squidGuard.conf -u
chown -R proxy:proxy $TARGET
chown -R proxy:proxy /var/log/squid/squidGuard.log
sleep 5s
/usr/bin/killall -HUP squid
éditer crontab
crontab -e
et on ajoute
00 5 * * * sh /root/bin/squid_blacklist_update.sh
Identification¶
Il est possible d’ajouter un système d’identification pour avoir accès au proxy.
Le plus simple utilise un simple fichier user/password ou bien via l’ad
Identification simple¶
apt-get install apache2.2-common
Note
il faut le common d’apache pour avoir accès à la comme htpasswd
touch /etc/squid/users
htpasswd -b /etc/squid/users <nom de l'utilisateur> <mot de passe>
exemple
htpasswd -b /etc/squid/users user1 azerty
htpasswd -b /etc/squid/users user2 uiopqs
htpasswd -b /etc/squid/users user3 dfghjk
On peut tester le système d’identification
/usr/lib/squid/ncsa_auth /etc/squid/users
Il faut par la suite rentrer user password
nous allons modifier le fichier squid.conf afin
- d’ajouter les commandes d’identification
- d’ajouter une acl d’identification
- d’ajouter un http_access si l’identification est réussi
auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/users
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
acl users proxy_auth REQUIRED
http_access allow all users
Note
il faut mettre les auth_param en haut du fichier, acl à la fin des acl et remplacer http_access allow all par http_access allow all user
Identification via AD¶
l’installation et la configuration est plus complexe
apt-get install krb5-user krb5-config samba-common samba winbind sudo
modifier le fichier /etc/krb5.conf
[libdefaults]
default_realm = ADIMCOR.EU
dns_lookup_realm = false
dns_lookup_kdc = false
[realms]
ADIMCOR.EU = {
kdc = 192.168.0.1
kdc = 192.168.0.2
admin_server = 192.168.0.1
default_domain = ADIMCOR.EU
}
[domain_realm]
.adimcor.eu = ADIMCOR.EU
adimcor.eu = ADIMCOR.EU
[logging]
default = FILE:/var/log/krb5.log
kdc = FILE:/var/log/krb5kdc.log
admin-server = FILE:/var/log/krb5adm.log
[appdefaults]
pam = {
debug = false
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = true
krb4_convert = false
}
Note
les kdc représente les contrôleurs de domaines. admin_server correspond au contrôleur « Maître d’opérations » avec les 5 rôles « FSMO »
on va essayer d’obtenir un ticket kerberos pour un utilisateur de l’AD
# kinit -V user1@ADIMCOR.EU
Password for user1@ADIMCOR.EU:
Authenticated to Kerberos v5
Hint
la commande klist permet de visualiser la liste des tickets
On va par la suite modifier le fichier /etc/samba/smb.conf
[global]
workgroup = ADIMCOR
realm = ADIMCOR.EU
security = ADS
password server = 192.168.0.1 192.168.0.2
client use spnego = yes
client ntlmv2 auth = yes
syslog = 0
log file = /var/log/samba/log.%m
max log size = 1000
announce version = 4
announce as = Poste XP
dns proxy = No
idmap uid = 167771-335549
idmap gid = 167771-335549
winbind use default domain = Yes
invalid users = root
et aussi le fichier /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
chmod -R 777 /var/run/samba/winbindd_privileged
/etc/init.d/winbind restart
/etc/init.d/samba restart
Intégration au domaine
net ads join -U <un login d'Administrateur du domaine>
modification du fichier /etc/squid/squid.conf
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 5
auth_param ntlm keep_alive on
acl passwordad proxy_auth REQUIRED
http_access allow all passwordad
cache_effective_group root
L’authentification est fournir par les infos user / password (sans domaine)
Visualisation des logs du proxy¶
Plusieurs logiciels existent qui excellent dans ce travail de synthèse : Calamaris, Webalizer, Squid-Log-Analzer, SARG,….
A priori il n’y a pas de sonde nagios ... il faudrait voir pour en écrire une
pour SARG
apt-get install sarg
éditer le fichier /etc/squid/sarg.conf
language French
access_log /var/log/squid/access.log
il faut lancer régulièrement sarg pour générer les pages en plaçant dans la crontab la ligne suivante
/usr/bin/sarg -n -o /home/squid/logs/ -i
il faudra configurer un serveur web pour visualiser les pages générées
il faudrait voir pour avoir un outil qui nous donne ce qui se passe en instantanée