Comment installer pfsense sur une instance OVH Public Cloud ?

pfSense est une distribution libre et open-source de pare-feu (firewall) et routeur basée sur FreeBSD.

Développée depuis plus de 20 ans, elle transforme un serveur, un ordinateur ou une machine virtuelle en un équipement réseau professionnel complet. Elle est gérée entièrement via une interface web intuitive, sans nécessiter de connaissances avancées en ligne de commande. CEPENDANT, cela nécessite des connaissances en réseau ou système pour savoir ce qu’on fait.

Les fonctionnalités principales sont :

  • Pare-feu stateful très performant (filtre de paquets)
  • Routage avancé (multi-WAN, load balancing, failover)
  • VPN (IPsec, OpenVPN, WireGuard)
  • NAT, DHCP, DNS, Proxy, Captive Portal
  • Traffic shaping (limitation et priorisation de bande passante)
  • Haute disponibilité (HA), VLAN 802.1Q, IDS/IPS via packages (Snort, Suricata…)
  • Des milliers de packages additionnels (comme un véritable « App Store » pour réseau)

C’est l’une des solutions firewall open-source les plus utilisées au monde, aussi bien par des particuliers, des PME que des grandes entreprises.

On va l’installer ici dans une instance public Cloud qui nous servira de serveur VPN ou de proxy SSH pour accéder à notre réseau vrack.

D’abord, via la manager OVHcloud, configurez un réseau privé (vrack) auquel vous connectez le projet Public Cloud. (Ce n’est pas expliqué dans ce tutoriel).

Ensuite vous décidez d’un numéro de VLAN (exemple: 3).

Dans cet article, nous allons voir comment installer pfsense sur le Public Cloud, attention à bien remplacer les paramètres adéquats.

Une vidéo est disponible pour le déroulement de ce tutoriel.

1. Télécharger l'image ISO pfsense «netgate-installer »

Rendez-vous ici pour télécharger l’ISO.

C’est déroutant car il faut commander GRATUITEMENT l’image ISO en s’inscrivant sur le site de netgate pour accéder ensuite à l’ISO qui aura un nom du style: « netgate-installer-vx.y-RELEASE-amd64 » :

Choisir AMD64 ISO :

Enfin, on peut télécharger :

2. Choisir une région openstack pour accueillir pfsense

Je vais héberger pfsense dans la région GRA3, je vais ajouter ce paramètre par la suite.

Je charge mon environnement python openstack sans charger de force la région. Un autre tutoriel explique comment préparer un environnement python openstack.

3. Uploader l'image ISO sur openstack

Il existe d’anciens outils openstack. Leur documentation est confuse, mal référencée,… Mais voici comment faire.

Il est difficile de trouver ces exemples sur Internet qui ne montrent jamais la bonne méthode ou qui esquivent les cas que personne n’expliquent, c’est la raison du tutoriel.

L’upload prend un peu de temps selon sa connexion internet.

				
					openstack image --os-region-name=GRA3 create --container-format bare --disk-format iso --file netgate-installer-v1.2-RELEASE-amd64.iso netgateInstaller12
				
			

La sortie nous donne après l’upload :

				
					+------------------+--------------------------------------------------------------------------------------------------+
| Field            | Value                                                                                            |
+------------------+--------------------------------------------------------------------------------------------------+
| container_format | bare                                                                                             |
| created_at       | 2026-05-27T02:27:51Z                                                                             |
| disk_format      | iso                                                                                              |
| file             | /v2/images/85b9f313-658e-4d7c-bccf-aad789e782d0/file                                             |
| id               | 85b9f313-658e-4d7c-bccf-aad789e782d0                                                             |
| min_disk         | 0                                                                                                |
| min_ram          | 0                                                                                                |
| name             | netgateInstaller12                                                                               |
| owner            | xxxxxxxxxxxxxxxxxxxxxxx                                                                 |
| properties       | os_hidden='False', owner_specified.openstack.md5='',                                             |
|                  | owner_specified.openstack.object='images/netgateInstaller12',                                    |
|                  | owner_specified.openstack.sha256=''                                                              |
| protected        | False                                                                                            |
| schema           | /v2/schemas/image                                                                                |
| status           | queued                                                                                           |
| tags             |                                                                                                  |
| updated_at       | 2026-05-27T02:27:51Z                                                                             |
| visibility       | shared                                                                                           |
+------------------+--------------------------------------------------------------------------------------------------+

				
			

