Mettre un place un filtrage avec PfSense

1 Introduction

Voici le contexte : un wifi est proposé à des personnes gratuitement mais le problème est que la seule « sécurité » est une personne qui donne la clé wpa2 mais les personnes connecté au wi-fi peuvent aller sur des sites pornographique, des sites de piratages … mais sachant que la connexions appartient à la Communauté de Commune des Olonnes elle est considéré comme responsable. Les objectifs sont donc :

– une solution complètement transparente pour les utilisateurs
– un filtrage d’URL via catégories (pornographie, téléchargement illégal)
– un filtrage protocolaire (P2P…)
– anti-virus de flux
– logs
– en option, outil d’analyse

PfSense est un routeur / pare-feu open source basé sur FreeBSD. Il a pour particularité de gérer nativement les VLAN (802.1q). Et dispose de très nombreuses fonctionnalités tels que faire VPN ou portail captif. Dans cette documentation nous verons comment mettre en place un proxy avec PfSense.

2 Installation et configuration de PfSense

2.1 Prérequis

Un serveur ou ordinateur disposant d’au moins deux cartes réseaux. Une pour l’interface LAN (du côté du réseau local) et l’autre pour l’interface WAN (du côté du réseau relié à internet). Vous pouvez bien entendu utiliser un serveur virtuel. Mais cela pourra poser des problèmes au niveau des interfaces.

Le clavier français est en azerty, vous aurez donc besoin de connaître l’emplacement des touches du clavier anglais (qwerty) car lors de l’installation et la configuration via la ligne de commande le clavier est en qwerty. Et malheureusement même en modifiant les options lors de l’installation le clavier azerty n’est pas pris en compte.

2.2 Installation de PfSense

Lorsque le premier écran apparaît choisissez la première options (« Boot Multi User [enter] ») (appuyez soit sur entrer soit attendez la fin du compte à rebour)

install1

Lors du menu suivant presser la touche « I »

install2

sélectionner « Accept these Settings » (en appuyant sur la flèche du bas ) et appuyez sur entrer :

install3

selectionner ensuite en appuyant sur la flèche du bas « Quick/Easy Install »

install4

