Firewall Cluster mit pfSense und APU2C4

APU2C4 Hardware

Bei einem meiner aktuellen Projekte habe ich mich aus Budgetgründen dazu entschieden ein pfSense Cluster auf Basis der APU2C4 von PC Engines GmbH einzusetzen.
An dem Standort sitzen nur wenige Programmierer, welche nur wenig Bandbreite im VPN Tunnel benötigen. Im LAN wird ein normales /24 Netz eingesetzt. Im WAN gibt es ein statisches /30 Subnetz. Bitte habt Verständnis, wenn ich nicht auf jeden Punkt im Detail eingehe. Für jemanden mit Basis-Kenntnissen in pfSense sollte es jedoch ausreichend detailliert beschrieben sein.

Hardware Vorbereitung

Die Hardware wird vom Varia-Store teil-montiert geliefert. Die APU2C4 Mainboards sind bereits im Gehäuse verbaut. Auch Lüfter und Netzteile sind fertig montiert. Nur die mSATA SSD’s müssen noch selbst verbaut werden. Dazu kann das Gehäuse einfach mit einem Schraubendreher geöffnet werden. Die mSATA SSD’s wird etwa im 45° Winkel vom Board abstehend in den mSATA Slot eingeführt und rastet beim anschließenden herunterdrücken hörbar in die Klickverschlüsse ein.

Software Download

Für die Installation der Software muss zunächst die aktuelle Version von pfSense heruntergeladen werden.
Beim Download darauf achten, dass „AMD64“ als Architektur, „USB Memstick Installer“ als Installer und „Serial“ als Console ausgewählt ist.
Nach dem Klick auf Download wird eine Datei mit dem Namen „pfSense-CE-memstick-serial-2.4.3-RELEASE-amd64.img.gz“ heruntergeladen.

 

Vorbereitung Installationsmedium

Der Download muss anschließend mit einer Archivsoftware (z. B. 7-Zip) entpackt werden, damit man die .img Datei erhält.
Diese wird dann mit Wind32 Disk Imager auf einen USB-Stick geschrieben. Hier kann es sein, dass der ein oder andere USB-Stick vom Controller der APU2C4 nicht richtig erkannt wird. Vor allem billige Werbe-USB-Sticks scheitern hier immer wieder.

Hier die englische Anleitung von Netgate:

