Getting Started

This guide is meant to get you up and running with bastille, and will show you a number of different options to create and manage your jails.

Setup

The first command a new user should run is the bastille setup command. This will attempt to configure the networking, storage, and firewall on your system for use with Bastille.

By default the setup command will configure a loopback interface, storage (ZFS if enabled, otherwise UFS) and the pf firewall if you run it as below without any options.

Alternatively, you can run the setup command with any of the supported options to configure the selected option by itself.

To see a list of available options and switches, see the setup subcommand.

ishmael ~ # bastille setup

Bootstrapping a Release

Then we need to bootstrap a release for bastille to use. We will use 14.2-RELEASE.

ishmael ~ # bastille bootstrap 14.2-RELEASE

Creating a Jail

Next we can create our first jail. Bastille can create a few different types of jails.

  • Thin jails are the default, and are called thin because they use symlinks to the bootstrapped release. They are lightweight and are created quickly.

  • Thick jails used the entire release, which is copied into the jail. The jail then acts like a full BSD install, completely independent of the release. Created with bastille create -T.

  • Clone jails are essentially clones of the bootstrapped release. Changes to the release will affect the clone jail. Created with bastille create -C.

  • Empty jails are just that, empty. These should be used only if you know what you are doing. Created with bastille create -E.

  • Linux jails are jails that run linux. Created with bastille create -L.

Only clone, thin, and thick jails can be created with -V -B and -M.

We will focus on thin jails for the guide.

Classic/Standard Jail

ishmael ~ # bastille create nextcloud 14.2-RELEASE 10.1.1.4/24 vtnet0

This will create a classic jail and add the IP as an alias to the vtnet0 interface. This jail will use NAT for its outbound traffic. If you want to run a webserver of something similar inside it, you will have to redirect traffic from the host using bastille rdr

It the IP is reachable within your local subnet, however, then it is not necessary to redirect the traffic. It will pass in and out normally.

ishmael ~ # bastille rdr nextcloud tcp 80 80

This will forward traffic from port 80 on the host to port 80 inside the jail.

VNET Jail

VNET jails can use either a host interface with -V or a manually created bridge interface with -B. You can also optionally set a static MAC for the jail interface with -M.

ishmael ~ # bastille create -BM nextcloud 14.2-RELEASE 192.168.1.50/24 bridge0

or

ishmael ~ # bastille create -VM nextcloud 14.2-RELEASE 192.168.1.50/24 vtnet0

The IP used for VNET jails should be an IP reachable inside your local network. You can also specify 0.0.0.0 or DHCP to use DHCP.

Linux Jail

Linux jails are still considered experimental, but they seem to work. First we must bootstrap a linux distro.

ishmael ~ # bastille bootstrap bionic

Then we can create our linux jail using this release. This will take a while…

ishmael ~ # bastille create -L linux_jail bionic 10.1.1.7/24 vtnet0