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
_images/20120429_01.png

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