PFSENSE

C’est quoi Pfsense ?

PFSense est un pare-feu open source basé sur FreeBSD. Il est très répandu dans les entreprises, il permet beaucoup de choses. Avec PFSense on peut faire du filtrage (évidemment c’est un pare-feu), il peut servir de DHCP, de DNS, il peut faire Proxy, VPN (IPsec, SSL, …), NAT, portail captif et énormément d’autre fonctionnalité.

PFSense dispose de son propre gestionnaire de paquets ce qui nous permet d’ajouter des fonctionnalités très simplement (comme par exemple ajouter la fonctionnalité serveur VoIP)

Installation de PfSense

On commence par télécharger l’ISO de PFSense, sur le site officiel : https://www.pfsense.org/download/

Ensuite on fait une nouvelle machine virtuelle et on lui applique deux carte réseaux configurée sur Bridge et l’autre en réseau interne .

Ensuite on ajoute le fichier ISO au lecteur et on lance la machine virtuelle.

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)

Lors du menu suivant presser la touche « I »

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

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

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.

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

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

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] ? «

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

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

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

Configuration des IP

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

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

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

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

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é

Téléchargement du package

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

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)

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

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 »

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

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 »

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

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.

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)

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.

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 » :

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 « + »

Changer les réglages comme suis :

https://brice-harismendy.ovh/media/markdownx/5261f44c-de55-496e-8535-be86836d97cc.png

Cliquer sur le bouton « Save » et éditer le paquet en appuyant sur le « e » haut bout de la description 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

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’hôte 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 « + ».

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

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.

La Suppress List

Dans Snort on bloque tous ce qui génère une alerte,  Snort a tendance a faire parfois des alertes de faux positif (exemple une trame http non exploitable par qui que ce soit) 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] :

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

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 »

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 :

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

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 :

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.

Règle de pare feu:

Exemple de règle de pare feu pouvant être applicable pour la partie développeur:

On commence par tout bloquer.

On autorise l’accès vers internet c’est à dire l’accès en http (80), https (443), dns (53) .

On rajoute l’ouverture du port 3306 pour la connexion à une base de données ainsi que le port 3389 pour l’accès au TSE.

On peut aussi rajouter une couche de sécurité en interdisant l’application en port source des port se situant entre 0 et 1023.

Related Post

StageStage

Lors de notre cursus professionnel, nous avons du réaliser deux stage durant les deux année du BTS SIO J’ai réaliser mes deux stages dans une entreprise d’informatique qui se nomme

error: