FreeBSD Jail · 8 min read · Dec 13, 2025

Comment configurer Jail avec Iocage sur FreeBSD

Jail est un terme pour la virtualisation au niveau du système d’exploitation sur FreeBSD. Il a été introduit par Poul-Henning Kamp en 1999 et adopté par FreeBSD depuis la version 4.x.

Le Jail permet à l’administrateur système de créer un système mini isolé et indépendant ou ‘jail’ à l’intérieur du système FreeBSD. Le ‘jail’ a son propre système racine et sa configuration, et il est utile si vous souhaitez déployer une application dans un environnement isolé.

Iocage est un gestionnaire de jail FreeBSD écrit en Python. Il est simple et dispose d’une syntaxe de commande facile. Le gestionnaire de jail Iocage est dédié au jeu de données ZFS à l’intérieur des jails et vous permet de créer un jail basé sur les piles de mise en réseau virtuelle ‘VNET’ et/ou le jail basé sur ‘IP partagée’. Avec Iocage, vous pouvez créer le modèle de jail, le jail de base et le jail normal.

Ce tutoriel vous montrera comment configurer et configurer un jail FreeBSD en utilisant le gestionnaire de jail Iocage. Nous allons installer Iocage sur FreeBSD, configurer un nouveau jail en utilisant une IP partagée, configurer le pare-feu pf, puis installer le serveur web nginx à l’intérieur du jail pour des tests.

Prérequis

Pour ce guide, vous devrez installer et configurer le gestionnaire de jail Iocage sur le système FreeBSD installé sur ZFS (Z File System). Et assurez-vous que le pare-feu pf est activé sur votre système FreeBSD.

Voici le guide pour l’installation de FreeBSD sur ZFS et la configuration du pare-feu pf.

Comment installer FreeBSD 12.0 sur ZFS
Comment configurer le pare-feu pf sur FreeBSD

Ce que nous allons faire :

  1. Installer le gestionnaire de jail Iocage
  2. Télécharger la version de FreeBSD
  3. Configurer l’IP partagée et le pare-feu Pf
  4. Créer un nouveau jail avec Iocage
  5. Tester

Étape 1 - Installer Iocage sur FreeBSD

Tout d’abord, nous allons installer et configurer le gestionnaire de jail Iocage sur le système FreeBSD. Iocage est écrit en Python et est disponible dans le dépôt de paquets binaires FreeBSD.

Installez Iocage sur le système FreeBSD en utilisant la commande pkg ci-dessous.

pkg install py36-iocage

Tapez ‘y’ pour accepter l’installation du paquet python Iocage, et l’installation commencera.

Une fois l’installation terminée, vérifiez les pools ZFS disponibles sur le système en utilisant la commande zpool ci-dessous.

zpool list

Maintenant, choisissez le pool ZFS pour l’installation d’Iocage. Pour ce guide, nous allons utiliser le pool ZFS par défaut pour FreeBSD appelé ‘zroot’.

Activez le pool ‘zroot’ pour l’utilisation d’Iocage en utilisant la commande ci-dessous.

iocage activate zroot

Maintenant, l’installation d’Iocage sur FreeBSD 12.0 est terminée, et vous pouvez utiliser la ligne de commande iocage pour créer et gérer le jail FreeBSD.

De plus, vous pouvez activer le jail au démarrage du système en ajoutant le service iocage au fichier ‘/etc/rc.conf’ en utilisant la commande sysrc ci-dessous.

sysrc iocage_enable=yes

Étape 2 - Télécharger la version de FreeBSD

Pour créer un nouveau jail, vous devrez télécharger la version de FreeBSD. Et vous pouvez créer un nouveau jail qui est une version différente de votre version hôte de FreeBSD.

Vérifiez les versions de Release disponibles en utilisant la commande iocage ci-dessous.

iocage fetch

Maintenant, vous obtiendrez une version différente de la Release. Sélectionnez la version dont vous avez besoin et tapez le numéro. Choisissez le numéro ‘2’ pour télécharger la dernière version de Release.

Attendez que l’image de la version FreeBSD soit téléchargée.

Si vous souhaitez télécharger une image différente, vous pouvez utiliser la commande suivante.

iocage fetch 11.3-RELEASE

En conséquence, l’image de la version FreeBSD pour le jail a été téléchargée.