accepter le fait que l’installation par défaut va supprimer complètement la configuration actuelle(a ne pas faire si vous avez déjà des donnés sur la machine.

install5

Choisissez le noyau standard (« Standard Kernel ») et appuyez sur « entrer »

install6

à l’écran suivant appuyer sur reboot pour continuer l’installation et éjecter le liveCD

install7

Dans mon cas je n’ai pas de Vlan à mettre en place donc je répond « n » à la question « Do you want to set up VLANs now [y|n] ? « 

install8

répondez « a » pour le nom de l’interface « WAN »

install9

une fois que l’interface wan est connecté appuyez sur « entrer »

install10

répéter l’opération pour l’interface LAN. répondez « y » à la question « Do you want to proceed [y|n]? »

install11

2.3 Configuration des IP

Dans le menu suivant choisissez l’option n°2 pour configurer les interfaces

install12

nous allons respecter le plan réseaux suivant :

lan : 172.16.10.254

wan : dhcp du réseau de test en 10.0.0.0/24 a fixer au moment du passage en production

topographie

2.4 configuration de l’interface web

Accéder à l’interface web en entrant l’ip de la patte lan dans un navigateur pour moi 172.16.10.254 vous arrivez sur la page de connexion de PfSense dont les identifiants sont :

login : admin
mot de passe : pfsense

configweb1

vous voici maintenant dans PfSense pensez a changer de mot de passe (System>User Manager)

3 Installation et configuration d’un proxy squidguard

nous allons mettre en place le proxy pour empècher que les utilisateur aille sur des sites dangereux,illégaux ou inaproprié

3.1 Téléchargement du package

Allez dans System > Packages > et cliquez sur l’onglet Available Packages

configproxy1

recherchez dans la liste des paquets celui dont le nom est « squidGuard » et « squid »
et cliquez sur les petites icônes à coté de leurs description ( 1 et 2 sur l’image)

configproxy2

pour chacun d’entre eux confirmer que vous voulez les installer :

configproxy3

3.2 Mise en place du filtrage des URL

Pour filtrer les urls nous allons utiliser cette blacklist :www.shallalist.de/Downloads/shallalist.tar.gz
munis de ce lien allez dans Services>SquidGuard Proxy puis scroller vers le bas jusqu’a atteindre la partie « Blacklist Options », vous cochez la case a coté de « Blacklist » et entrer l’url de votre Blacklist au niveau du champ « Blacklist URL » et cliquez sur « save »

configproxy4

une fois que c’est fait il faut télécharger la black list, aller dans l’onglet black list et cliquer sur Download

configproxy5

cette procédure n’est pas automatique avec pfsense

par défaut le proxy bloque toutes les catégories d’url nous allons donc lui spécifier qu’elles catégorie d’url nous ne voulons pas (dans mon cas je veux interdire la pornographie et les sites de piratage.
Nous allons donc commencer par autoriser toutes les catégories puis nous interdirons les catégories que nous ne voulons pas :
étapes un, accèder aux catégories , aller dans l’onglet « Common ACL » et cliquez sur « Target Rules List »

configproxy6

tout en bas de la liste de la liste vous avez la catégories « Default access [all] » qui est a deny passez le à « allow »

configproxy7

nous allons appliquer les modifications :

allez en bas de la page et cliquer sur « save » et sur « save » quand la page des common ACL cliquez sur Save en bas de page.Ensuite passez dans l’onglet « General sttings » et désactiver puis réactiver le proxy.

3.3 Mise en place du filtrage par protocole

Pour cela nous allons mettre en place le paquet snort. Allez dans System > Package > Available Packages, choisir le package Snort dans la liste et l’installer (voir squid si vous ne savez plus)

3.3.1 Configuration initiale de Snort et mise à jour

Il est nécessaire de télécharger un jeu de règles afin de pouvoir ensuite les appliquer au filtrage de votre contenu. Vous disposez de plusieurs jeux de règles qui sont soit payants, soit gratuits. Puis allez dans Services > Snort > Global Settings.

config filtrage protocole

Installer les jeux de règles (Snort Community et Emerging Threat), ces jeux de règles sont moins stables que les règles fournies par Snort et produisent beaucoup plus de faux positifs. Il faut bien prendre soin, dans un premier temps, de ne pas bloquer les trames identifiées par le filtre.

Donc dans la page Global Settings choisissez « Install Snort Community rules » et « Install emerging Threats rules » (la case du haut pour ETOpen. Pour finir scroller vers le bas et cliquer sur « Save »

Allez ensuite dans l’onglet Updates et cliquez sur « Update » :

config filtrage protocole2

3.3.2 Configuration d’une l’interface

Afin de pouvoir utiliser vos règles, il est nécessaire de les appliquer sur une interface de votre firewall. Il s’agit assez souvent de l’interface WAN, mais certaines règles peuvent aussi s’appliquer à d’autres interfaces (LAN, DMZ, …).

allez dans Services > Snort > Snort Interfaces et cliquez sur le petit « + »

config filtrage protocole3

dans le premier onglet qui s’ouvre et changer les réglages comme suis :

config filtrage protocole4

ensuite scroller vers le bas et cliquer sur le bouton « Save » et éditer le paquet en appuyant sur le « e » haut bout de la descritpion
allez dans l’onglet « LAN Categories » puis sélectionner dans dans la liste les règles que vous voulez appliquer cliquez ensuite sur Save en haut de la liste

config filtrage protocole5

3.2.3 définition de la pass list

Dans snort il éxiste une pass list qui permet de ne jamais bloquer certaines ip le problèmes si on veut bloquer le peer to peer c’est que l’hote du réseau réalisant le téléchargement ne peut être bloqué car il figure dans la pass list nous allons donc créer une pass list qui ne contient pas le réseau où l’on veut bloquer le peer to peer. Dans Snort (Services>Snort) allez dans l’onglet « Pass Lists » et cliquez sur l’icône avec un « + ».

config antivirus 4

donnez un nom à votre pass lists et une description et décochez la case en face de Local Network comme ceci

config filtrage protocole7

nous allons maintenant l’affecter, éditez l’interface (icône avec dans l’onglet « Snort Interfaces » dans la partie « Choose the networks Snort should inspect and whitelist » au niveau de « Pass list » choisissez votre liste puis cliquez sur Save et redémarrer l’interface à coter de ENABLE dans le menu des interfaces.

config filtrage protocole8

3.3.4 La Suppress List

Dans snort on bloque tous ce qui génère une alerte, or snort a tendance a faire parfois des alertes pas très grave (exemple une trame http non exploitable par qui que ce soit) ce qui génère donc des faux positifs pour éviter cela il existe une liste ou l’on peut ajouter ce qui a généré une alerte.
Allez dans l’onglet alerte de snort vous pouvez alors ajouter l’alerte en elle même [A] ou quand elle ce produit avec une certaine ip en destination[B]/source[C] :

config filtrage protocole9

 

si vous n’avez pas déjà de suppress list la list est ajouté a l’interface, je vous conseil de la redémarrer dans l’onglet interface.
Voici une liste qui limitera les faux positifs :
#(http_inspect) NO CONTENT-LENGTH OR TRANSFER-ENCODING IN HTTP RESPONSE
suppress gen_id 120, sig_id 3

#(http_inspect) HTTP RESPONSE GZIP DECOMPRESSION FAILED
suppress gen_id 120, sig_id 6

#(http_inspect) INVALID CONTENT-LENGTH OR CHUNK SIZE
suppress gen_id 120, sig_id 8

#(http_inspect) DOUBLE DECODING ATTACK
suppress gen_id 119, sig_id 2

#(http_inspect) JAVASCRIPT WHITESPACES EXCEEDS MAX ALLOWED
suppress gen_id 120, sig_id 10

#(http_inspect) IIS UNICODE CODEPOINT ENCODING
suppress gen_id 119, sig_id 7

#(http_inspect) JAVASCRIPT OBFUSCATION LEVELS EXCEEDS 1
suppress gen_id 120, sig_id 9

#(spp_ssl) Invalid Client HELLO after Server HELLO Detected
suppress gen_id 137, sig_id 1

#(http_inspect) BARE BYTE UNICODE ENCODING
suppress gen_id 119, sig_id 4

#(http_inspect) UNKNOWN METHOD
suppress gen_id 119, sig_id 31

#(http_inspect) MULTIPLE ENCODINGS WITHIN JAVASCRIPT OBFUSCATED DATA
suppress gen_id 120, sig_id 11

#(http_inspect) HTTP RESPONSE HAS UTF CHARSET WHICH FAILED TO NORMALIZE
suppress gen_id 120, sig_id 4

#FILE-IMAGE Directshow GIF logical width overflow attempt
suppress gen_id 1, sig_id 27525

#(http_inspect) UNESCAPED SPACE IN HTTP URI
suppress gen_id 119, sig_id 33

#PROTOCOL-DNS TMG Firewall Client long host entry exploit attempt
suppress gen_id 3, sig_id 19187
pour la rajouter allez dans l’onglet Suppress cliquer sur le petit icône avec un « e » ajouter le texte précédant dans la partie « Apply suppression or filters to rules. Valid keywords are ‘suppress’, ‘event_filter’ and ‘rate_filter’. » puis cliquer sur « Save » et redémarrer l’interface

3.4 Mise en place d’un antivirus de flux

L’installation de Squid 3 dans PfSense embarque maintenant l’antivirus ClamAV. Si vous aviez installé HAVP, supprimez le, il ne sert plus. Maintenant Squid communique avec CalmAV par l’intermédiaire de C-ICAP. L’installation du paquet Squid, installe tous ce qu’il faut. Donc rajouter squid3 via le menu d’installation des paquets.
Première étape modifier la configuration dans l’onglet:
Service > Proxy server > Antivirus

Au niveau de « Enable Manual Configuration  » passer la combo box à « enabled »

config antivirus 1

ensuite cliquez sur « load Advanced » pour charger les fichier de configuration.

Advanced options > squidclamav.conf changer la directive redirect (vous l’éditez en cliquant sur « Advanced »
exemple :

config antivirus 2

pour vérifier que l’url est bon, entrer l’url dans votre navigateur :

config antivirus 3

Ensuite Advanced options > c-icap.conf ajouter à la fin (si ce n’est pas déjà le cas
« Service squid_clamav squidclamav.so  »

Et pour finir toujours dans cette configuration, supprimer la ligne
Manager:Apassword@ldap.chtsanti.net?o=chtsanti?mermberUid?(&(objectClass=posixGroup)(cn=%s))

et cliquer sur Save en bas de page

Ensuite nous allons modifier la configuration de squid en éditant le fichier /usr/local/pkg/squid_antivirus.inc pour cela aller dans Diagnostics>Edit File et suivez le chemin avec « Browse » vous devez obtenir ceci :

config antivirus 4

En effet la communication se fait en IPv6 et ne fonctionne pas, il faut basculer en IPv4. Pour cela remplacer:

icap_service service_avi_req reqmod_precache icap://[:::1]:1344 /squidclamav bypass=off
adaptation_access service_avi_req allow all
icap_service service_avi_resp respmod_precache icap://[:::1]:1344/squidclamav bypass=on
adaptation_access service_avi_resp allow all

par

icap_service service_avi_req reqmod_precache icap://localhost:1344 /squidclamav bypass=off
adaptation_access service_avi_req allow all
icap_service service_avi_resp respmod_precache icap://localhost:1344/squidclamav bypass=on
adaptation_access service_avi_resp allow all
puis cliquer sur Save a coté de « Browse » pour finir retournez dans Services> »Squid Proxy Server » onglet Antivirus.et désactiver puis réactivé l’antivirus.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *