Proxy, Squid, SquidGuard et Kerberos

Transcription

Proxy, Squid, SquidGuard et Kerberos
Lycée Le Castel
Proxy, Squid, SquidGuard
et Kerberos
Quentin Baptier
2014-2015
Quentin Baptier
Proxy, Squid, Squidguard et Kerberos
2014-2015
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 ................................................................... 13
Test ........................................................................................................................................................ 13
Conclusion ............................................................................................................................................. 13
2
Quentin Baptier
Proxy, Squid, Squidguard et Kerberos
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
3
2014-2015
Quentin Baptier
Proxy, Squid, Squidguard et Kerberos
2014-2015
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 (Sadm) 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
4
Quentin Baptier
Proxy, Squid, Squidguard et Kerberos
2014-2015
Tableau récapitulatif du plan d'adressage
Nom de machine
r-ext
r-ext
r-ext
r-ext
r-int
r-int
r-int
r-int
s-web-ext
s-dns-ext
s-infra
s-proxy
s-appli
s-backup
s-puppet
s-win
s-mess
s-mon
s-cli
s-adm
Adressage
192.168.1.1
192.168.0.50
192.168.100.253
192.168.200.254
192.168.200.254
172.16.0.254
172.16.64.254
172.16.65.254
192.168.100.11
192.168.100.10
172.16.0.1
172.16.0.2
172.16.0.3
172.16.0.4
172.16.0.5
172.16.0.6
172.16.0.7
172.16.0.8
172.16.64.20
192.168.99.99
Réseau
N-linkv
N-ext
N-dmz
N-link
N-link
N-infra
N-user
N-wifi
N-dmz
N-dmz
N-infra
N-infra
N-infra
N-infra
N-infra
N-infra
N-infra
N-infra
N-user
N-adm
Nom d'alias
wpad
Adr. admin
192.168.99.11
192.168.99.10
192.168.99.1
192.168.99.2
192.168.99.3
192.168.99.4
192.168.99.5
192.168.99.6
192.168.99.7
192.168.99.8
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é".
5
Quentin Baptier
Proxy, Squid, Squidguard et Kerberos
2014-2015
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é
6
Quentin Baptier
Proxy, Squid, Squidguard et Kerberos
2014-2015
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 "authparam 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
7
Quentin Baptier
Proxy, Squid, Squidguard et Kerberos
2014-2015
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
8
Quentin Baptier
Proxy, Squid, Squidguard et Kerberos
2014-2015
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:
group:
shadow:
compat winbind
compat winbind
compat winbind
hosts:
networks:
files dns
files
protocols:
services:
ethers:
rpc:
db
db
db
db
netgroup:
nis
files
files
files
files
9
Quentin Baptier
Proxy, Squid, Squidguard et Kerberos
2014-2015
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"))
isInNet(host, "172.16.0.0", "255.255.255.0") ||
isInNet(host, "127.0.0.1", "255.255.255.255"))
{
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.
10
Quentin Baptier
Proxy, Squid, Squidguard et Kerberos
2014-2015
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 {
}
11
Quentin Baptier
Proxy, Squid, Squidguard et Kerberos
2014-2015
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/cgibin/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.univtlse1.fr/blacklist/ nous allons choisir l'archive qui les contient toutes : ftp://ftp.univtlse1.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
}
12
Quentin Baptier
Proxy, Squid, Squidguard et Kerberos
2014-2015
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:root db
Enfin nous compilons la base de données de SquidGuard :
#squidGuard -C all
Et nous redémarrons le service squid
#service squid3 restart
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é (smb.conf, nsswitch.conf, squid.conf, krb5.conf, squidGuard.conf).
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 noir. 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.
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.
13