Installer FreeBSD, pfSense ou OPNsense sur une appliance Netasq U70S/Stormshield SN300

Stormshield, qu’on ne présente plus, propose une large game de pares-feux de nouvelle génération. De vieux modèles peuvent être trouvés assez facilement sur le net ou lors de mises à niveau chez des clients. Deux modèles sont particulièrement courants et intéressants, le Netasq U70S et le Stormshield SN300, qui partagent exactement le même chassis et carte mère, a quelques détails près.

Les Stormshield SN200 et SN300 vont voir leur fin de vie arriver en décembre 2022, tandis que les séries U modèles S de Netasq sont arrivés en fin de vie en décembre 2019. Ces appliances sont très interessantes niveau hardware mais deviennent inutiles sans leurs mises à jour.

Nous verrons dans un premier temps les détails techniques des appliances, puis l’installation et le paramétrage en détail de FreeBSD, puis celui d’OPNSense. Si les détails techniques des routeurs ne vous interèssent pas, passez directement au point II.

Attention, cet article nécessite d’ouvrir les appliances et donc de faire sauter le sceau de garantie.

I. Détails techniques des routeurs

Les modèles U70S et SN300 reposent sur un processeur orienté pour l’embarqué VIA Nano U3500 avec un jeu d’instruction 64 bits cadencé à 1 GHz1, 1Gb de RAM en DDR3 SO-DIMM cadencée à 1333 Mhz, et un stockage flash de 2Gb, du fabricant Apacer, au format 22P/90D.

Voilà ci-dessous la carte mère en détail d’un Netasq U70S (qui est exactement la même pour un SN300) :

Carte mère détaillée d'un routeur Netasq U70S
Vue en détail de la carte mère d’un Netasq U70S
  • En orange : L’horloge
  • En blanc : Le BIOS, modèle W83627DHG de chez Winbond
  • En bleu : Des cavaliers (jumpers), notamment pour le débogage
  • En vert : Le commutateur (switch) VSC7424, et tout à gauche de la carte mère (en vert également), une interface UART pour configurer le commutateur.
  • En rouge : Le contrôleur Ethernet Gigabit Intel 82574L, connecté derrière le commutateur
  • En violet : Le CPU Nano U3500 de chez VIA, cadencé à 1 GHz.
  • En marron, au centre : Probablement un GPU ?
  • En jaune : La mémoire Flash de chez Apacer
  • Et enfin, la RAM, tout en haut sur la photo, et le ventilateur à droite.

Voilà pour les principaux composants internes.

Le contrôleur Ethernet Gigabit Intel 82574L gère les ports Ethernet connectés au commutateur VSC7424 comme un seul et même port. Nous verrons dans cet article comment paramétrer le switch pour faire rendre chaque port indépendant sur l’OS.

Les modèles U30S et SN200, quant à eux, reposent sur un processeur VIA Nano U3400 avec un jeu d’instruction 64 bits cadencé à 0.8 GHz, 1Gb de RAM en DDR3 SO-DIMM cadencée à 1333 Mhz, et un stockage flash de 2GBdu fabricant Apacer, au format 22P/90D. Un switch Atheros AR8328 est couplé à un contrôleur Ethernet Gigabit Intel 82574L. Malheureusement, ce commutateur ne semble pas pouvoir être paramétré via une interface série, ce qui est problématique pour utiliser correctement les ports. J’essaierai

Pour les 4 modèles, la mémoire RAM n’est pas soudée et est donc remplaçable par une barette avec une plus grande capacité. J’ai testé pour ma part l’augmentation à 2GB de RAM d’un modèle U70S et cela fonctionne parfaitement.

Je vous propose donc dans cet article de remplacer le firmware de base par FreeBSD, OPNsense ou encore pfSense, afin de donner une nouvelle vie à ces boîtiers.

Nous verrons dans un dernier point comment installer directement FreeBSD, pour les plus bricoleurs, voulant un système vierge et plus léger. De plus, dans le cas de FreeBSD, il n’y a pas besoin de remplacer le stockage de base, ce qui est intéressant pour une réutilisation économique des boîtiers.

II. Installer FreeBSD

Pourquoi ne pas installer directement FreeBSD ? C’est ce que nous allons voir dans ce dernier point. L’avantage d’installer FreeBSD, c’est que vous n’avez pas à remplacer le stockage flash pour un modèle plus volumineux. Il y a deux méthodes. La première, la moins « propre » pour moi, est d’enlever le stockage du boîtier, et installer FreeBSD depuis un autre PC sur le SSD. La deuxième méthode, est d’écrire directement sur le stockage flash une image autonome de FreeBSD, dédiée à l’embarqué : NanoBSD2

C’est sur cette deuxième méthode que je vais me baser pour cet article. Premièrement, vous devez avoir un système FreeBSD qui tourne quelque part (vieux PC, machine virtuelle, …), possédant les sources intallées (/usr/src/). Vous pouvez les installer depuis le programme d’installation de FreeBSD.