Étape 3 - Configurer l’IP partagée et le pare-feu Pf

Après avoir téléchargé les images sources pour le jail, nous allons configurer le réseau et le pare-feu pf sur le système. Nous allons créer une nouvelle interface réseau appelée ‘bridge0’ avec l’adresse IP réseau ‘10.8.8.1/24’, et elle sera utilisée par le jail.

Ajoutez une nouvelle configuration au fichier ‘/etc/rc.conf’ en exécutant la commande suivante.

sysrc cloned_interfaces+="bridge0"  
sysrc ifconfig_bridge0="10.8.8.1/24"

Créez une nouvelle interface ‘bridge0’ avec l’adresse IP réseau ‘10.8.8.1/24’.

ifconfig bridge0 create  
ifconfig bridge0 10.8.8.1/24 up

Maintenant que l’interface ‘bridge0’ a été créée, vérifiez-la en utilisant la commande suivante.

ifconfig bridge0

Et vous obtiendrez le résultat ci-dessous.

Ensuite, nous allons configurer le pare-feu pf et ajouter une nouvelle configuration pour l’environnement jail. Nous utilisons la configuration de pare-feu pf simple dans ce guide.

Comment configurer le pare-feu Pf sur FreeBSD 12.0

Allez dans le répertoire ‘/usr/local/etc’ et éditez le fichier de configuration ‘pf.conf’.

cd /usr/local/etc/  
vim pf.conf

Ajoutez l’interface réseau interne ‘bridge0’ et son adresse IP en tant que variables ‘int_if’ et ‘localnet’.

# Interface interne  
int_if = "bridge0"  
localnet = $int_if:network

Maintenant, définissez l’adresse IP du jail hôte et les ports qui seront redirigés vers le jail. Nous allons rediriger les connexions HTTP et HTTPS sur l’interface externe du système vers l’adresse IP hôte du jail ‘10.8.8.5’.

# Redirection des ports http et https vers le Jail '10.8.8.5'  
ports_to_forward="{ 80, 443 }"  
forward_host="10.8.8.5"

Activez nat sur l’interface externe ‘ext_if’ pour la variable ‘localnet’ du jail, puis activez la redirection de port de la variable ‘ports_to_forward’ vers l’hôte ‘forward_host’.

# nat jail vers internet et internet vers jail (http et https uniquement)  
nat on $ext_if inet from $localnet to any -> ($ext_if)  
rdr on $ext_if proto tcp from any to any port $ports_to_forward -> $forward_host

Maintenant, passez toutes les connexions de l’interface ‘bridge0’ et passez les connexions entrantes sur l’interface externe vers les ‘ports_to_forward’ HTTP et HTTPS.

pass from { self, $localnet } to any keep state  
pass in on $ext_if proto {udp, tcp} from any to any port $ports_to_forward keep state

Enregistrez et fermez.

Maintenant, testez la configuration du pare-feu pf et assurez-vous qu’il n’y a pas d’erreur, puis rechargez le service pf.

service pf check  
service pf reload

Après cela, vérifiez toutes les règles sur le pare-feu pf en utilisant la commande suivante.

pfctl -s rules

Et vous obtiendrez le résultat ci-dessous.

De plus, vous pouvez vérifier l’état nat sur le pare-feu pf.

pfctl -v -s nat

En conséquence, la nouvelle interface ‘bridge0’ a été créée, et le pare-feu pf a été configuré. Et nous sommes prêts à créer le premier nouveau jail.

Voici la configuration complète du pare-feu pf.

cat /usr/local/etc/pf.conf
# Définir l'interface externe et l'adresse IP  
ext_if="vtnet0"  
ext_ip="198.13.39.207"

# Définir les services TCP et UDP  
ext_tcp_ports="{ ssh, smtp, smtps, imaps, http, https, domain }"  
ext_udp_ports="{ domain, ntp }"

# Interface interne  
int_if = "bridge0"  
localnet = $int_if:network

# Redirection des ports http et https vers le Jail '10.8.8.5'  
ports_to_forward="{ 80, 443 }"  
forward_host="10.8.8.5"

# Ignorer le localhost  
set skip on lo0

# Interface de journalisation  
set loginterface $ext_if

