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.

Comparaison des cartes mères d’un Stormshield SN300 à gauche et d’un Stormshield SN200 à droite

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

7 réponses sur “Installer FreeBSD, pfSense ou OPNsense sur une appliance Netasq U70S/Stormshield SN300”

  1. Bonjour,

    Pour ma part j’ai acheté un Stormshield SN300 à une société dont un de ses sites fermées, ils ont mis leur matériel à vendre.

    J’ai essayé de configurer en firmware 3.7 LTSB pour une connexion sur le réseau Orange en PPPoE, cependant le débit n’était pas top.

    J’ai essayé avec ce tuto : https://lafibre.info/remplacer-livebox/remplacer-la-lb-par-un-firewallrouteur-netasq-ou-stormshield/

    et créer mon tuto : https://lafibre.info/remplacer-livebox/refonte-reseau-avec-livebox-v5-stormshield-et-tp-link-tl-sg2210p/

    Cependant, il faut faire attention aux arrêts du SN300, sinon toutes les modifications sont perdues.

    J’ai vu que le dernier firmware (à partir de 4.1) avait les commandes pour faire de l’authentification DHCP pour les réseaux opérateurs, dont Orange.

    J’ai fait une recherche pour voir si je pouvais changer mon SN300 par un SN310. Une entreprise a pu me répondre avec un changement pour 2200 TTC sans possibilité de mensualisation (comme étant un particulier).

    Après la fin de la maintenance 29/01/2021, il ne me reste plus que la licence, mais sans possibilité de mettre à jour au dela de la 3.7.19

    Une erreur « ret=200 Code=00a00b03 msg=Echec de déchiffrement » J’ai tenté la modification de la date au moment où la maintenance était encore active, mais impossible de mettre à jour.

    Je me suis orienté vers Pfsense où il y a plus de tutorial

    J’ai fait l’upgrade de mémoire de 1 à 2 Go et pour éviter de perdre le firmware Stormshiel, j’ai investie dans un stockage identique en 2 Go, puis 16 Go (Apacer 8c.f2dd2.lr10b)

    J’ai pu faire des tests avec pfSense 2.4.5-RELEASE-p1 (amd64) ou j’explique la configuration du commutateur VSC7424 par la connexion cu -l cuau1 -s 19200 : https://forum.netgate.com/topic/154826/install-pfsense-on-stormshield-sn300/33

    Cependant, pour moi, ça reste bricolage et c’est là que j’ai vu ton tuto qui semble prometteur

    J’ai fait une analyse du stockage contenant le firmware Stormshield et en regardant le démarrage du SN300 et j’ai trouvé :
    – chargement du module if_em : l’interface em0 (Intel PRO/1000)
    – chargement de /etc/hw/32_switch_hd
    – chargement de /etc/hw/40_smart
    – chargement de globalgen : 8 ethernet interface detected

    J’ai tenté des implémentations dans pfsense, mais sans succés

    Pour l’installation de pfsense, j’ai préféré la méthode en utilisant un autre PC, je démarre sur l’ISO d’installation de pfsense et j’installe sur le stockage de 2Go, puis de 16 Go et je rebranche dans le SN300

    Pour en revenir à ton tutorial, j’ai vu qu’il manquait :
    – le fichier de configuration,
    – l’image précompilée par tes soins
    – le schéma de connexion pour l’interface UART.

    Du coup, je n’ai pas pu tester

    1. Bonjour Antoine,

      Tout d’abord je te remercie pour l’intérêt porté à mon article. Travaillant dans une ESN qui vend et implente des Storsmhield la gamme Network Security, je suis un peu surpris du prix annoncé pour changer ton SN300, étant donné que Stormshield propose un uptrade. C’est à dire qu’ils reprennent le SN300 contre un modèle actualisé. Pour ton problème de mettre à jour le Stormshield à un firmware disponible lorsque ta maintenance était active, il est vrai qu’il est possible de faire passer la maj en changeant la date, mais il faut passer par le CLI obligatoirement.

      Au niveau de tes questions, mon article étant pas fini (il me reste plusieurs pistes à explorer et peaufiner le fichier de configuration). Tu pourras trouver en attendant :
      – le fichier de configuration : https://github.com/Areku95/NanoShield
      – l’image pré-compilée, il faut que j’avance pour corriger deux trois problèmes mais pas de soucis pour te la donner rapidement. Cependant, avec le lien vers mon GitHub là-haut, tu as tout pour la faire toi.
      – Le schéma de connexion pour l’interface UART, j’ai eu quelques difficultés à la faire fonctionner, il faut que je me repenche du coup.

      Enfin, merci pour l’analyse du stockage du SN300, c’est très prometteur, je vais aller récupérer ces fichiers sur un Stormshield SN300 pour les regarder.

      En tout cas, encore merci de ton intérêt, et c’est avec plaisir d’échanger avec toi sur ce sujet.

  2. Bonjour Alexandre,

    Oui et c’était par échange téléphonique et c’était une société sur Toulouse.

    Je n’ai plus le détail du tarif. Est-ce qu’il y aurait moment de me faire une estimation ?

    Donc, je modifie la date de mon Stormshield à un moment ou la maintenance était active et je fais la mise à jour par CLI, je vais tester, car je le fais uniquement par le web.

    Je peux peut-être voir faire une capture du stockage du SN300 en img, …

    Je vais tester avec le fichier de configuration

    Merci

    1. Bonjour Antoine,

      Pour ton code erreur « 00a00b03 », j’ai regardé sur la base de connaissance de Stormshield, et voilà ce que dit Stormshield à ce sujet là : https://www.info-sec.fr/wp-content/uploads/2021/09/Capture_kb_stormshield.png

      Et voilà une KB pour la mise à jour via le CLI : https://www.info-sec.fr/wp-content/uploads/2021/09/capture_update_stormshield_cli.png

      Pour l’estimation, il me faut le numéro de série du boîtier, pour que je fasse la demande à Stormshield. Tu peux me l’envoyer sur l’adresse courriel encodée en base64 en bas du site.

  3. J’ai tenté avec ton fichier en FreeBSD 13.0, puis 12.2 via machine virtuelle et j’obtiens une erreur
    [email protected]:/usr/src/tools/tools/nanobsd # ./nanobsd.sh -v -c ./appliance_amd64.nano
    : not found_amd64.nano:

    Le fichier « kernel.conf » est sous « /root »
    Le fichier « appliance_amd64.nano » est sous « /usr/src/tools/tools/nanobsd/ »

    1. Peux-tu me donner l’intégralité du dossier /usr/obj/nanobsd.full/ ? C’est là que sont stockés les logs. Tu peux compresser le dossier entier :
      tar -zcvf logs_nanobsd.tar.gz /usr/obj/nanobsd.full/

Laisser un commentaire

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