Nous allons tout d’abord créer un fichier de configuration pour indiquer au script NanoBSD quels composants intégrer dans l’image. Je vous propose mon propre fichier :
Mais vous pouvez bien sûr le modifier, en vous aidant notamment de ces documentations :

Je vous mets à disposition une image pré-compilée par mes soins, si vous voulez tester que votre appliance arrive bien à démarrer sur FreeBSD :

N.B : Je vous conseille fortement de créer vous même votre image pour un usage en production.

II.1. Création de l’image

Téléchargez les sources de la dernière version :

# fetch ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/12.2-RELEASE/src.txz

Enfin, décompressez l’archive :

# mkdir /root/freebsd-src-amd64-12.2
# tar -C /root/freebsd-src-amd64-12.2 -xzvf src.txz

Se placer dans le répertoire de base du programme de création de NanoBSD :

# cd /usr/src/tools/tools/nanobsd

Démarrer le processus de création :

# ./nanobsd.sh -v -c ./u70s.nano

⚠️ Attention, le processus de création est assez long ! Soyez patient ! Environ 1h30 de mon côté avec le fichier de configuration proposé plus haut.

# cmdwatch cat /usr/obj/nanobsd.full/_.bw

Une fois l’image construite, vous pouvez la vérifier grâce aux commandes suivantes :

# mkdir /mnt/nanobsd
# mdconfig -a -t vnode -f /usr/obj/nanobsd.wleiden-hybrid/_.disk.full
# mount /dev/md0s1a /mnt
/

Une fois terminé, on la démonte :

# umount /mnt/nanobsd

II.2. Ecriture de l’image sur le stockage de l’appliance

Après avoir ouvert votre appliance, branchez le stockage de cette dernière (au format SATA) sur votre machine.

Sur Linux/Unix/macOS :

# dd if=_.disk.full of=/dev/da0 bs=64k

Sur Windows :

Vous pouvez utiliser Etcher ou Rufus pour copier l’image.

II.3. Démarrage de l’appliance sur FreeBSD

Rebranchez le stcokage flash sur l’appliance et démarrez le boîtier.

Si l’image a été correctement écrite sur le stockage, l’appliance devrait démarrer sans problème. L’affichage est dirigé vers la sortie VGA ainsi que sur le port série RS232.

II.4. Configuration des interfaces réseau

Comme expliqué succintement plus haut, les modèles U70S/SN300 reposent sur un commutateur VSC7424, rattaché à un contrôleur Ethernet Intel 82574L. Ceci a comme effet que de base, un seul port et affiché sur FreeBSD (em0). L’image que je vous propose ici, déjà compilée et configurée, crée à chaque démarrage 8 interfaces, chacune rattachée à l’interface de base em0, taggée avec un VLAN. Les ports s’intitulent eth1, eth2, eth3, etc… Vous pouvez bien sûr personnaliser cela grâce au fichier /etc/rc.conf.

Créer ces interfaces virtuelles ne suffit pas, nous allons contrôler en se connectant directement au commutateur VSC7424 que les ports sont taggés et paramétrés correctement. J’ai réalisé un petit schéma animé pour illustrer le fonctionnement :

Schéma animé du fonctionnement logique d’un U70S/SN300

Une trame non étiquetée (untagged) venant d’un équipement sur le port 1, est ensuite étiquetée (tagged) par le commutateur. Cette trame est ensuite renvoyée sur le port 9, qui sert en fait de trunk. Ce port 9 est lui relié au contrôleur Ethernet Intel 82574L, connecté au système d’exploitation, et qui apparaît sous l’interface em0. Enfin, la trame étiquetée est reçue par l’interface virtuelle correspondante, qui dans ce cas, est l’interface eth1.

Pour configurer le commutateur, nous avons deux options :

  • Depuis FreeBSD, en se connectant sur l’interface série uau0
  • Depuis l’interface physique UART, présente sur la carte mère

Les deux solutions fonctionnent, mais je vous conseille de le faire depuis FreeBSD.

II.4.a. Depuis FreeBSD

# cu -l cuau1 -s 19200

II.4.b. Depuis l’interface série

La carte mère n’indique malheureusement aucun schéma de connexion pour l’interface UART. J’ai donc fais la recherche manuellement avec un multi-mètre. Voilà le schéma de connexion :

II.4.c. Configuration

Une fois connectée, vous aurez un terminal comme ci-dessous :

Connected

General Commands:
-----------------
Help/?: Get help on a group or a specific command
Up    : Move one command level up
Logout: Exit CLI

