# 10. Appendix

## **Appendix A - Hardware**

<table border="0" cellpadding="0" cellspacing="0" id="bkmrk-device-description-l"><tbody><tr><td width="161">**Device**

</td><td width="226">**Description**

</td><td width="275">**Link**

</td></tr><tr><td width="161">Protectli FW6D

</td><td width="226">OPNsense firewall/router appliance

</td><td width="275">[<u>https://protectli.com/product/fw6d/</u>](https://protectli.com/product/fw6d/ "https://protectli.com/product/fw6d/")

</td></tr><tr><td width="161">UniFi U6+ Access Point

</td><td width="226">Dual-band WiFi 6 AP (managed by UniFi Controller)

</td><td width="275">[<u>https://techspecs.ui.com/unifi/wifi/u6-plus</u>](https://techspecs.ui.com/unifi/wifi/u6-plus "https://techspecs.ui.com/unifi/wifi/u6-plus")

</td></tr></tbody></table>

## **Appendix B - Software**

<table border="0" cellpadding="0" cellspacing="0" id="bkmrk-software-purpose-lin"><tbody><tr><td width="161">**Software**

</td><td width="227">**Purpose**

</td><td width="274">**Link**

</td></tr><tr><td width="161">OPNsense

</td><td width="227">Firewall, router, DNS resolver, IDS/IPS

</td><td width="274">[<u>https://opnsense.org/</u>](https://opnsense.org/ "https://opnsense.org/")

</td></tr><tr><td width="161">UniFi Network Server (Controller)

</td><td width="227">WiFi AP management and firmware control

</td><td width="274">[<u>https://ui.com/download/releases/network-server</u>](https://ui.com/download/releases/network-server "https://ui.com/download/releases/network-server")

</td></tr></tbody></table>

## **Appendix C - Firewall Rule Sets**

**Aliases:**

<table border="0" cellpadding="0" cellspacing="0" id="bkmrk-alias-type-content-d"><tbody><tr><td width="85">**Alias**

</td><td width="82">**Type**

</td><td width="115">**Content**

</td><td width="353">**Description**

</td></tr><tr><td width="85">RFC1918

</td><td width="82">Network

</td><td width="115">192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12

</td><td width="353">All private IP ranges

</td></tr><tr><td width="85">Geo\_US

</td><td width="82">GeoIP

</td><td width="115">United States

</td><td width="353">U.S. IP address ranges

</td></tr><tr><td width="85">print\_ports

</td><td width="82">Port

</td><td width="115">515, 631, 9100

</td><td width="353">Printing — LPD, IPP, RAW

</td></tr><tr><td width="85">scan\_ports

</td><td width="82">Port

</td><td width="115">139, 445

</td><td width="353">SMB scan-to-folder (Windows only)

</td></tr><tr><td width="85">scanback

</td><td width="82">Port

</td><td width="115">137, 161, 54925

</td><td width="353">Brother iPrint&amp;Scan scanning (UDP only)

</td></tr><tr><td width="85">unifi\_ports

</td><td width="82">Port

</td><td width="115">443, 8080, 8443

</td><td width="353">UniFi AP management

</td></tr></tbody></table>

**Rules:**

<table border="0" cellpadding="0" cellspacing="0" id="bkmrk-vlan-action-dir-tcp%2F" style="width: 112.619%;"><tbody><tr><td style="width: 9.0584%;" width="66">**VLAN**

</td><td style="width: 7.74732%;" width="66">**Action**

</td><td style="width: 5.00596%;" width="38">**Dir**

</td><td style="width: 9.65435%;" width="66">**TCP/IP**

</td><td style="width: 10.1311%;" width="76">**Protocol**

</td><td style="width: 17.4017%;" width="104">**Source**

</td><td style="width: 14.1836%;" width="123">**Destination**

</td><td style="width: 6.55542%;" width="57">**Ports**

</td><td style="width: 20.2622%;" width="151">**Description**

</td></tr><tr><td style="width: 9.0584%;" width="66">All

</td><td style="width: 7.74732%;" width="66">Pass

</td><td style="width: 5.00596%;" width="38">in

</td><td style="width: 9.65435%;" width="66">IPv4

</td><td style="width: 10.1311%;" width="76">TCP/UDP

</td><td style="width: 17.4017%;" width="104">(VLAN) net

</td><td style="width: 14.1836%;" width="123">(VLAN) address

</td><td style="width: 6.55542%;" width="57">53

</td><td style="width: 20.2622%;" width="151">DNS to Unbound

</td></tr><tr><td style="width: 9.0584%;" width="66">HOME

</td><td style="width: 7.74732%;" width="66">Pass

</td><td style="width: 5.00596%;" width="38">in

</td><td style="width: 9.65435%;" width="66">IPv4

</td><td style="width: 10.1311%;" width="76">TCP

</td><td style="width: 17.4017%;" width="104">HOME net

</td><td style="width: 14.1836%;" width="123">Home address

</td><td style="width: 6.55542%;" width="57">443

</td><td style="width: 20.2622%;" width="151">OPNsense WebGUI

</td></tr><tr><td style="width: 9.0584%;" width="66">Admin

</td><td style="width: 7.74732%;" width="66">Pass

</td><td style="width: 5.00596%;" width="38">in

</td><td style="width: 9.65435%;" width="66">IPv4

</td><td style="width: 10.1311%;" width="76">TCP

</td><td style="width: 17.4017%;" width="104">Admin net

</td><td style="width: 14.1836%;" width="123">Admin address

</td><td style="width: 6.55542%;" width="57">443

</td><td style="width: 20.2622%;" width="151">OPNsense WebGUI — emergency access

</td></tr><tr><td style="width: 9.0584%;" width="66">HOME

</td><td style="width: 7.74732%;" width="66">Pass

</td><td style="width: 5.00596%;" width="38">in

</td><td style="width: 9.65435%;" width="66">IPv4

</td><td style="width: 10.1311%;" width="76">TCP

</td><td style="width: 17.4017%;" width="104">HOME net

</td><td style="width: 14.1836%;" width="123">VLAN99\_MGMT net

</td><td style="width: 6.55542%;" width="57">unifi\_ports

</td><td style="width: 20.2622%;" width="151">UniFi controller management

</td></tr><tr><td style="width: 9.0584%;" width="66">MGMT

</td><td style="width: 7.74732%;" width="66">Pass

</td><td style="width: 5.00596%;" width="38">in

</td><td style="width: 9.65435%;" width="66">IPv4

</td><td style="width: 10.1311%;" width="76">TCP

</td><td style="width: 17.4017%;" width="104">MGMT net

</td><td style="width: 14.1836%;" width="123">192.168.99.100

</td><td style="width: 6.55542%;" width="57">unifi\_ports

</td><td style="width: 20.2622%;" width="151">Controller reach to AP

</td></tr><tr><td style="width: 9.0584%;" width="66">MGMT

</td><td style="width: 7.74732%;" width="66">Pass

</td><td style="width: 5.00596%;" width="38">in

</td><td style="width: 9.65435%;" width="66">IPv4

</td><td style="width: 10.1311%;" width="76">TCP

</td><td style="width: 17.4017%;" width="104">192.168.99.100

</td><td style="width: 14.1836%;" width="123">VLAN10\_HOME net

</td><td style="width: 6.55542%;" width="57">8080

</td><td style="width: 20.2622%;" width="151">AP inform back to controller

</td></tr><tr><td style="width: 9.0584%;" width="66">HOME, MOBILE, GUEST, WORK1, WORK2, WORK3

</td><td style="width: 7.74732%;" width="66">Pass

</td><td style="width: 5.00596%;" width="38">in

</td><td style="width: 9.65435%;" width="66">IPv4

</td><td style="width: 10.1311%;" width="76">TCP

</td><td style="width: 17.4017%;" width="104">(VLAN) net

</td><td style="width: 14.1836%;" width="123">VLAN50\_PRINT net

</td><td style="width: 6.55542%;" width="57">print\_ports

</td><td style="width: 20.2622%;" width="151">Printing

</td></tr><tr><td style="width: 9.0584%;" width="66">HOME

</td><td style="width: 7.74732%;" width="66">Pass

</td><td style="width: 5.00596%;" width="38">in

</td><td style="width: 9.65435%;" width="66">IPv4

</td><td style="width: 10.1311%;" width="76">UDP

</td><td style="width: 17.4017%;" width="104">HOME net

</td><td style="width: 14.1836%;" width="123">VLAN50\_PRINT net

</td><td style="width: 6.55542%;" width="57">scanback

</td><td style="width: 20.2622%;" width="151">Mac scanning to printer

</td></tr><tr><td style="width: 9.0584%;" width="66">PRINT

</td><td style="width: 7.74732%;" width="66">Pass

</td><td style="width: 5.00596%;" width="38">in

</td><td style="width: 9.65435%;" width="66">IPv4

</td><td style="width: 10.1311%;" width="76">UDP

</td><td style="width: 17.4017%;" width="104">VLAN50\_PRINT net

</td><td style="width: 14.1836%;" width="123">VLAN10\_HOME net

</td><td style="width: 6.55542%;" width="57">scanback

</td><td style="width: 20.2622%;" width="151">Printer scan response to Mac

</td></tr><tr><td style="width: 9.0584%;" width="66">PRINT

</td><td style="width: 7.74732%;" width="66">Pass

</td><td style="width: 5.00596%;" width="38">in

</td><td style="width: 9.65435%;" width="66">IPv4

</td><td style="width: 10.1311%;" width="76">TCP

</td><td style="width: 17.4017%;" width="104">VLAN50\_PRINT net

</td><td style="width: 14.1836%;" width="123">RFC1918

</td><td style="width: 6.55542%;" width="57">scan\_ports

</td><td style="width: 20.2622%;" width="151">SMB scan-to-folder — Windows; enable when needed

</td></tr><tr><td style="width: 9.0584%;" width="66">All

</td><td style="width: 7.74732%;" width="66">Block

</td><td style="width: 5.00596%;" width="38">in

</td><td style="width: 9.65435%;" width="66">IPv4

</td><td style="width: 10.1311%;" width="76">\*

</td><td style="width: 17.4017%;" width="104">(VLAN) net

</td><td style="width: 14.1836%;" width="123">RFC1918

</td><td style="width: 6.55542%;" width="57">\*

</td><td style="width: 20.2622%;" width="151">Block inter-VLAN lateral movement

</td></tr><tr><td style="width: 9.0584%;" width="66">IoT,

PRINT

</td><td style="width: 7.74732%;" width="66">Block

</td><td style="width: 5.00596%;" width="38">in

</td><td style="width: 9.65435%;" width="66">IPv4

</td><td style="width: 10.1311%;" width="76">UDP

</td><td style="width: 17.4017%;" width="104">(VLAN) net

</td><td style="width: 14.1836%;" width="123">Any

</td><td style="width: 6.55542%;" width="57">443

</td><td style="width: 20.2622%;" width="151">Block QUIC

</td></tr><tr><td style="width: 9.0584%;" width="66">IoT,

PRINT

</td><td style="width: 7.74732%;" width="66">Pass

</td><td style="width: 5.00596%;" width="38">in

</td><td style="width: 9.65435%;" width="66">IPv4

</td><td style="width: 10.1311%;" width="76">\*

</td><td style="width: 17.4017%;" width="104">(VLAN) net

</td><td style="width: 14.1836%;" width="123">Geo\_US

</td><td style="width: 6.55542%;" width="57">\*

</td><td style="width: 20.2622%;" width="151">Internet — U.S. destinations only

</td></tr><tr><td style="width: 9.0584%;" width="66">IoT,

PRINT

</td><td style="width: 7.74732%;" width="66">Block

</td><td style="width: 5.00596%;" width="38">in

</td><td style="width: 9.65435%;" width="66">IPv4

</td><td style="width: 10.1311%;" width="76">\*

</td><td style="width: 17.4017%;" width="104">(VLAN) net

</td><td style="width: 14.1836%;" width="123">! Geo\_US

</td><td style="width: 6.55542%;" width="57">\*

</td><td style="width: 20.2622%;" width="151">Block non-U.S. destinations (logged)

</td></tr><tr><td style="width: 9.0584%;" width="66">HOME, MOBILE, GUEST, WORK1, WORK2, WORK3

</td><td style="width: 7.74732%;" width="66">Pass

</td><td style="width: 5.00596%;" width="38">in

</td><td style="width: 9.65435%;" width="66">IPv4

</td><td style="width: 10.1311%;" width="76">\*

</td><td style="width: 17.4017%;" width="104">(VLAN) net

</td><td style="width: 14.1836%;" width="123">any

</td><td style="width: 6.55542%;" width="57">\*

</td><td style="width: 20.2622%;" width="151">Internet access

</td></tr><tr><td style="width: 9.0584%;" width="66">MGMT,

Admin

</td><td style="width: 7.74732%;" width="66">Block

</td><td style="width: 5.00596%;" width="38">in

</td><td style="width: 9.65435%;" width="66">IPv4

</td><td style="width: 10.1311%;" width="76">\*

</td><td style="width: 17.4017%;" width="104">(VLAN) net

</td><td style="width: 14.1836%;" width="123">any

</td><td style="width: 6.55542%;" width="57">\*

</td><td style="width: 20.2622%;" width="151">Block all remaining traffic

</td></tr></tbody></table>

**Notes:**

- “In” = traffic entering the interface from that VLAN toward others or WAN
- The DNS pass rule appears at the top of every interface's rule set. The explicit pass is necessary because the VLAN gateway address (where Unbound listens) falls within RFC1918 space and would otherwise be caught by the RFC1918 block rule.
- For IoT and PRINT, the RFC1918 block is evaluated before the GeoIP rules, so the Geo\_US pass and non-U.S. block only ever act on public internet traffic.
- Logging is enabled for all “block” and geoIP rules
- The SMB scan-to-folder rule (PRINT, disabled) is disabled by default. Enable temporarily for Windows scan-to-folder, then disable when finished.
- For MGMT and Admin, the final block-all rule ensures no internet access regardless.
- The static AP IP 192.168.99.100 used in the MGMT rules is maintained via a DHCP static reservation on VLAN99\_MGMT.