VPN IPsec roadwarriors

Firewall Services privilégie généralement OpenVPN pour les VPN, que ça soit pour du site à site, ou des itinérants (en attendant wireguard ...). Il est bien plus simple à manipuler qu'IPsec, utilise des interfaces “standards”, ajoute des entrées standards à la table de routage, bref tout est plus simple. Mais IPSec peut avoir des avantages. En performances d'abord, mais aussi et surtout : il est supporté nativement par pas mal de systèmes, dont Android par exemple.

Dans ce tuto, on va configurer PfSense pour être serveur VPN pour une flotte d'Android. En utilisant PSK + Xauth (une clé secrète partagée et une vérification login / pass). Pour la partie login / pass, on utilise ici deux annuaires LDAP, mais ça pourrait être des comptes locaux.

IPSec a la particularité d'être complexe : on trouve beaucoup de tuto pour ça, chacun avec ses petites différences. Celui là n'est qu'un de plus

Activer IPSec mobile

Dans le menu VPN -> IPsec, aller sur l'onglet Mobile Client

Cocher Enable IPSec Mobile Client support

Sélectionner les sources d'authentification pour les utilisateurs (dans cet exemple, 2 annuaires LDAP)

Laisser Group authentication à none

Cocher Provide a virtual IP address to clients et saisir une plage d'adresse (qui n'est pas utilisée ailleurs !)

Cocher Provide a list of accessible networks to clients

Cocher Allow clients to save Xauth passwords (Cisco VPN client only)

Cocher Provide a default domain name to clients et saisir le domaine de recherche à donner aux clients

Cocher Provide a DNS server list to clients et saisir l'adresse du serveur DNS à donner aux clients. Vous pouvez utiliser une adresse IP du PfSense (par exemple, son adresse IP LAN), mais attention dans ce cas : il faut ajouter une ACL autorisant la plage réseau VPN à requêter (Dans Services -> DNS Resolver -> Access List)

Après avoir sauvegardé, un bouton vert vous proposera de créer la phase 1 associée, il faut le faire

Créer la phase 1

Dans la fenêtre de création de la phase 1, il faut :

Pour Key Exchange Version, choisir IKEv1

Internet protocol : selon votre environnement (probablement IPv4)

Interface : généralement WAN

Description : IPSec Mobile

Authentication Method : Mutual PSK + Xauth

Negociation mode : agressive

My identifier : My IP address

Peer identifier : User distinguished name -> vpn@mobile (chaîne arbitraire, il faudra simplement mettre à la même sur les clients)

Pre-Shared Key : une passphrase. De préférence longue, et aléatoire. Elle devra être tapée sur les clients lors de la configuration

Encryption Algorithm

AES

128 bits

SHA256

2 (1024 bit)

Lifetime : 28800

NAT Traversal : Force

Sauver, puis cliquer sur Show Phase 2 Entries -> Add P2

Créer la phase 2

Mode : Tunnel

Local Network : saisir ici le réseau qui doit être joignable depuis les clients. Si vous voulez que tout le trafic soit envoyé dans le tunnel, saisir 0.0.0.0/0

NAT / BINAT : Laisser à None

Protocol : ESP

Encryption Algorithms

AES 128 bits

Hash algorithms : SHA256

PFS key group : off

Lifetime : 3600

Ajout des règles sur l'interface WAN

Pour que le VPN puisse s'établir, il faut que les ports UDP 500 et 4500 soit accessibles. PfSense ajoute par défaut ces règles. Si vous avez désactivé l'option, il faut les créer manuellement

Ajout des règles sur l'interface IPSec

Il faut maintenant autoriser (ou non) les clients VPN à se connecter à vos différentes zones. Ça se passe dans Firewall -> Rules -> IPsec

Il n'y a qu'un seul onglet IPsec même si vous utilisez plusieurs tunnels différents. On peut discriminer en utilisant l'IP source

Configuration d'un android

Pour configurer un Android, il faut aller dans le menu Réseau -> VPN -> Ajouter puis le configurer comme sur la capture

Ajustement MSS

Sur le réseau de certains opérateurs mobiles, il faut ajuster le paramètre Maximum MSS pour que le trafic passe. Dans VPN -> IPsec -> Advanced Settings

Pour Free mobile: 1380

Pour Bouygues Télécom : 1370