# nat jail vers internet et internet vers jail (http et https uniquement)  
nat on $ext_if inet from $localnet to any -> ($ext_if)  
rdr on $ext_if proto tcp from any to any port $ports_to_forward -> $forward_host


# Politique par défaut  
block in all  
pass out all keep state

# Autoriser Ping  
pass inet proto icmp icmp-type echoreq

pass from { self, $localnet } to any keep state  
pass in on $ext_if proto {udp, tcp} from any to any port $ports_to_forward keep state

# Autoriser les services  
pass in proto tcp from any to any port $ext_tcp_ports  
pass in proto tcp from any to any port $ext_udp_ports

# Journaliser l'accès pour ssh et http  
pass log quick proto tcp from any to any port { ssh,http }

Étape 4 - Créer un nouveau jail en utilisant Iocage

Après avoir configuré le réseau et le pare-feu pf sur le système FreeBSD, nous sommes prêts à créer un nouveau jail en utilisant iocage.

Créez un nouveau jail appelé ‘jail01’ avec la version FreeBSD ‘12.0-RELEASE’ en utilisant la commande iocage ci-dessous.

iocage create -n jail01 -r 12.0-RELEASE

Ajoutez maintenant l’adresse IP et la passerelle par défaut du jail. Nous allons donner à ‘jail01’ une adresse IP ‘10.8.8.5’ et la passerelle par défaut est l’adresse IP hôte ‘bridge0’ ‘10.8.8.1’.

iocage set ip4_addr="bridge0|10.8.8.5" jail01  
iocage set defaultrouter="10.8.8.1" jail01

Activez le jail pour qu’il démarre au démarrage.

iocage set boot=on jail01

Vérifiez maintenant la liste des jails.

iocage list

Et vous obtiendrez le ‘jail01’ avec l’adresse IP ‘10.8.8.5’ et basé sur la version FreeBSD ‘12.0’.

Ensuite, démarrez le ‘jail01’ en utilisant la commande ci-dessous.

iocage start jail01

Une fois le jail démarré, accédez au jail en utilisant la commande suivante.

iocage console jail01

Vous obtiendrez un nouveau shell à l’intérieur de jail01, comme montré ci-dessous.

À l’intérieur du jail, vérifiez l’adresse IP de l’interface ‘bridge0’ sur le ‘jail01’.

ifconfig bridge0

Et vous obtiendrez que l’interface ‘bridge0’ a une adresse IP ‘10.8.8.5’ comme configuré.

En conséquence, un nouveau jail appelé ‘jail01’ a été créé.

Étape 5 - Test

Dans cette étape, nous allons tester le ‘jail01’ en installant le serveur web Nginx dessus, puis essayer d’accéder à Nginx depuis l’extérieur du réseau, et la connexion sera redirigée vers ‘jail01’.

Tout d’abord, mettez à jour les paquets binaires sur le jail en utilisant la commande pkg ci-dessous.

pkg update

Après cela, installez le serveur web nginx à l’intérieur du jail en utilisant la commande pkg suivante.

pkg install nginx

Une fois l’installation terminée, ajoutez le service nginx au démarrage du système et démarrez le service nginx.

sysrc nginx_enable=yes  
service nginx start

Vérifiez maintenant la liste des ports ouverts sur le ‘jail01’.

sockstat -l4

Et vous obtiendrez que le service Nginx est en cours d’exécution sur le port HTTP ‘80’.

Ensuite, nous allons changer la page par défaut index.html sur le ‘jail01’.

Allez dans le répertoire ‘/usr/loca/www/‘ et éditez le fichier ‘index.html’.

cd /usr/local/www/  
edit nginx-dist/index.html

Faites quelques modifications et quittez.

cat nginx-dist/index.html

Accédez maintenant à l’adresse IP externe du serveur depuis votre navigateur web.

http://198.xx.xx.207/

Et vous obtiendrez la page index.html de nginx à l’intérieur du ‘jail01’.

En conséquence, le ‘jail01’ est en cours d’exécution avec Nginx installé dessus. Toutes les connexions HTTP et HTTPS au serveur seront redirigées vers le ‘jail01’.

Référence

Share: X/Twitter LinkedIn

Recevez de nouveaux articles dans votre boîte de réception.

Aucun spam. Désabonnez-vous à tout moment.