Command Groups:
---------------
System      : System settings and reset options
IP          : IP configuration and Ping
Port        : Port management
MAC         : MAC address table
VLAN        : Virtual LAN
PVLAN       : Private VLAN
Security    : Security management
STP         : Spanning Tree Protocol
Aggr        : Link Aggregation
LACP        : Link Aggregation Control Protocol
LLDP        : Link Layer Discovery Protocol
EEE         : Energy Efficient Ethernet
QoS         : Quality of Service
Mirror      : Port mirroring
Config      : Load/Save of configuration via TFTP
Firmware    : Download of firmware via TFTP
Loop Protect: Loop Protection
IPMC        : MLD/IGMP Snooping
Debug       : Switch debug facilities

Type '<group>' to enter command group, e.g. 'port'.
Type '<group> ?' to get list of group commands, e.g. 'port ?'.
Type '<command> ?' to get help on a command, e.g. 'port mode ?'.
Commands may be abbreviated, e.g. 'por co' instead of 'port configuration'.

>

Pour afficher la configuration actuelle du commutateur :

> vlan conf

Les ports de 1 à 8, représentent les ports physiques. Le port 9, représente le contrôleur Ethernet Intel 82574L qui fait remonter l’interface em0 sur FreeBSD. Les VLANs déclarés sur les interfaces physiques doivent donc tous être étiquettés (taggés) sur ce port 9, afin que nos interfaces virtuelles sur FreeBSD puissent utiliser les ports physiques.


Je vous conseille donc de partir sur la configuration suivante :

VLAN Configuration:
===================

Port  PVID  Frame Type  Ingress Filter  Tx Tag      Port Type
----  ----  ----------  --------------  ----------  -------------
1     101   Untagged    Disabled        Untag PVID  S-Port
2     102   Untagged    Disabled        Untag PVID  S-Port
3     103   Untagged    Disabled        Untag PVID  S-Port
4     104   Untagged    Disabled        Untag PVID  S-Port
5     105   Untagged    Disabled        Untag PVID  S-Port
6     106   Untagged    Disabled        Untag PVID  S-Port
7     107   Untagged    Disabled        Untag PVID  S-Port
8     108   Untagged    Disabled        Untag PVID  S-Port
9     None  Tagged      Disabled        Tag All     C-Port

VID   VLAN Name                         Ports
----  --------------------------------  -----
101   eth1                              1,9
102   eth2                              2,9
103   eth3                              3,9
104   eth4                              4,9
105   eth5                              5,9
106   eth6                              6,9
107   eth7                              7,9
108   eth8                              8,9

Ce qui donne les commandes suivantes :

Bien sûr, vous pouvez adapter la configuration selon vos besoins, comme par exemple utiliser le port 1 pour le WAN, et les ports 2 à 8 comme un swich pour le LAN. Dans ces cas, les ports 2 à 8 devront être dans le même PVID.

II.5. Mise en place du routage

Pour le routage, l’image que je fournie ici et le fichier de configuration pour compiler sa propre image, contiennent déjà la directive pour activer le transfert des paquets (paquet forwarding), soit le routage.

C’est la directive gateway_enable="YES" dans le fichier /etc/rc.conf qui active le routage3.

II.6. Règles de pare-feu

III. Installation d’OPNsense

OPNsense a un gros avantage par rapport à PFSense car une version nano, dédiée pour l’embarqué, est encore proposée. En effet, il m’a été impossible de démarrer sur une clé USB bootable autre que le système de recovery officiel de Stormshield. Je présume donc qu’une limitation doit être présente.

N.B : PFsense ne propose plus cette image nano depuis quelques versions. Cela impliquerait donc de sortir le SSD et d’installer pfSense sur ce dernier depuis une autre machine. Je ne couvrirait pas cette installation ici, mais les manipulations relatives aux interfaces sont bien sûr faisables.

Pré-requis : Attention ! L’image nano d’OPNsense pèse 3Gb. Il faut donc changer le SSD interne pour un SSD plus volumineux. J’ai pour ma part réussi à en trouver chez ce fournisseur : https://www.mouser.fr/ProductDetail/908-SDM008G12ANCTM1

III.1. Ecriture de l’image nano sur le SSD

Récupérer l’image nano d’OPNsense sur le site officiel : https://opnsense.org/download/

Il va falloir démonter le boîtier, et faire sauter le sceau de garantie. Pour le Netasq U70S, ce n’est pas très grave, par contre, attention pour le SN300 qui peut encore accueillir une maintenance.

IV. Sources

1 : https://en.wikipedia.org/wiki/List_of_VIA_Nano_microprocessors
2 : https://docs.freebsd.org/en_US.ISO8859-1/articles/nanobsd/howto.html
3 : https://docs.freebsd.org/doc/3.5-RELEASE/usr/share/doc/en/books/ppp-primer/x207.html

src.conf : https://www.freebsd.org/cgi/man.cgi?query=src.conf
Datasheet Stormshield SN300 : https://www.stormshield.com/wp-content/uploads/SNS-EN-SN300-Datasheet-201611.pdf

Laisser un commentaire

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