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 :
- Installer le gestionnaire de jail Iocage
- Télécharger la version de FreeBSD
- Configurer l’IP partagée et le pare-feu Pf
- Créer un nouveau jail avec Iocage
- 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-iocageTapez ‘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 listMaintenant, 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 zrootMaintenant, 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 fetchMaintenant, 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-RELEASEEn 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 bridge0Et 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.confAjoutez 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:networkMaintenant, 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_hostMaintenant, 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 stateEnregistrez 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 reloadAprès cela, vérifiez toutes les règles sur le pare-feu pf en utilisant la commande suivante.
pfctl -s rulesEt 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-RELEASEAjoutez 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" jail01Activez le jail pour qu’il démarre au démarrage.
iocage set boot=on jail01Vérifiez maintenant la liste des jails.
iocage listEt 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 jail01Une fois le jail démarré, accédez au jail en utilisant la commande suivante.
iocage console jail01Vous 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 bridge0Et 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 nginxUne 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 startVérifiez maintenant la liste des ports ouverts sur le ‘jail01’.
sockstat -l4Et 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.htmlFaites quelques modifications et quittez.
cat nginx-dist/index.html
Accédez maintenant à l’adresse IP externe du serveur depuis votre navigateur web.
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
Recevez de nouveaux articles dans votre boîte de réception.
Aucun spam. Désabonnez-vous à tout moment.