Reseau:pfsense

De Wiki des Responsables Techniques du 85
Révision datée du 24 février 2016 à 09:40 par Pierre-Alexandre (discussion | contributions) (Configuration SquidGuard (Proxy Filter))
Aller à : navigation, rechercher
Pfsense.jpg

Crédits

  • Auteur de la doc : Pierre-Alexandre RÉTHORÉ

Présentation

pfSense est une distribution open source sous licence BSD. Elle est gratuite et permet de passer un simple PC en pare-feu. Il propose de nombreux services, entre autres : Firewall (il s'agit de celui de FreeBSD donc PacketFilter), Serveur DHCP, DNS, portail captif, dashboard, VPN, et bien d'autres. De plus, il dispose d'un service d'installation d'addons extrêment simplifié par rapport à la distribution IPCop par exemple (sur laquelle cela n'est pas très compliqué non plus).

Après une installation en mode console, il s'administre simplement depuis une interface web. Il peut être installé sur un ordinateur personnel ou bien un serveur, il permet entre autre de réaliser un portail captif ou bien réaliser du Load Balancing MultiWAN (pour utiliser deux connexion internet avec deux FAI différents pour avoir une redondance et ainsi éviter des pannes ADSL). La quasi-totalité des configurations possible avec pfSense se font sur son interface web. Dans ce tutoriel, une exception sera faites lors de la mise en place d'une page de redirection lors du blocage d'une URL du proxy.

Site officiel de pfSense : https://www.pfsense.org/

Matériel requis

Le matériel et la configuration minimale requise sur une machine :

  • 2 interfaces réseaux minimum
  • 2 Go de RAM
  • 4 Go de stockage (Mais il est préférable de prévoir un volume)
  • CPU : Atom C2338 2 Cores 1.7 Ghz

Le principe est que l'intégralité du réseau de l'école/établissement passe par cette passerelle de filtrage et ressorte ensuite vers la box Internet par l'autre interface.

C'est ce type de fonctionnement qui est préconisé et obligatoire dans les établissements.

Appliances pfSense

Sur le site officiel de pfSense, il est possible d'acheter des machines estampillés au nom de la distribution, la distribution est pré-installé et il y est proposé pas moins de six produits afin de répondre plus précisément aux besoins de chacun.

https://www.pfsense.org/products/

Serveur dédié

D'autres part, on peut trouver des serveurs reconditionnés pour un prix modique ( moins de 150€) sur le site allemand ServerShop24.de qui seront parfait pour ce genre de fonction.

https://www.servershop24.de/en/server/

Schéma réseau

Voici un exemple de configuration réseau possible avec pfSense, c'est aussi sous cette forme que ce tutoriel va évoluer.

Schéma réseau pfsense.png

Installation

pfSense est disponible en téléchargement sous deux options : la première pour installer pfSense et la seconde pour upgrader votre système. Par la suite, une page vous permettra à l'aide de menus déroulants de cibler la version de pfSense qui sera en adéquation avec votre équipement.

https://www.pfsense.org/download/

Si votre serveur ne dispose pas de lecteur CD on pourra installer pfSense depuis une clé USB bootable.

Pour cela il faudra utiliser un outil comme Rufus

Type de configuration réseau

pfSense peut considérer quatre types de réseaux distincts :

Zone Type Description
Rouge WAN Réseau exterieur, connecté a Internet (votre box)
Vert LAN Réseau interne/privé, connecté localement (vos ordinateurs)
Orange (OPT1) DMZ Réseau non protégé, zone démilitarisé (un serveur isolé)
Bleu WLAN Réseau sans fil, séparé pour les clients Wi-Fi

Installation de base

Démarrage

L'installeur vous demandera de définir successivement (images cliquables):

Boot.PNG

Par la suite, il peut se produire deux cas, le premier consistera dans une configuration étape par étape des paramètres primaires du serveur. L'autre situation, moins courante vous fera arriver directement à l'étape finale du premier cas, vous pourrez cependant reprendre l'ensemble des éléments de configuration vu dans le premier cas, c'est ce dernier que je vais décrire par la suite. Une signalisation écrite sera placé à l'étape où les deux cas se retrouveront.


  • Environnement