On vérifie de temps en temps le statut de l’image pour voir si elle act active :

				
					openstack image --os-region-name=GRA3 show 85b9f313-658e-4d7c-bccf-aad789e782d0
				
			
				
					+------------------+--------------------------------------------------------------------------------------------------+
| Field            | Value                                                                                            |
+------------------+--------------------------------------------------------------------------------------------------+
| checksum         | aeff6149b2f3e2544d8a45d3f9bddff3                                                                 |
| container_format | bare                                                                                             |
| created_at       | 2026-05-27T02:27:51Z                                                                             |
| disk_format      | iso                                                                                              |
| file             | /v2/images/85b9f313-658e-4d7c-bccf-aad789e782d0/file                                             |
| id               | 85b9f313-658e-4d7c-bccf-aad789e782d0                                                             |
| min_disk         | 0                                                                                                |
| min_ram          | 0                                                                                                |
| name             | netgateInstaller12                                                                               |
| owner            | xxxxxxxxxxxxxxxxxxxxxxx                                                                 |
| properties       | os_hash_algo='sha512', os_hash_value='15c950a2269ebd27ee76c6a60e4b93347bc20c128dd01cebb5ae3dfb2a |
|                  | b095d9b6d45a80c883e36f1e0c2eacc91408c15e67fd6a3b5ae65d87a77f442832403f', os_hidden='False',      |
|                  | owner_specified.openstack.md5='', owner_specified.openstack.object='images/netgateInstaller12',  |
|                  | owner_specified.openstack.sha256='', stores='s3.GRA'                                             |
| protected        | False                                                                                            |
| schema           | /v2/schemas/image                                                                                |
| size             | 1059239936                                                                                       |
| status           | active                                                                                           |
| tags             |                                                                                                  |
| updated_at       | 2026-05-27T02:30:33Z                                                                             |
| visibility       | shared                                                                                           |
+------------------+--------------------------------------------------------------------------------------------------+
				
			

4. Initialiser une instance temporaire avec cette image

L’image ISO est à booter temporairement le temps de pré-installer un volume qui servira ensuite de volume racine pour l’instance définitive.

Note : nous n’avons pas besoin pour l’instant de réseau privé. On utilise le réseau public « Ext-Net ».

				
					openstack server --os-region-name GRA3 create --image netgateInstaller12 --net Ext-Net --flavor d2-2 pfs-3
				
			
				
					+-------------------------------------+-------------------------------------------------------------------------------+
| Field                               | Value                                                                         |
+-------------------------------------+-------------------------------------------------------------------------------+
| OS-DCF:diskConfig                   | MANUAL                                                                        |
| OS-EXT-AZ:availability_zone         | None                                                                          |
| OS-EXT-SRV-ATTR:host                | None                                                                          |
| OS-EXT-SRV-ATTR:hostname            | None                                                                          |
| OS-EXT-SRV-ATTR:hypervisor_hostname | None                                                                          |
| OS-EXT-SRV-ATTR:instance_name       | None                                                                          |
| OS-EXT-SRV-ATTR:kernel_id           | None                                                                          |
| OS-EXT-SRV-ATTR:launch_index        | None                                                                          |
| OS-EXT-SRV-ATTR:ramdisk_id          | None                                                                          |
| OS-EXT-SRV-ATTR:reservation_id      | None                                                                          |
| OS-EXT-SRV-ATTR:root_device_name    | None                                                                          |
| OS-EXT-SRV-ATTR:user_data           | None                                                                          |
| OS-EXT-STS:power_state              | N/A                                                                           |
| OS-EXT-STS:task_state               | scheduling                                                                    |
| OS-EXT-STS:vm_state                 | building                                                                      |
| OS-SRV-USG:launched_at              | None                                                                          |
| OS-SRV-USG:terminated_at            | None                                                                          |
| accessIPv4                          | None                                                                          |
| accessIPv6                          | None                                                                          |
| addresses                           | N/A                                                                           |
| adminPass                           | xxxxxxxxxx                                                                  |
| config_drive                        | None                                                                          |
| created                             | 2026-05-27T02:50:07Z                                                          |
| description                         | None                                                                          |
| flavor                              | description=, disk='25', ephemeral='0', extra_specs.kind='ovh.d2',            |
|                                     | extra_specs.ovh:qos_policy.bgpovs='100mbit',                                  |
|                                     | extra_specs.ovh:qos_policy.default='100mbit',                                 |
|                                     | extra_specs.ovh:qos_policy.ovs='100mbit',                                     |
|                                     | extra_specs.ovh:shared_storage='False',                                       |
|                                     | extra_specs.quota:disk_read_iops_sec='12000',                                 |
|                                     | extra_specs.quota:disk_write_iops_sec='10000', id='d2-2', is_disabled=,       |
|                                     | is_public='True', location=, name='d2-2', original_name='d2-2', ram='2000',   |
|                                     | rxtx_factor=, swap='0', vcpus='1'                                             |
| hostId                              | None                                                                          |
| host_status                         | None                                                                          |
| id                                  | xxxxxxxxxx                                          |
| image                               | netgateInstaller12 (85b9f313-658e-4d7c-bccf-aad789e782d0)                     |
| key_name                            | None                                                                          |
| locked                              | None                                                                          |
| locked_reason                       | None                                                                          |
| name                                | pfs-3                                                                         |
| pinned_availability_zone            | None                                                                          |
| progress                            | None                                                                          |
| project_id                          | xxxxxxxxxx                                              |
| properties                          | None                                                                          |
| security_groups                     | name='default'                                                                |
| server_groups                       | None                                                                          |
| status                              | BUILD                                                                         |
| tags                                |                                                                               |
| trusted_image_certificates          | None                                                                          |
| updated                             | 2026-05-27T02:50:07Z                                                          |
| user_id                             | xxxxxxxxxx                                              |
| volumes_attached                    |                                                                               |
+-------------------------------------+-------------------------------------------------------------------------------+

				
			

