Inhaltsverzeichnis

pfsense

pfsense ist eine auf freeBSD basierende Firewall-Distribution.

asymmetrisches Routing

https://docs.netgate.com/pfsense/en/latest/routing/static.html#figure-asymmetric-routing

„Usually, the „TCP:SA“ gets blocked by the firewall because the package took a different path on its way back. Pfsense being a stateful firewall needs to know the full path before letting the package go in. The package path should be the same to the network destination and from the network destination any discrepancy in the path the firewall will block it.“

Static route filtering → Bypass firewall rules for traffic on the same interface This option only applies if one or more static routes have been defined. If it is enabled, traffic that enters and leaves through the same interface will not be checked by the firewall. This may be desirable in some situations where multiple subnets are connected to the same interface.

Alternativ eine Regel auf loating und Sloppy State.

Konfiguration

AES-NI CPU Crypto: Yes (inactive)

System → Advanced → Miscellaneous → Cryptographic Hardware

System -> Advanced -> Admin Access

ansible

siehe auch: https://github.com/opoplawski/ansible-pfsense

ansible-galaxy collection install pfsensible.core

im inventory:

$hostname ansible_python_interpreter="/usr/local/bin/python3.8"

letsencrypt Integration

  1. Paket „acme“ installieren (über System → Package Manager)
  2. Account anlegen: Services → Acme → Certificates
  3. Certificates → Add
    1. Domain eintragen
    2. bei webroot Verzeichnis definieren UND anlegen (via SSH): mkdir -p /usr/local/www/.well-known/acme-challenge

bei haproxy

Bei haproxy-frontends kann der acme-client nicht eingreifen. Standardweg wäre eine DNS-challenge, alternativ können wir das mit dem folgenden Setup via http-challenge lösen:

Wir behelfen uns mit einem extra backend das den acme-client im http-standalone-mode anspricht, bei der Quelle gibt es auch Screenshots.

Beispiel:

new backend for the standalone server:

Frontend ändern:

Default backend, access control lists and actions

Access Control lists:

Actions:

Services → Acme Certificates:

Domain SAN list:

der folgende Befehlt wird intern in der pfsense aufgerufen:

/usr/local/pkg/acme/acme.sh  --issue  --domain '$FQDN' --standalone --listen-v4 --httpport '$STANDALONE_PORT' --home '/tmp/acme/$FQDN/' --accountconf '/tmp/acme/$FQDN/accountconf.conf' --force --reloadCmd '/tmp/acme/$FQDN/reloadcmd.sh' --log-level 3 --log '/tmp/acme/$FQDN/acme_issuecert.log'

Befehle

services listening (auf pfsense)

netstat -an
sockstat -l

Update

nur eine öffentliche Adresse

Idealerweise nutzt man drei öffentliche Adressen (2x nodes, 1x cluster), wenn dies nicht möglich ist kann nur eine der beiden Firewalls zur gleichen Zeit geupdated werden. Die cluster Adresse zeigt immer auf den aktuellen master und es werden private Adressen benutzt.

Dazu fängt man auf dem master an (direkt auf der Startseite ist ein Link), lässt diesen durchlaufen und rebooten. Anschließend loggt man sich auf der neuen Version ein und schaltet das System in den Wartungsmodus ein:

Status → Carp (failover) → Enter persistent CARP maintenace modus

Anschließend loggt man sich neu ein (nun die die fw2 der aktive master) und wiederholt die Update-prozedur. Nach dem reboot von fw2 muss man den Wartungsmodus auf fw1 wieder abschalten. Da diese nicht über die öffentliche IP erreichbar ist, muss man mit SSH-Forwarding (oder VPN) behelfen.

ssh root@$Cluster_FQDN -L 8443:$IP_fw1_intern:443 -N -g

Erklärung: 8443 ist der Port auf localhost, Ziel ist $IP_fw1_intern (fw1 mit https).

Die Weboberfläche von fw1 ist nun lokal unter: https://127.0.0.1:8443 erreichbar.

Problembehebung

Paketliste kann nicht geladen werden

oft sind es NAT-Probleme (die zweite Node kann die Paketliste nicht laden) oder nur eine public-IP.

Troubleshooting Upgrades

disable the Router Advertisements Server service

Änderungen eines Interfaces gehen nicht, folgende Fehlermeldung:

**The following input errors were detected:**The Router Advertisements Server is active on this interface and it can be used only with a static IPv6 configuration. Please disable the Router Advertisements Server service on this interface first, then change the interface configuration.

Lösung (Fehler scheint bei Version 2.5):

NAT geht kaputt

Die „Hybrid outbound NAT rule generation“ ist großer Mist (das gilt sogar für opnsense), die automatisch generierten Regeln gehen aus unerfindlichen Grünen kaputt und sind nicht mehr wirksam. Abhilfe: man muss die gleichen Regeln manuell anlegen („Manual outbound NAT rule generation“).