Environnement1.PNG Environnement3.PNG

Environnement.PNG Environnement4.PNG

Environnement5.PNG


Premiers paramétrages

Nous partons du principe que nous sommes dans le premier cas.

pfSense a alors redémarré, il va s'en suivre un chargement des divers paramètres du système qui peut éventuellement s'avérer être un peu long. Mais on arrive à l'écran suivant :

Vlan.PNG


Il est demandé s'il y a des VLANs à configurer. Ici, répondre non (à adapter selon votre cas bien sûre).

  • Par la suite, nous allons paramétrer les cartes réseaux. Le nommage des cartes étant parfois peu explicite, il est conseiller de repérer au minimum ceux du LAN et du WAN. Cela facilitera la détection des cartes par pfSense.

Configuration Cards.PNG


Tapez "a" si vous souhaitez opérer une détection automatique. Sinon entré le nom de la carte souhaité, ce dernier sera inscrit à gauche de l'adresse mac dans la liste des interfaces validées (en haut de la capture).

  • Ensuite, une fois la configuration des cartes effectuée, l'écran qui suit récapitule les différentes cartes réseaux et leurs affectations. Il vous posera la question si vous souhaitez procéder sous la configuration récapitulé.

End Conf Card.PNG


  • Vous avez rejoint à partir d'ici, le deuxième cas.
  • Désormais, notre pfSense est accessible à partir de son interface web sur l'adresse que vous lui avez attriburé sur sa carte LAN par la suite. On arrive donc à l'écran suivant :

10.PNG


En choisissant l'option 2, et par la suite le numéro de la carte souhaité. Vous pourrez attribuer la configuration réseau à vos cartes. Une question peut vous être posé à la suite d'une configuration si vous souhaitez remettre le configuration web via le protocole HTTP, répondez oui. Répéter l'opération jusqu'à ce que toutes les cartes soient configurées, ou bien vous pouvez aussi ne configurer que l'interface LAN puis configurer les autres via l'interface Web. Via l'interface Web, cela se fera lors de l première connexion, dans le cas contraire : onglet "Interfaces" puis choisissez la carte dont vous souhaitez modifier la configuration IP.


  • Vous pouvez désormais vous connectez à l'interface web depuis un poste du réseau LAN afin de procéder aux configurations. de base, l'identifiant est : "admin", le mot de passe : "pfsense". Ce sont les identifiants par défaut.

Connexion.PNG


  • Il est judicieux de changer le mot de passe du compte administrateur et éventuellement par la suite créer d'autres comptes. Pour ce faire, onglet "System" puis "User Manager"

User Manager.PNG


  • Dans le cas où vous souhaiteriez vous connecter à distance à pfSense via SSH. Voici la manipulation à effectuer pour rendre cela possible : onglet "System" puis onglet "Advanced", cocher la case "Enable Secure Shell" et éventuellement changer le port.

SSH.PNG

Les règles d'accès

pfSense permet de réaliser un filtrage par divers moyen (Protocoles, ports, etc...) sur chaque interface et pour cela, il est nécessaire de paramétrer des règles dans l'onglet "Firewall". dans pfSense, le système repose sur une gestion stricte des règles dans une liste, de manière hiérarchique donc. Il va alors lire les règles de haut en bas et lorsqu'il trouvera une règle concernant le traffic, il l'appliquera.


Règles de base

Par défaut, on trouvera avec pfSense un trafic totalement bloquer sur l'interface WAN et un trafic entièrement autorisé sur la LAN. Il ne faut cependant pas toucher aux règles sur l'interface WAN, du moins seulement pour autoriser un accès à un trafic entrant via un VPN ou pour une DMZ par exemple.


LAN

  • Etant donné que tout est autoriser en terme de trafic sur le LAN, il est judicieux de mettre en place une règle qui bloque tout le traffic puis créer des règles qui autorise un à un les protocoles ou les ports.


  • Les fonctions des deux règles par défaut présentes dans l'onglet LAN sont inscrites dans la colonne remplie de rouge. Il ne faut JAMAIS toucher à la première règle, cette dernière permet la connexion à l'interface web depuis la carte LAN. La seconde règle, elle autorise tout le trafic sur l'interface LAN, il faut donc qu'elle soit supprimer mais au cas où, je vous conseillerais de simplement la désactiver via le bouton edit de la règle. Onglet "Firewall" puis "Rules". Puis cliquez sur "Save" en bas de la page. (Vous pourrez aussi désactiver la règle autorisant l'ensemble du traffic IPv6 sur l'interface LAN)