Nous surveillons par moment l’avancée du lancement :

				
					openstack server --os-region-name GRA3 list --image netgateInstaller12
				
			
				
					+-----------------------------+-------+--------+-----------------------------+--------------------+--------+
| ID                          | Name  | Status | Networks                    | Image              | Flavor |
+-----------------------------+-------+--------+-----------------------------+--------------------+--------+
| xxxxxxxx-xxxx-xxxx-xxxx-    | pfs-3 | ACTIVE | Ext-Net=2001:xxxx:xxx:xxxx: | netgateInstaller12 | d2-2   |
| xxxxxxxxxxxx                |       |        | :xxxx, xxx.xxx.xxx.xxx        |                    |        |
+-----------------------------+-------+--------+-----------------------------+--------------------+--------+
				
			

5. Ajouter le volume qui deviendra un modèle de disque de boot par la suite

Il faut créer un volume de même taille que celui de l’instance finale. J’ai eu un doute si en choisissant la taille exacte, ça allait passer ou pas (réponse à la fin).

  • La taille est 25 = 25 Gio
  • Mon instance s’appelle pfs-3
				
					openstack volume --os-region-name GRA3 create --size 25 pfsTmp
openstack server --os-region-name GRA3 add volume pfs-3 pfsTmp
				
			

6. Connexion à la console

Rendez-vous sur le manager OVH pour vous connecter à la console de l’instance.

7. Pré-Installation via la console

Malheureusement, le branchement du second volume va mettre le bazar sur la console et vous ne verrez pas bien la dernière ligne, mais on oublie les messages qui s’affichent et on valide par entrée.

L’installeur va télécharger pfSense, c’est un peu long, ne rien toucher, ça prend 3 à 4 minutes avant que l’écran ne commence à s’activer. Il faut compter 12 minutes en tout.

Attention à ne pas faire reboot, choisissez le halt et attendez bien l’arrêt.

8. Effacer l'instance temporaire

				
					openstack server --os-region-name GRA3 delete pfs-3
				
			

9. Convertir le volume en image d'installation

				
					openstack image --os-region-name GRA3 create --volume pfsTmp pfSense281
				
			
				
					+---------------------+--------------------------------------+
| Field               | Value                                |
+---------------------+--------------------------------------+
| container_format    | bare                                 |
| disk_format         | raw                                  |
| display_description | None                                 |
| id                  | ae1763ae-df4b-4d84-98b4-7769a3042956 |
| image_id            | 0220d8f8-f3a6-467b-8433-72f20342d7bb |
| image_name          | pfSense281                           |
| protected           | False                                |
| size                | 25                                   |
| status              | uploading                            |
| updated_at          | 2026-05-27T03:42:47.000000           |
| visibility          | shared                               |
| volume_type         | classic                              |
+---------------------+--------------------------------------+

				
			

On peut surveille le statut, je vous laisse trouver la bonne commande (l’étape entre saving et active est assez longue mais comme j’ai dormi, je ne sais pas combien de temps) :

				
					+------+-----------------------------------------------+--------+
