FreeBSD Jail Deployment Notes
References:
FreeBSD Handbook: Chapter 15. Jails
FreeBSD jails with a single public IP address
Install ezjail:
pkg install ezjail
Jail Template Installation:
We’re gonna setup a base template for our jail to use.
ezjail-admin install
Enable ezjail on boot:
sysrc ezjail_enable="YES"
Let’s start the ezjail service:
service ezjail start
Create an interface for jails to use:
sysrc cloned_interfaces="lo1"
sysrc ipv4_addrs_lo1="10.60.0.1-9/29"
Bring the interface up:
service netif cloneup
Create a New Jail:
I’m going to be creating a Jail just for security functions, so I’ll be referring to it as security
.
ezjail-admin create security 10.60.0.2
Configure pf to allow traffic for the jail:
Add the following to /etc/pf.conf
:
jail_if="lo1"
jail_host_ipv4="10.60.0.1"
jail_security_ipv4="10.60.0.2"
To allow outbound network connections from the jails:
nat on $ext_if from $jail_if:network to any -> ($ext_if)
If you need to port forward an external port to a service running in the jail add the following to /etc/pf.conf
:
rdr on $ext_if proto tcp from any to $ext_if port $tcp_port -> $jail_security_ipv4
Apply your changes to pf:
service pf restart
Setup /etc/resolv.conf:
cp /etc/resolv.conf /usr/jails/security/etc/resolv.conf
Start the jail:
ezjail-admin start security
Access the Jail:
Run the following command to get a shell in the jail:
ezjail-admin console security
Written on February 26, 2021