16
Lycée Le Castel 2014-2015 Proxy, Squid, SquidGuard et Kerberos Quentin Baptier

Proxy, Squid, SquidGuard et Kerberos · Un serveur Windows 2008 R2 possédant le rôle de ... (pour l'intégration à l'Active Directory). ... des contenus pas en accord avec la politique

  • Upload
    phamnga

  • View
    224

  • Download
    0

Embed Size (px)

Citation preview

Lycée Le Castel

2014-2015

Proxy, Squid, SquidGuard

et Kerberos

Quentin Baptier

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.