| ID   | Name                                          | Status |
+------+-----------------------------------------------+--------+
| xxxx | pfSense281                                    | queued |
+------+-----------------------------------------------+--------+
				
			
				
					+------+-----------------------------------------------+--------+
| ID   | Name                                          | Status |
+------+-----------------------------------------------+--------+
| xxxx | pfSense281                                    | saving |
+------+-----------------------------------------------+--------+
				
			
				
					+------+-----------------------------------------------+--------+
| ID   | Name                                          | Status |
+------+-----------------------------------------------+--------+
| xxxx | pfSense281                                    | active |
+------+-----------------------------------------------+--------+
				
			

10. Lancer une nouvelle instance

Comme je le disais, il faut un réseau privé, je vous laisser chercher comment faire, ça ‘a pris un peu de temps pour comprendre (si vous voulez plus d’astuces, inscrivez-vous dans mes contacts en page d’accueil). Le mien s’appelle LIBVLAN3. Pensez à changer les paramètres avec les vôtres.

				
					openstack server --os-region-name GRA3 create --image pfSense281 --net Ext-Net --net LIBVLAN3 --flavor d2-2 pfs-3
				
			

11. Accéder de nouveau à la console pour configurer les adresses IPs

Sur la console, choisissez 1 et répondez :

  • Should VLANs be set up now ?
  • Réponse : n

Les VLANs sont gérés par openstack, inutile de le faire ici.

Ensuite, déterminez quelle interface est le WLAN et laquelle est le LAN :

				
					openstack port --os-region-name GRA3 list --server pfs-3
				
			

Openstack a déjà affecté probablement une adresse IP privée mais on va le changer après. En attendant, on veut déterminer quelle adresse MAC correspond à quelle interface : vtnet0 ou vtnet1

				
					+-------------------+------+-------------------+------------------------------------------+--------+
| ID                | Name | MAC Address       | Fixed IP Addresses                       | Status |
+-------------------+------+-------------------+------------------------------------------+--------+
| 5d5d3557-43ad-xxx |      | fa:16:3e:91:1c:fa | ip_address='10.3.0.146', subnet_id='xxxx'| ACTIVE |
| eb7dc701-064e-xxx |      | fa:16:3e:95:fe:be | ip_address='2001:xxxx', subnet_id='xxxx' | ACTIVE |
|                   |      |                   | ip_address='x.x.x.x', subnet_id='xxxx'   |        |
+-------------------+------+-------------------+------------------------------------------+--------+
				
			

Le WAN est donc, dans mon cas fa:16:3e:91:1c:fa et le LAN est l’autre:

Il faut maintenant assigner les adresses IPs  en décidant d’une IP fixe (j’ai choisi ici 10.3.0.3) :

12. Attribuer l'IP fixe à l'instance côté openstack

				
					openstack port --os-region-name GRA3 set --fixed-ip ip-address=10.3.0.1 5d5d3557-xxx
openstack port --os-region-name GRA3 unset --fixed-ip ip-address=10.3.0.xxx,subnet=xxxx yyyyyy

				
			

13. Comment accéder à l'interface web pour configurer pfsense ?

Le configurator n’est pas prévu pour écouter sur l’interface WAN.

Nous allons nous continuons sur la console pour activer SSH et ouvrir le firewall :

Nous choisissons le shell (choix 8) et on va activer le clavier français :

Nous créons un fichier de règle firewall pour ouvrir le PING et le SSH (depuis son IP) opengui.conf (avec l’éditeur vi):

On charge le fichier de règle dans le firewall :

				
					pfctl -a 'userrules/temp' -f opengui.conf

				
			

Maintenant, vous pouvez vous connecter au pfsense depuis votre Linux (mot de passe pfsense) et rediriger le port 80 en local:

				
					ssh -N -L 8081:127.0.0.1:80 admin@<IPPFSENSE>
				
			

Maintenant le webconfigurator est accessible en local :

Alors l’URL http://127.0.0.1:8081 sera redirigée sur le réseau privé, sur la bonne IP.

SI vous êtes déjà en VPN sur le réseau: http://10.3.0.3

Je vous laisse chercher. Pour me suivre et connaître ces autres astuces, inscrivez-vous sur mon formulaire ici.

L’installation est « finie ».

Accéder aux tarifs (SYS Master)

Accéder aux tarifs (WP Master)

Accéder aux tarifs (doliMaster)