(https://www.netgate.com/docs/pfsense/install/installing-pfsense.html#prepare-installation-media)

Verbinden mit der seriellen Konsole

Die APU2C4 verfügt über eine serielle Schnittstelle zur Ausgabe von „Bildschirminhalten“. Als Besonderheit gegenüber den meisten Switches verwendet man bei der APU2C4 Hardware ein Null-Modem Kabel. Bei einem 0-Modem Kabel sind im Vergleich zum normalen seriellen Kabel die Pins 2 und 3 gekreuzt.

Wenn ihr also die serielle Schnittstelle eures Notebooks (heutzutage wahrscheinlich meist ein USB auf Serial Adapter) verbunden habt, könnt ihr mit PuTTY im Serial Mode eine Verbindung zur APU2C4 aufbauen. Wichtig ist die Eingabe der richtigen seriellen COM Schnittstelle (ja, tatsächlich muss da als Text COM1/COM2 usw. eingegeben werden). Diese findet ihr auch im Windows Geräte-Manager unter „Anschlüsse (COM & LPT). Als Speed wird bei dieser Hardware 115200 angegeben.

Wenn alles richtig verbunden ist sollte man beim Start der Hardware in seiner PuTTY Konsole eine Ausgabe erhalten und das BIOS sehen.

Installation

Zur Installation im BIOS der APU2C4 den vorbereiteten USB-Stick zum Boot auswählen. Den Installationsassistent wie gewünscht durch klicken. Für die meisten Fälle passen die Standardeinstellungen.

IP Konfiguration

Die Konfiguration der Interfaces mit den festen IP-Adressen kann einfach im Menü in der seriellen Konsole vorgenommen werden. Dazu zuerst über „Assign Interfaces“ die Schnittstellen zuweisen und anschließend über den Menüpunkt „Set Interfaces IP Address“ die gewünschten IP-Adressen konfigurieren. Ich habe die Konfiguration ohne VLAN Interfaces durchgeführt.

Firewall 1

Interface IP-Adresse
WAN (igb0) XXX.XX.XXX.101
LAN (igb1) 192.168.252.2
SYNC/OPT1 (igb2) 192.0.0.1

Firewall 2

Interface IP-Adresse
WAN (igb0) XXX.XX.XXX.102
LAN (igb1) 192.168.252.3
SYNC/OPT1 (igb2) 192.0.0.2

Setzen der gemeinsamen Cluster IP-Adressen

pfSense benutzt in einem Cluster eine gemeinsame IP-Adressen, welche über das CARP Protokoll realisiert wird. Diese gemeinsame IP-Adresse liegt immer nur auf der primären Einheit an.
Unter Firewall > Virtual IPs die gemeinsamen CARP Adressen konfigurieren.

Als Type CARP auswählen. Anschließend ein Kennwort für die VHID Group und die gewünschte IP-Adresse eintragen.

Interface IP-Adresse
WAN XXX.XX.XXX.100
LAN 192.168.252.1

Firewall Regeln für Konfigurations- und State-Synchronisation

Im Sync Interface müssen auf beiden Firewalls Regeln für den Sync eingerichtet werden.

High Availability Sync auf der primären Firewall durch aktivieren der Checkboxen von pfsync und XMLRPC Sync einschalten.
(Achtung: XMLRPC Sync aktiviert man nur auf der Master Firewall!)

Aktivieren von pfsync auf der sekundären Firewall.

Im DHCP Server muss auf der primären Firewall die passive Firewall als Failover Peer angegeben werden.
Auf der passiven Firewall sollte dann automatisch die IP-Adresse der primären Firewall eingetragen sein.

Zusätzlich muss als Gateway und DNS-Server die LAN CARP IP eingetragen werden.

Anpassung NAT Regeln

Man muss für die korrekte Funktionalität des Clusters Anpassungen am NAT vornehmen.
Firewall > NAT > Outbound > Manual Outbound NAT muss aktiviert werden.

  1. Bei der NAT Regel auf dem WAN Interface für das LAN Netzwerk muss als NAT Address die CARP WAN IP eingetragen werden.
  2. Es muss (falls VPN eingesetzt wird) auf dem LAN Interface eine Regel angelegt werden, welche alle per VPN angebundenen Netze (als Quelle) mit dem Ziel LAN Interface IP einer Firewall in die „LAN address“ Definition übersetzt. Ansonsten kann die passive Firewall nicht aus VPN Netzen erreicht werden. Weitere Infos dazu hier.

Die NAT Regel mit dem 127.0.0.0/8 Netz sollte unangetastet bleiben.

Weitere Einstellungen

Achtet darauf, dass an einigen Stellen noch auf das CARP Interface umgestellt werden muss, wenn es keine frisch installierte pfSense ist. Das betrifft z. B. alle VPN Einstellungen. Wenn in IPSec nicht das CARP Interface ausgewählt ist, gibt es Probleme beim Wechsel zwischen den Firewalls.

Prüfung des HA Status

Status > CARP sollte die primäre Firewall als Master anzeigen.
Nach einem Klick auf „Enter Persistent CARP Maintenance Mode“ sollte der Master Status auf die sekundäre Firewall wechseln.

Primäre Firewall:

Sekundäre Firewall:

Status des DHCP Clusters auf beiden Firewall sollte normal sein:

Test

Es gibt einige Dinge, die ihr testen solltet, bevor die Firewall in den Live-Betrieb geht.

  1. State Table Synchronisation: Lasst von einem Gerät im LAN einen dauerhaften Ping auf z. B. 8.8.8.8 laufen. Prüft dann auf der primären Firewall unter Diagnostics > State Table, ob es den State von eurer Client IP zu 8.8.8.8 gibt. Die dann angezeigten Einträge sollten identisch auf der sekundären Firewall vorhanden sein. Die übertragenen Bytes sind auf der sekundären Firewall natürlich noch 0.
  2. Baut eine TCP Verbindung vom LAN in ein anderes Netz auf (z. B. eine SSH Sitzung). Anschließend im Status > CARP Menü auf der primären Firewall den CARP Maintenance Mode aktivieren. Dadurch sollte die primäre Firewall in den CARP Status Backup wechseln und die sekundäre zum Master werden. Die TCP Verbindung bleibt bei korrekt eingerichtetem HA aktiv und wird nicht unterbrochen. Prüft nun wieder die States. Auf der sekundären Firewall sollten nun auch Datenübertragungen sichtbar sein.