OPNsense, le nouveau routeur

Ecrit le , 7 minutes de bouquinage

Pour celles et ceux qui lisent mes écrits, j'ai mis sur pied un routeur virtuel basé sur Debian. Ces balbutiements de routeur entre deux réseau ont super bien marché jusqu'à présent, sans encombres. Le pare-feu était une autre paire de manche; il était... vide.

Déséspérément vide.

Ceci dit, c'était un problème un peu plus... secondaire, on va dire: ce routeur servait juste à sincer le réseau en deux. Six mois plus tard, j'ai quelques projets en tête et je pense qu'il est temps de remédier cette situation.

Le choix du routeur / parefeu

J'ai d'abord pensé mettre en place un parefeu pfSense. De ce que j'ai pu voir de quelques vidéos sur les internets, ça n'a pas l'air trop compliqué de mettre en place. Mais. Parce qu'il y a toujours un mais. Il me fallait la prise en charge de Wireguard. Non négociable.

J'ai donc arpenté les internets à la recherche d'une hypothétique prise en charge de Wireguard par pfSense. De ce que j'ai pu voir, c'était pas présent et j'avais pas spécialement envie de bricoler un truc qui fonctionnerait à moitié, ni de mettre en place le VPN dans une nouvelle VM. Alors on continue de chercher un peu.

Puis je suis tombé sur OPNsense.

De ce que j'ai pu comprendre, OPNsense est un fork de pfSense (code disponible sur Github) et l'interface devrait ressembler à celle de pfSense.

Alors, pourquoi un tel pare-feu avec tout plein de fonctionnalités basiques comme plus avancées et évoluées ? Je ne vais pas mentir que je n'ai pas nécessairement besoin de tout ce cheptel de fonctions mais elles restent sympas à avoir. Ce qui me fallait surtout, c'est Wireguard; on verra plus tard comment ça se configure.

Installation

L'installation se fait sans trop d'encombres via le programme d'installation intégré et ce dernier fait les choses comme un grand. Il s'agit de quelques écrans qui se suivrent les uns derrière les autres. Personnellement, j'ai pris l'installation guidée: je m'en fiche que la racine du système de fichers du routeur prenne tout le disque assigné à la VM: c'est là pour ça.

Etant donné que je veux quand même accéder à l'interface administration du pare-feu, je n'ai pas encore configuré de LAN à ce stade. En effet, si on active le LAN, l'interface web est accessible uniquement de l'autre côté et moi... je suis techniquement du côté de l'interface WAN. Je pense qu'on l'a plus ou moins deviné: ce routeur / pare-feu se trouvera entre mes containers / machines virtuelles et moi.

Depuis la console, j'ai assigné une adresse IP qui va bien et ajouté la route statique sur la box. La mise en place initiale est maintenant faite.

La configuration

Les interfaces sur les deux réseaux

C'est là que les choses deviennent amusantes, si on peut le dire ainsi. J'ai commencé par ajouter une petite règle au pare-feu de l'interface WAN pour que je puisse quand même accéder aux paramètres, une fois que tout est mis en place. Ensuite, j'ai assigné l'interface qui aura un pied dans le réseau virtualisé.

Enfin, pour finir avec l'interface "extérieure", le trafic venant de l'extérieur, que ce soit en TCP ou UDP, peut passer de l'autre côté.

Du côté du réseau virtualisé, j'ai pris mon temps pour écrire les règles. Au final, j'ai un set qui me plait et qui devrait ne pas causer trop de problèmes lorsque je mettrai ce routeur à la place de l'autre.

Évidemment, j'ai créé un container très temporaire qui permettra de tester si tout fonctionne tel que je le désire.

Les VPNs

Ahhh... maintenant on arrive sur ce qui intéresse le plus, outre les innombrables fonctionnalités d'OPNsense: les clients VPN. Si vous avez lu plus ou moins attentivement jusqu'ici, vous devinez que j'ai commencé par Wireguard. Donc j'ai installé le plugin qui allait bien.

Wireguard

Pour l'installation, rien de plus simple: System -> Firmware -> Plugins, puis installer Wireguard. Pour ce qui est de la configuration, au premier abord, on peut un petit peu se perdre mais c'est aussi assez simple; même la doc le dit. L'emplacement des configurations se trouve dans VPN -> WireGuard.

On crée d'abord un "Local" avec les informations nécessaires, puis un "Endpoint" avec le serveur, puis revenir au "Local" pour ajouter le serveur aux pairs de notre client. Évidemment, il faut ajouter les règles nécessaires au parefeu "WireGuard". Si tout se passe bien et que les configurations sont bien comme il faut, on devrait pouvoir envoyer un paquet ICMP de type echo-request et recevoir un paquet ICMP echo-reply, c.-à-d. un ping. Dans un sens, puis dans l'autre pour la bonne mesure. Tant qu'à faire, pourquoi ne pas ouvrir une connexion TCP dans un sens puis dans l'autre ?

OpenVPN

La configuration d'un client OpenVPN était un peu plus tordue mais pas impossible. Le gros des pépins que j'ai pu rencontrer vient des variations de congiguration entre le serveur OpenVPN et le client.

Je me suis monté un serveur OpenVPN avec le script d'installation d'OpenVPN d'Angristan. Après quelques réajustements dans le fichier de configuration et sur le parefeu du serveur distant, j'ai pu me connecter avec mon client, pour valider.

Ce qui est particulier, dans le cas OPNsense, c'est la configuration des certificats à faire avant de créer le client avec le fichier de configuration sous les yeux. Autre chose de particulier, le script d'installation a configuré le serveur OpenVPN pour utiliser tls-crypt pour l'authentification des données qui transitent dans le tunnel. Si on coche la case "Authentifier les données" et qu'on met la clef donnée par le serveur, la négociation passera mais rien ne passera dans le tunnel. Il faut donc décocher cette case et directement coller le bloc tls-crypt dans un champ multi-ligne tout en bas.

Oui, le bazar. Il faut que client et serveur aient des configurations qui se ressemblent.

Les routes. J'ai suivi la partie de la documentation qui allait bien concernant l'ajout d'une route à travers le tunnel.

Une fois que tout fonctionne correctement et que le parefeu est bien configuré, c'est une grande satisfaction d'avoir quelque chose de fonctionnel.

On change ?

Donc on échange les routeurs. Le routeur fait main passe en arrière-plan et le nouveau routeur vient sur le devant de la scène. Concrètement, cela se traduit en changement des interfaces virtuelles sur les deux machines virtuelles, puis en changement d'adresse IP où cela est nécessaire, puis changement du routage statique sur la box pour pointer au bon endroit.

La remise en place des VPNs n'était pas trop compliquée. OpenVPN a eu plus de résistance parce que je n'avais pas lu correctement le fichier .ovpn pour le retranscrire sur l'interface GUI d'OPNsense. Au final, un coup de redémarrage et c'est reparti pour un tour et ça marche correctement. Ouf !

En conclusion

Au final, OPNsense est un parefeu qui satisfait mon cas d'usage et est simple à utiliser. Certes, comme mentionné avant, je n'utilise pas toutes les fonctionnalités avancées proposées. Cela n'empêche pas de satisfaire mon cas d'usage.

On verra ce que le futur nous proposera.