Rules Lan ALL.PNG Disable Rules.PNG


  • Il faut désormais créer une règle qui bloque tout le trafic.

Create rules.PNG Create rules 2.PNG


  • Les règles à instaurer permettent un fonctionnement que l'on peut qualifier de "classique". Au travers des captures d'écrans, je vais vous indiquer la manière dont il faut remplir et les champs par la même occasion à adapter en fonction des cas. L'exemple ci-dessous concernera la création d'une règle permettant le HTTP. La troisième capture d'écran donnera un exemple d'ensemble de règles possible.

Add Rules.PNG


Example Rules.PNG Group Example Rules.PNG


WAN

  • Pour le WAN, pas besoin de s'éterniser très longtemps pour un fonctionnement basique, on peut simplement ajouter les deux règles suivantes :

Rules WAN.PNG


Squid & SquidGuard

Présentation

  • Squid est un serveur mandataire, en anglais un proxy, entièrement libre et très performant. Squid est capable de gérer les protocoles FTP, HTTP, HTTPS et Gopher. Il est généralement utilisé pour des fonctions de filtrage d'URL ou en tant que tampon. Les pages Internet sont stockées localement ce qui évite d'aller les recharger plusieurs fois et permet d'économiser la bande passante Internet.
  • SquidGuard est un filtre, un redirecteur et un plugin de contrôle d'accès pour Squid. Il va notamment permettre d'appliquer sur un proxy une liste noire de sites ou mots clés interdits.


Installation des paquets

  • Il est nécessaire de tracer toutes les communications vers l'internet au sein des établissements et pour cela, il va falloir installer des packages à pfSense. Pour cela, il faut se rendre dans l'onglet "System" puis dans "Packages". Deux onglets s'offre alors pour visualiser les paquets disponibles à l'installation et ceux actuellement installés. Donc, dans la partie "Available Packages", nous allons recherché les paquets "squid" et "squidGuard". Par la suite, il vous suffira de cliquez sur le "+" à droite du paquet.

Add packages.PNG


Configuration Squid (Proxy Server)

  • Désormais, suite aux dernières installations. Deux onglets ont été ajoutés dans le menu déroulant "Services". Il s'agit de Proxy Server et Proxy Filter, mais pour le moment, nous nous tiendrons à Proxy Server et à sa configuration. Il s'agit de squid. Pour commencer, rendons-nous dans le menu déroulant "Services" puis dans "Proxy Server". Dans la partie "General", Puis remplir les champs comme dans la capture d'cran si contre :

Conf Squid General.PNG


  • A partir d'ici, l'accès à internet est encore inactif, du moins si vous n'avez pas suivi la mise en application de mon ensemble de règles dîtes "classique". Si vous n'avez pas suivi, pas de panique, voici la règle à instaurer dans la partie LAN des règles du Firewall.

