August 31, 2015

987 words 5 mins read

Tutorial: Using VMWare ESXi and PFsense as a network firewall/router

In most networks, you will have dedicated hardware to function as your “edge” (firewall/router). This is typically for the best, but there are always cases where you can’t put out that dedicated hardware. Sometimes it’s for cost reasons and sometimes it’s for complexity. In my particular case, I was installing an

ESXi server in a datacenter and only had 2 amps of power to work with, of which my server took up ~1.8amps at peak load. So cost came into play and we simply couldn’t afford to put in dedicated hardware that could push enough bits. In such cases, it is possible the setup ESXi on the network edge, in a reasonably secure fashion, with PFSense acting as a firewall.

The most important requirement to this project is that your VMWare ESXi server has at least two network ports on it. One will be the WAN port, one will be the LAN port. Also throughout this tutorial I will use

PFSense as my firewall/router OS of choice, however it is just an example that can be easily swapped out with any other virtualized firewall product. Some options include Palo Alto Networks, Fortinet, and even generic *NIX operating systems with the right forwarding/firewall setup.

Section 1 — VMWare Setup

Step 1 — Install & Connect to ESXi

  • You should already have ESXi setup and connected via the VSphere client on Windows.
  • It's recommended that you static the IP address of the VMWare Management interface, if you've not done so already.
  • Go to Configuration > Networking
  • Rename the vSwitch interface you're using to "LAN"
2015-08-25 18_23_50-esxi1
Step 2 — Add new interface
You want "Virtual Machine" type
2015-08-25 18_24_15-Add Network Wizard
Step 3 — Select NIC
You want to select your unused NIC (assuming you only have two)
2015-08-25 18_25_11-Add Network Wizard
Step 4 — Name it
This is your "WAN" interface
2015-08-25 18_25_35-Add Network Wizard
Step 5 — Confirm you've got two networks
You'll notice that we've got two vSwitches now. The "LAN" switch has the Management network and is connected currently. The "WAN" switch has nothing, and the adapter is disconnected.
2015-08-25 18_26_06-VMware

Section 2 — Virtual Machine Setup

Step 1 — New VM 2015-08-25 18_29_17-New VM
Step 2 — Typical Setup 2015-08-25 18_29_31-Create New Virtual Machine
Step 3 — Name your VM 2015-08-25 18_29_39-Create New Virtual Machine
Step 4 — Select Datastore 2015-08-25 18_29_46-Create New Virtual Machine
Step 5 — OS Type
If you're using PFSense, select "Other" and "FreeBSD 64bit"
2015-08-25 18_29_57-Create New Virtual Machine
Step 6 — Two NICs
Unlike most VMs with 1 NIC, add 2 NICs to this VM.
Make sure one adapter is on "WAN" network and one adapter is on "LAN" network.
2015-08-25 18_30_18-Create New Virtual Machine
Step 7 — Allocated HD
PFSense doesn't need much space, but it should be allocated a 2:1 for swap (e.g. 4096 MB swap file for 2048 MB of RAM), plus some extra space for packages and logs may be useful.
2015-08-25 18_30_38-Create New Virtual Machine
Step 8 — Edit before completion 2015-08-25 18_30_46-Create New Virtual Machine
Step 9 — Final settings
As this is my firewall, I want to make sure it is plenty fast. So I opted for 4 cores and 2 GB RAM. Also attach the CD drive to PFSense installer (be it datastore ISO or real USB/Optical drive).
2015-08-25 18_31_54-pfsense - Virtual Machine Properties
Step 8 — Verify Network
Hop back to Configuration > Networking and you should see something like this. Note: various VMs are all attached to the LAN vSwitch, however only PFsense VM is attached to both WAN & LAN (just like a real firewall).
2015-08-25 18_33_31-VMWare Verify
Step 9 — VM Startup
Go to Configuration > VM Startup/Shutdown
Click Properties
2015-08-31 12_30_32-Store
Step 10 — Set PFSense to first boot order
You may have other VMs that you want to auto-start, but as this is your firewall, it should be the first to start.
2015-08-31 12_31_05-Virtual Machine Startup and Shutdown

Section 3 — PFSense

Step 1 — Install PFSense
Once you've installed PFSense, it will automatically configure its local interface to
pfsense install1
Step 2 (Optional) — Change local network
You can reconfigure the local network either via web interface (at the aforementioned IP: or command line
pfsense installer
Step 3 — Configure WAN
Again, this can be configured either via the web, or command line.
2015-08-31 12_19_39-pfSense - Interfaces_ WAN
Step 4 — Plug in WAN cable 2015-08-19 13.59.53
Step 5 — Test
If you've got the ports configured properly (i.e. WAN hardware is WAN in VMWare and WAN in PFSense), you should be able to connect to the internet.
2015-08-31 12_27_35-pfSense - Status_ Dashboard

There are two big questions after building a setup like this, the first is security. Since PFSense is the host to provide an interface on the WAN, it should be the only method of ingress into your network. With no VMware management interface on the WAN, there should be no way for an outside party to access ESXi directly. I've used this setup successfully (and safely) before, as have others. However, you always need to balance your particular security concerns with the cost of dedicated devices.

The second question is remote management/maintenance/failure. Managing ESXi remotely is easy, if you setup a VPN on your PFSense VM. Without that (or similar) you will not be able to remotely manage the box (by design). But what happens if there is a failure either in the VMWare hardware or the PFSense virtual machine? That's the big failing point of this setup — you're down. If, for whatever reason, PFsense dies — your network is offline and you cannot remotely manage it. If this hardware is installed in a dateacenter, you'd need to either get in there yourself or remote hands reboot. Something to keep in mind when balancing the cost issue. OF course, if it's local (say you use this at home), then it's not such a big deal.

I will note that this is the setup I use in my home network, which doubles as my homelab. Having a VM for a firewall gives me a lot of flexibility, like adding an entirely separate vSwitched network for experimental VMs. I can also swap out the firewall VM for another one with next to no downtime. It also allows me to skip one more piece of hardware at home which would add to my otherwise hefty powerbill.