Quentin Baptier Proxy, Squid, Squidguard et Kerberos 2014-2015
2
Sommaire Mise en situation ..................................................................................................................................... 3
Architecture réseau dans sa globalité de GSB ..................................................................................... 3
Description de l’existant ...................................................................................................................... 3
Objectif ................................................................................................................................................ 4
Outils mis à notre disposition .............................................................................................................. 4
Schéma réseau de la solution proposée ............................................................................................. 4
Tableau récapitulatif du plan d'adressage .......................................................................................... 5
Le Proxy ................................................................................................................................................... 5
Définition ............................................................................................................................................. 5
Squid .................................................................................................................................................... 6
Définition ............................................................................................................................................. 6
Maquette de la solution proposé ........................................................................................................ 6
Configuration de s-proxy pour Squid .................................................................................................. 7
Kerberos .................................................................................................................................................. 8
Définition ............................................................................................................................................. 8
Configuration ....................................................................................................................................... 8
Samba .............................................................................................................................................. 8
Kerberos .......................................................................................................................................... 9
Winbind ........................................................................................................................................... 9
Script Wpad d'auto-configuration du proxy .......................................................................................... 10
Squidguard ............................................................................................................................................ 11
Définition ........................................................................................................................................... 11
Installation et configuration .............................................................................................................. 11
Automatisation de l'installation de la solution via Ansible ................................................................... 14
Test ........................................................................................................................................................ 15
Conclusion ............................................................................................................................................. 16
Quentin Baptier Proxy, Squid, Squidguard et Kerberos 2014-2015
3
Mise en situation
Architecture réseau dans sa globalité de GSB
Description de l’existant Le laboratoire GSB possède :
Un serveur Windows 2008 R2 possédant le rôle de contrôleur de domaine
Un serveur hébergeant les applications
Un serveur de messagerie
Un serveur de sauvegarde
2 serveurs d'infrastructure (DNS)
Un serveur web se trouvant dans une DMZ
4 Sous réseaux afin de sécuriser celui-ci
Un Firewall
Un serveur DHCP utilisé comme routeur.
Une borne wifi
Quentin Baptier Proxy, Squid, Squidguard et Kerberos 2014-2015
4
Objectif
L'objectif sera de mettre en place un serveur proxy sous Squid3 afin de pouvoir mettre en cache des pages web pour rendre plus rapide l'accès à Internet depuis le réseau local et filtrer les accès à Internet.
Outils mis à notre disposition
Afin de mettre en place cet solution nous utiliserons comme outils un serveur Windows 2008 R2 (S-win) disposant d'un Active Directory avec les comptes utilisateurs de gsb.lan ainsi un DNS. Nous mettrons en place une deuxième machine disposant d'un serveur DNS (S-infra) ainsi que d'un serveur de temps pour synchroniser l'ensemble des machines à la même heure. Nous disposerons aussi d'un accès à Internet, R-ext et R-int devront être configuré. Le serveur proxy (S-proxy)sera sous squid, disposera d'acls, de Squidguard afin d'établir des listes blanches et listes noirs de sites Internet et de la méthode d'authentification NTLM qui nécessite les paquets krb5-user, samba, winbind (pour l'intégration à l'Active Directory). Afin de faciliter l'installation du serveur Proxy, nous mettrons en place un serveur Ansible (S-adm) qui effectuera l'installation complète du serveur proxy (S-proxy) à partir d'un playbooks et de fichiers de configuration.
Schéma réseau de la solution proposée
Quentin Baptier Proxy, Squid, Squidguard et Kerberos 2014-2015
5
Tableau récapitulatif du plan d'adressage Nom de machine Adressage Réseau Nom d'alias Adr. admin
r-ext 192.168.1.1 N-linkv
r-ext 192.168.0.50 N-ext
r-ext 192.168.100.253 N-dmz
r-ext 192.168.200.254 N-link
r-int 192.168.200.254 N-link
r-int 172.16.0.254 N-infra
r-int 172.16.64.254 N-user
r-int 172.16.65.254 N-wifi
s-web-ext 192.168.100.11 N-dmz 192.168.99.11
s-dns-ext 192.168.100.10 N-dmz 192.168.99.10
s-infra 172.16.0.1 N-infra wpad 192.168.99.1
s-proxy 172.16.0.2 N-infra 192.168.99.2
s-appli 172.16.0.3 N-infra 192.168.99.3
s-backup 172.16.0.4 N-infra 192.168.99.4
s-puppet 172.16.0.5 N-infra 192.168.99.5
s-win 172.16.0.6 N-infra 192.168.99.6
s-mess 172.16.0.7 N-infra 192.168.99.7
s-mon 172.16.0.8 N-infra 192.168.99.8
s-cli 172.16.64.20 N-user
s-adm 192.168.99.99 N-adm 192.168.99.99
Le Proxy
Définition Un serveur proxy est un serveur ayant un composant logiciel qui fait l'intermédiaire entre deux hôtes
afin d'accélérer, surveiller, sécuriser et filtrer les échanges.
Filtrage
Un serveur proxy peut filtrer les échanges en créant des listes noires afin d'interdire l'accès à certains
site considérés comme malveillant ou interdit par la politique de l'entreprise.
Accélérer
Un serveur proxy permet d'accélérer les requêtes des utilisateurs grâce à sa fonction de mise en
cache des pages web. Ainsi ça permet d'accélérer le temps de réponse pour ces pages web.
Sécuriser
Un serveur proxy peut forcer l'authentification des utilisateurs afin de sortir du réseau de l'entreprise
et de pouvoir accéder à Internet. Cela permet aussi de dissuader certains utilisateurs à accéder à
des contenus pas en accord avec la politique de l'entreprise du fait de se sentir "traqué".
Quentin Baptier Proxy, Squid, Squidguard et Kerberos 2014-2015
6
Surveillance
Un serveur proxy permet aussi de surveiller les accès à Internet grâce aux logs que récupère le
serveur proxy. Dans les logs il y a l'adresse IP de l'utilisateur ainsi que son nom si il doit s'authentifier.
Anonymat
Un serveur proxy permet aussi l'anonymat car c'est lui qui interroge les pages web et non
l'utilisateur.
Squid
Définition Squid est un logiciel libre sous licence GNU GPL, il gère les protocoles HTTP, HTTPS, FTP et GOPHER.
Maquette de la solution proposé
Quentin Baptier Proxy, Squid, Squidguard et Kerberos 2014-2015
7
Configuration de s-proxy pour Squid Tout d'abord il faut commencer par installer Squid :
#aptitude install squid
Ensuite nous sauvegardons le fichier de configuration d'origine
# mv squid.conf squid.conf.old
Puis on régénère un fichier de configuration sans les commentaires
# cat squid.conf.old | egrep -v -e '^[[:blank:]]*#|^$' > squid.conf
Puis nous configurons Squid en ajoutant une acl pour le réseau "User" , ensuite on ajoute "auth-
param ntlm" afin de forcer les utilisateurs à passer par le proxy en s'authentifiant à leurs ouverture
de session à celui-ci. Cela est permit grâce à Kerberos.
#vim /etc/squid3/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
auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic
auth_param basic children 5
auth_param basic realm GSB
auth_param basic credentialsttl 2 hours
acl manager proto cache_object
acl web src 172.16.0.2/32
acl localhost src 127.0.0.1/32 ::1
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
acl lan src 172.16.64.0/24
acl ntlm proxy_auth REQUIRED
http_access allow lan ntlm
http_access allow ntlm
http_access allow manager localhost
http_access allow web
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access deny all
http_port 8080
cache_peer 10.121.32.69 parent 8080 0 no-query default
never_direct allow all
cache_effective_group winbindd_priv
coredump_dir /var/spool/squid3
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 0 20% 4320
redirect_program /usr/bin/squidGuard -c /etc/squid3/squidGuard.conf
redirect_children 10
cache_mem 16 MB
cache_dir ufs /var/squidcache 1024 16 256
Quentin Baptier Proxy, Squid, Squidguard et Kerberos 2014-2015
8
Kerberos
Définition
Le protocole Kerberos reponse sur un système de cryptographie à base de clés secrètes (clés symétriques
ou clés privées), avec l'algorithme DES. Kerberos partage avec chaque client du réseau une clé secrète
faisant office de preuve d'identité.
Le principe de fonctionnement de Kerberos repose sur la notion de tickets :
Afin d'obtenir l'autorisation d'accès à un service, un utilisateur distant doit envoyer son identifiant au
serveur d'authentification.
Le serveur d'authentification vérifie que l'identifiant existe et envoie un ticket initial au client distant,
chiffré avec la clé associée au client. Le ticket initial contient :
un clé de session, faisant office de mot de passe temporaire pour chiffrer les communications
suivantes
un ticket d'accès au service de délivrement de ticket.
Le client distant déchiffre le ticket initial avec sa clé et obtient ainsi un ticket et une clé de session. Grâce à son ticket et sa clé de session, le client distant peut envoyer une requête chiffrée au service de délivrement de ticket, afin de demander l'accès à un service.
Par ailleurs, Kerberos propose un système d'authentification mutuelle permettant au client et au serveur
de s'identifier réciproquement.
L'authentification proposée par le serveur Kerberos a une durée limitée dans le temps, ce qui permet
d'éviter à un pirate de continuer d'avoir accès aux ressources.
Configuration Pour mettre en oeuvre l'authentification des utilisateurs au proxy avec Kerberos il faut installer les
paquets krb5-user krb5-config samba-common samba winbind
Samba
#aptitude install samba samba-comon
Ensuite on configure samba : #vim /etc/samba/smb.conf [global]
workgroup = GSB realm = GSB.LAN
security = ADS
syslog = 10
log file = /var/log/samba.log.%m
max log size = 1000
encrypt passwords = yes
template shell = /bin/bash
idmap uid = 10000 - 20000
idmap gid = 10000 - 20000
winbind separator = +
winbind offline logon = false
winbind enum users = yes
winbind enum groups = yes
winbind use default domain = yes
Quentin Baptier Proxy, Squid, Squidguard et Kerberos 2014-2015
9
Kerberos
#aptitude install krb5-user krb5-config
On configure le fichier krb5.conf comme suit : #vim krb5.conf
[libdefaults]
default_realm = GSB.LAN
dns_lookup_realm = true
dns_lookup_kdc = true
[realms]
GSB.LAN = {
kdc = s-win.gsb.lan:88
admin_server = s-win.gsb.lan:749
default_domain = GSB.LAN
}
[domain_realm]
.gsb.lan = GSB.LAN
gsb.lan = GSB.LAN
[logging]
default = FILE:/var/log/krb5.log
kdc = FILE:/var/log/krb5kdc.log
admin-server = FILE:/var/log/krb5adm.log
[appdefaults]
pam = {
debug = true
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = true
krb4_convert = false
}
Winbind
# aptitude install winbind
Enfin on configure winbind en rajoutant le paramètre "winbind " à passwd group et shadow :
#vim /etc/nsswitch.conf
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.
passwd: compat winbind
group: compat winbind
shadow: compat winbind
hosts: files dns
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: nis
Quentin Baptier Proxy, Squid, Squidguard et Kerberos 2014-2015
10
Enfin il ne vous reste plus qu'à ajouter au domaine "s-proxy" :
#service samba restart && service winbind restart
#net join ads -U administrateur
Vous devriez avoir un message disant que s-proxy à bien joint le domaine.
Pour vérifier que cela a bien fonctionner faite un wbinfo -u et un wbinfo -g. Vous devriez voir les
utilisateurs du domaine ainsi que les groupes apparaitre.
Script Wpad d'auto-configuration du proxy Afin d'automatiser la configuration des navigateurs Internet pour que les utilisateurs passent par le
proxy nous allons créer un script appelé wpad.dat qu'on hébergera sur un serveur apache qui a pour
alias wpad.
Nous avons choisi d'héberger le fichier sur le serveur "s-infra" qui a pour alias "wpad".
#vim /var/www/wpad.dat
function FindProxyForURL(url, host)
{
if(isPlainHostName(host) ||
dnsDomainIs(host, ".gsb.lan"))
return "DIRECT";
else
return "PROXY 172.16.0.2:8080";
}
Redémarrer le service apache : #service apache2 restart
Vous n'avez plus qu'à configurer les navigateurs pour qu'ils détectent les paramètres de
configuration proxy pour le réseau. Les utilisateurs passeront donc obligatoirement par le proxy sans
s'en apercevoir.
Quentin Baptier Proxy, Squid, Squidguard et Kerberos 2014-2015
11
Squidguard
Définition Squidguard est un plugin qui se greffe sur un serveur Squid. Il permet la gestion plus poussée des ACL
par le biais notamment de la gestion de blacklists compilées. SquidGuard permet également de gérer
des accès horaires, des conditions plus poussées et la modification de la page par une autre page.
Installation et configuration Nous allons installer le plugin Squidguard à notre serveur Squid afin de contrôler les accès à certains
sites web.
#aptitude install squidguard
Le fichier de configuration de Squidguard se trouve dans /etc/squidguard/ déplacez le dans
/etc/squid3/ :
#mv /etc/squidguard/squidGuard.conf /etc/squid3/squidGuard.conf
Voici un exemple de configuration du fichier squidGuard.conf, dans celui-ci nous pouvons paramétrer
les horaires d'accès au web, où Squidguard va chercher sa base de données de liste noire et blanche,
ainsi que définir des acls d'accès :
#vim /etc/squid3/squidGuard.conf
#
# CONFIG FILE FOR SQUIDGUARD
#
# Caution: do NOT use comments inside { }
#
dbhome /var/lib/squidguard/db
logdir /var/log/squid3
#
# TIME RULES:
# abbrev for weekdays:
# s = sun, m = mon, t =tue, w = wed, h = thu, f = fri, a = sat
time workhours {
weekly mtwhf 08:00 - 18:00
date *-*-01 08:00 - 18:00
}
#
# SOURCE ADDRESSES:
#
src admin {
ip 172.16.0.2
}
src users {
ip 172.16.64.0/24
}
#
# DESTINATION CLASSES:
#
dest good {
}
Quentin Baptier Proxy, Squid, Squidguard et Kerberos 2014-2015
12
dest local {
}
dest porn {
domainlist porn/domains
urllist porn/urls
}
dest adult {
domainlist adult/domains
urllist adult/urls
}
dest violence {
domainlist violence/domains
urllist violence/urls
}
dest publicite {
domainlist publicite/domains
urllist publicite/urls
}
#
# ACL RULES:
#
acl {
admin {
pass any
}
users {
pass !porn !adult !publicite !violence
redirect http://s-proxy/interdiction.html
} else {
pass any
}
default {
pass local none
redirect http://s-proxy/cgi-
bin/blocked.cgi?clientaddr=%a&clientname=%n&clientuser=%i&clientgroup=%s&targetgroup=%t&url=%u
}
}
Enfin, il faut configurer squid3 pour qu'il invoque squidGuard en ajoutant ces lignes à la fin de /etc/squid3/squid.conf :
redirect_program /usr/bin/squidGuard -c /etc/squid3/squidGuard.conf
redirect_children 10
Ensuite nous téléchargeons la base de données de l'université de Toulouse : ftp://ftp.univ-tlse1.fr/blacklist/ nous allons choisir l'archive qui les contient toutes : ftp://ftp.univ-tlse1.fr/blacklist/blacklists.tar.gz et les installer là où c'est prévu, dans/var/lib/squidguard/db Dans le fichier configuration de Squidguard nous pouvons ajouter des "destinations" et les interdire : dest porn {
domainlist porn/domains
urllist porn/urls
}
users {
pass !porn !adult !publicite !violence
redirect http://s-proxy/interdiction.html
}
Quentin Baptier Proxy, Squid, Squidguard et Kerberos 2014-2015
13
Enfin on attribue les droits en écriture et lecture à l'utilisateur proxy sur la base de données de
Squidguard :
#cd /var/lib/squidguard/db/
#chown -R proxy:proxy db
Enfin nous compilons la base de données de SquidGuard :
# su proxy -c "squidGuard -c /etc/squid3/squidGuard.conf -C all"
Et nous redémarrons le service squid
#service squid3 restart
Quentin Baptier Proxy, Squid, Squidguard et Kerberos 2014-2015
14
Automatisation de l'installation de la solution via Ansible Afin de nous faciliter l'installation et la configuration de l'infrastructure nous allons automatiser cela
avec Ansible installé sur la machine s-adm, à l'aide de script en yml et bash et des fichiers de
configurations préconfiguré détaillant avant (smb.conf, nsswitch.conf, squid.conf, krb5.conf,
squidGuard.conf).
Playbook proxy.yml :
---
- hosts: s-proxy
tasks:
- name: Export Proxy
copy: src=/etc/ansible/files/apt.conf dest=/etc/apt/apt.conf
- name: Generation du putconf
copy: src=/etc/ansible/files/s-proxy.putconf dest=/root/
- name: Droit pour putconf
command: chmod +x /root/s-proxy.putconf
- name: Execution du putconf
shell: perl s-proxy.putconf
- name: Redemarrage carte réseau
command: ifup eth1
- name: Mise à jour des paquets
command: aptitude update -y
- name: Mise à jour
command: aptitude upgrade -y
- name: Installation de samba
apt: pkg=samba state=installed update_cache=true
- name: Installation samba-common
apt: pkg=samba-common state=installed update_cache=true
- name: Installation config smb.conf
copy: src=/etc/ansible/files/smb.conf dest=/etc/samba/smb.conf
notify:
- restart samba
- name: Installation de Kerberos
apt: pkg=krb5-user state=installed update_cache=true
- name: Installation Kerberos conf
apt: pkg=krb5-config state=installed update_cache=true
- name: Generation krb5.conf
copy: src=/etc/ansible/files/krb5.conf dest=/etc/krb5.conf
- name: Installation winbind
apt: pkg=winbind state=installed update_cache=true
- name: Generation nssiwtch.conf
copy: src=/etc/ansible/files/nsswitch.conf dest=/etc/nsswitch.conf
notify:
- restart winbind
- name: Ajout au domaine
command: net ads join -U administrateur%Ubaita89113
- name: Installation de Squid3
apt: pkg=squid3 state=installed update_cache=true
- name: Generation du squidconf
copy: src=/etc/ansible/files/squid.conf dest=/etc/squid3/squid.conf
notify:
- restart squid3
- name: Installation de squidguard
apt: pkg=squidguard state=installed update_cache=true
- name: Génération de squidguard
copy: src=/etc/ansible/files/squidGuard.conf dest=/etc/squid3/squidGuard.conf
- name: Copy du script de reception base de données
copy: src=/etc/ansible/files/liste.sh dest=/root/
- name: Rend executable le script
command: chmod +x /root/liste.sh
- name: Execution du script terminant l'installation
shell: ./liste.sh
handlers:
- name: restart squid3
service: name=squid3 state=restarted
- name: restart samba
service: name=samba state=restarted
- name: restart winbind
service: name=winbind state=restarted
Quentin Baptier Proxy, Squid, Squidguard et Kerberos 2014-2015
15
Script Liste.sh
#!/bin/bash
wget ftp://ftp.univ-tlse1.fr/blacklist/blacklists.tar.gz
tar xvzf blacklists.tar.gz
cp -r /root/blacklists/* /var/lib/squidguard/db/
rm -rf /root/blacklists/ /root/blacklists.tar.gz
mkdir /var/squidcache
chown -R proxy:proxy /var/squidcache
chown -R proxy:proxy /etc/squid3/*
chown -R proxy:proxy /var/lib/squidguard/db/*
chown -R proxy:proxy /var/log/squid3/*
chown -R proxy:proxy /var/log/squidguard/*
su proxy -c "squidGuard -c /etc/squid3/squidGuard.conf -C all"
service squid3 reload
Test Nous effectuerons les tests à partir d'une machine située dans le réseau N-user en 172.16.64.0/24. Un utilisateur se connectera à sa session Windows sur un poste, il utilisera un navigateur internet. Tout d'abord nous tenterons d'accéder à un site Internet qui se situe dans une liste noire. Puis nous pourrons tester la mise en cache du serveur Proxy en téléchargement un premier fichier et en calculant le temps de téléchargement. Puis on re-téléchargera le même fichier, et on comparera les
temps de téléchargement. Cela va permettre de voir l'efficacité de la mise en cache du serveur proxy.
Configuration automatique du navigateur internet
Impossible d'allez sur un site qui se situe en liste noire
Quentin Baptier Proxy, Squid, Squidguard et Kerberos 2014-2015
16
Conclusion Grâce à nos tests nous avons pu voir que la solution est parfaitement fonctionnelle et améliore la
vitesse des accès web grâce à la mise en cache des pages web par Squid ainsi que le contrôle d'accès
au contenu avec la mise en place de Squidguard et listes noires.