Rappel Rules.PNG


  • Nous allons donc poursuivre la configuration de squid en se rendant dans son onglet du menu déroulant "Services" puis dans la partie "Access Control". La section "Allowed Subnets" est à adapter en fonction de votre adresse réseau provenant de la carte LAN (ou l'emplacement ou vous souhaitez permettre un accès à internet).

Access Control.PNG


Configuration SquidGuard (Proxy Filter)

  • Maintenant que squid est configuré, il nous reste à préparer SquidGuard. Ce dernier permettra de filtrer et de contrôler les accès. Nous allons donc utiliser pour mettre en place ce filtrage, la blacklist de l'université de Toulouse, cette dernière est assez complète et propose un champ assez large de catégories afin de filtré au mieux un sujet précis.
  • Passons à la configuration générale de SquidGuard. Nous rentrerons dans la première page de configuration la blacklist de l'université de Toulouse Pour rappel, voici l'adresse :

ftp://ftp.univ-tlse1.fr/blacklist/blacklists_for_pfsense.tar.gz



  • MaJ 24/02/2016 : La blacklist ci-dessous est absolument à essayé, elle regroupe les éléments contenu dans la blacklist de Toulouse mais aussi des éléments

venant de diverses autres blacklist, ce qui l'a rend encore plus complète. Les catégories sont plus nombreuses et ciblent mieux les besoins en cas de filtrage.


http://www.shallalist.de/Downloads/shallalist.tar.gz



  • Première page à configurer, rendez vous dans le menu déroulant, puis dans "Proxy Filter" :

Conf1 Filter.PNG


  • Ensuite, nous allons nous rendre dans l'onglet "Blacklist" et ensuite cliquer sur "Downloading" pour charger dans pfSense notre blacklist et son installation.

Blacklist.PNG


  • Une fois le téléchargement et l'installation complété, il faut désormais se rendre dans l'onglet Common ACL" et remplir la page (voir capture d'écran ci-dessous). En cliquant sur le bouton vert dans la barre rouge, vous pourrez spécifier votre configuration de filtrage avec les catégories de la blacklist installé.

Common Access.PNG


  • Il existe par ailleurs, dans la liste des catégories lors de votre paramétrage des catégories de la blacklist, un champ qui permet de tout bloquer ou tout autoriser. Cette dernière se nomme "default access".

Astuces

  • Il est possible que pfSense ne prenne pas tout de suite en compte les modifications. Pour que la prise en compte soit plus rapide, une manipulation existe. Mais cette dernière peut aussi servir à forcer le démarrage de SquidGuard lors d'un redémarrage ou un éventuel arrêt de de ce dernier.

1 - Décocher la case "Enable" dans "General" puis sauvegarder.

2 - Recharger la blacklist en cliquant sur downloading dasn la partie du même nom que cette dernière.

3 - Une fois fini, recocher la case "Enable" puis sauvegarder, le service devrait redémarré.



Page de redirection

  • Lorsqu'un site web est sollicité depuis le LAN mais que ce dernier est bloqué par SquidGuard, il est judicieux de prévoir une page composé d'un avertissement expliquant la cause du blocage en cours. Pour illustrer ces propos, un exemple simple mais tout à fait clair composé des informations de bases à été prévu. Cela va se passer principalement dans ce fichier : /usr/local/www/sgerror.php
  • Pour le modifier, je vous conseille d'utiliser le logiciel notepad++ sur Windows lorsque vous l'aurez exporté depuis pfSense à l'aide de WinSCP.


Extraction à l'aide de WinSCP

Winscp.PNG

Conseils : Il est judicieux de garder une sauvegarde du fichier original en cas d'incident et donc de travailler sur une copie. Prévoyez éventuellement un dossier avec les images que vous souhaitez intégrer. (Voir suite)


Modification sgerror.php

Aller à la ligne 203 jusqu'à la partie "IE displayed self-page [...]" Il sera nécessaire de mettre des lignes en commentaires. Puis insérer votre code de la manière suivante :

# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# IE displayed self-page, if them size > 1024
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function get_error_page($er_code_id, $err_msg='') {
        global $err_code;
        global $cl;
        global $g;
        global $config;
        $str = Array();

        #header("HTTP/1.1 " . $err_code[$er_code_id]);

        $str[] = '<html>';
			$str[] = '<head>';
				$str[] = '<meta charset="utf-8" />';
				$str[] = '<title>pfSense</title>';
			$str[] = '</head>';
			$str[] = '<body>';
				$str[] = '<center><h1>Accès Refusé</h1></center>';
				$str[] = '<center><h3>Le site que vous avez demandé est inaccessible depuis le réseau pédagogique de l&#039établissement.</h3></center>';
				$str[] = '<center><figure><img src="http://'. $_SERVER['HTTP_HOST'] .'/interdit.png" alt="Logo" /></figure></center>';
				$str[] = '<center><h2><u>Nous vous rappelons qu&#039au sein de l&#039établissement l&#039usage de l&#039accès internet est réservé à des activités pédagogiques.</u></h2></center><br>';
				$str[] = '<hr size="1" noshade>';
				if ($cl['a'])        $str[] = "<center><b> Client address: </b> {$cl['a']} <br></center>";
				if ($cl['n'])        $str[] = "<center><b> Client name:    </b> {$cl['n']} <br></center>";
				if ($cl['i'])        $str[] = "<center><b> Client user:    </b> {$cl['i']} <br></center>";
				if ($cl['u'])        $str[] = "<center><b> URL:            </b> {$cl['u']} <br></center>";
				$str[] = '<hr size="1" noshade>';
			if ($config['installedpackages']['squidguarddefault']['config'][0]['deniedmessage']) {
				$str[] = "<h3>{$config['installedpackages']['squidguarddefault']['config'][0]['deniedmessage']}: {$err_code[$er_code_id]}</h3>";
			} else {
				#$str[] = "<h3>Request denied by {$g['product_name']} proxy: {$err_code[$er_code_id]}</h3>";
			}
				#if ($err_msg) $str[] = "<b> Reason: </b> $err_msg";
				#$str[] = '<hr size="1" noshade>';
				#if ($cl['a'])        $str[] = "<b> Client address: </b> {$cl['a']} <br>";
				#if ($cl['n'])        $str[] = "<b> Client name:    </b> {$cl['n']} <br>";
				#if ($cl['i'])        $str[] = "<b> Client user:    </b> {$cl['i']} <br>";
				#if ($cl['s'])        $str[] = "<b> Client group:   </b> {$cl['s']} <br>";
				#if ($cl['t'])        $str[] = "<b> Target group:   </b> {$cl['t']} <br>";
				#if ($cl['u'])        $str[] = "<b> URL:            </b> {$cl['u']} <br>";
				#$str[] = '<hr size="1" noshade>';
			$str[] = "</body>";
		$str[] = "</html>";

        return implode("\n", $str);
}

Une fois les modifications terminées, remplacer le fichier "sgerror.php" originel par celui modifier. Si comme dans l'exemple, vous insérez une ou bien des images, collez les fichiers dans le même emplacement que "sgerror.php".


Modification dans pfSense

Pour introduire le fonctionnement de cette page, une modification est nécessaire dans pfSense. Dans le menu déroulant "Services", puis "Proxy Filter" et "Common ACL".

Redirect Url.PNG


Sauvegarde Importante

  • Une fois votre page de redirection correctement configuré et fonctionnelle. Vous devez faire une copie de sauvegarde de votre fichier sgerror.php dans la version finale. Car lors des mises à jours de Squid et/ou SquidGuard, la mise à jour va remplacer le fichier par celui "d'origine".

LightSquid

Présentation

  • Lightsquid est un analyseur de log SQUID écrit en perl, il permet d’afficher sous forme de page web l’utilisation du proxy. Avec lui, nous pouvons visualiser les sites les plus utilisé, les sites qui utilise le plus de bande passante, les utilisateurs qui se sont connecté à ces sites.

Installation du paquet

  • Vous pourrez l'installer en vous rendant sur le menu déroulant "System" puis dans l'onglet "Packages". Puis trouver le paquet "Lightsquid". Installez-le.

Configuration

  • Lorsque l'installation est terminé, il faut vous rendre sur le menu déroulant "Status" puis dans l'onglet "Proxy Report". Dans la page "Settings", renseigner les paramètres suivants :

46.PNG


  • Par la suite, il est nécessaire de vérifier que l'activation d'enregistrement des logs est bien configuré. Donc, dans le menu déroulant "Services" puis dans "Proxy server" dans la page "General" :

47.PNG


  • Maintenant, rendez-vous dans Lightsquid, il faut donc retourner dans l'onglet "Proxy Report". Sur la page général, cliquez sur "Refresh now" puis sur "Refresh full", puis cliquer sur l'onglet "Lightsquid report". Si tout s'est bien passé, vous devriez arriver sur cette page :

48.PNG


  • Ou bien, arrivez sur une erreur plutôt courante au vue des nombreuses pages ouvertes sur internet à ce sujet :

49.PNG

Pas de panique ! Retourner sur l'onglet "General" dans "Proxy report". Cliquez sur "Refresh now" puis ouvrez parallèlement deux ou trois onglets pointant sur des sites (Google, LDLC, etc... par exemple). Puis cliquez sur "Refresh full", cliquez par la suite sur "Lightsquid report", actualisé la page avec F5 et votre page web devrait s'afficher correctement.

VPN

OpenVPN : Présentation

  • OpenVPN est un logiciel libre permettant de créer un réseau privé virtuel (VPN). Il a été écrit par James Yonan. OpenVPN permet à des pairs de s'authentifier entre eux à l'aide d'une clé privée partagée à l'avance, de certificats électroniques ou de couples de noms d'utilisateur/mot de passe. OpenVPN n'est pas compatible avec IPsec ou d'autres logiciels VPN. Le logiciel contient un exécutable pour les connexions du client et du serveur, un fichier de configuration optionnel et une ou plusieurs clés suivant la méthode d'authentification choisie. Ce fichier voit le jour à la fin de la configuration de votre canal VPN, c'est ce qui va être présenté peu après.

Installation paquet

  • Nous allons avoir besoin d'un paquet pour compléter le service OpenVPN prévu initialement par pfSense : "OpenVPN Client Export Utility". Vous pourrez l'installer en vous rendant sur le menu déroulant "System" puis dans l'onglet "Packages".

Création Certificat & User

  • Nous allons désormais créer un certificat d'autorité, ce certificat prendra sous son autorité les certificat utilisateur créer par la suite. Pour ce faire, rendez vous ans le menu déroulant "System", puis dans l'onglet "Cert Manager".

Create Certificate.PNG Result Crate Certificat.PNG


Création Utilisateur

  • Maintenant, il est nécessaire de créer un utilisateur, pour ce faire, menu déroulant "System", puis dans "User Manager". Cliquez sur l'icône avec un "+" pour créer votre nouvel utilisateur, nommez-le, indiquez lui son mot de passe et son nom complet puis cochez la case : "Click to create user certificate". Dans le champ "Descriptive name", rentrez le nom de votre futur certificat utilisateur. Assurez vous que dans le champ "Certificate authority", le nom choisit soit le même que celui du certificat d'autorité que vous avez créé un peu plutôt.

Create User.PNG

User Create.PNG


Configuration OpenVPN

  • Désormais, rendez vous dans le menu déroulant "VPN" puis dans l'onglet "OpenVPN". Si vous ne tombez pas directement sur une pré-configuration à faire. Cliquez dans la partie "Wizard" et vous serez au même point que ce tutoriel. Dans la capture d'écran correspondant au "Tunnel settings". Le champ "ipv4 Tunnel Network" servira à définir un réseau pour le tunnel et le champ "ipv4 local network" permettra de définir le réseau sur lequel l'utilisateur doit accéder au final.

36.PNG 37.PNG 38.PNG

39.PNG 40.PNG 41.PNG

42.PNG


Récupérer le client de connexion

  • Nous pouvons désormais avoir un Tunnel sécurisé avec notre serveur depuis l'extérieur, pfSense propose de récupéré un "Client export" pour divers supports. Donc pour récupérer ce dernier, nous devons nous rendre dans l'onglet "Client export", puis tout en bas de la page dans un bandeau rouge : "Client install packages". C'est ici que e trouve vos différents clients téléchargeables en fonction de vos certificats. Il suffit ensuite dans la partie export du client souhaité de choisir la plateforme avec laquelle vous allez par la suite vous connectez.

Client Export.PNG


  • Mais il se peut que votre client n'apparaisse pas, dans ce cas, dirigez vous vers la partie "Server". Cliquer sur le bouton d'édition. Puis dans le champ "Peer Certificate Authority", vérifiez qu'il s'agit du bon nom de certificat. Cela devrait résoudre ce soucis.

44.PNG


  • Pour un environ Windows, il faudrait donc choisir "Windows Installer".


Connexion

  • Après avoir récupéré votre client, il suffit de le lancer et de rentrer les identifiants de l'utilisateur créé précédemment. Puis si la console finit par vous indiquez : "Initialization Sequence Completed", c'est que vous vous êtes connecté avec succès à pfSense vient un canal sécurisé.

45.png