pfSense: Konfigurieren eines transparenten Squid Web Proxy mit Multi-WAN Links

Wichtiger Hinweis zur pfSense Version 2.1:

04.02.2014: Es scheint das Load Balancing mit aktiviertem Squid bei vielen gar nicht mehr funktioniert. Die Failover-Konfiguration funktioniert jedoch ohne Probleme mit dem Squid Proxy. Siehe pfSense Forum

Um einen Standort mit redundanter Internetanbindung auszurüsten, eignet sich die Firewall-Distribution pfSense 2.x perfekt. Die Distribution unterstützt standardmässig Load Balancing und Failover mit mehreren WAN-Anschlüssen. Mehr dazu findet man im pfSense Wiki unter Multi-WAN.

Wird der Web Proxy Squid nicht auf dem gleichen Host betrieben, sondern hinter der Firewall, bietet auch diese Konfiguration keine grossen Probleme. Den das LoadBalancing und Failover funktioniert gut.

In diesem Beitrag werde ich auf die Konfiguration eingehen, bei der Squid auf dem selben Host läuft. Im Web findet man sehr viele Beiträge zu diesem Thema. Es scheint für diese Lösung keine Standardkonfiguration zu geben. Je nachdem ob man zusätzliche Pakete installiert hat, kann die Konfiguration abweichen. Was bei einer Installation läuft, muss nicht zwangsläufig bei einer anderen funktionieren. Ich werde hier einfach meine Erfahrungen und Ergänzungen vorstellen, die ich beim Sichten der verschiedenen Anleitungen gemacht habe, bis ich eine funktionierende Konfiguration hatte. Dieser Beitrag soll kein vollständiges “Howto” sein, sondern nur die wichtigen Punkte hervorheben, die mir geholfen haben.

Schritt 1: Multi-WAN

Als erster Schritt muss die Multi-WAN Konfiguration, wie in der Anleitung beschrieben, erstellt und ohne Proxy getestet werden. Dabei sollten zusätzlich folgende wichtige Punkte beachtet werden:

Gateways Einstellungen

Anmerkung zur pfSense Version 2.0.3:

Unter “System->Routing->Gateways” sollte kein Gateway als “Default-Gateway” markiert sein. Es scheint als verwendet pfSense standardmässig den Gateway des WAN-Interfaces als “Default-Gateway”. (Beim Versuch das WAN2-Interface als “Default-Gateway” zu definieren funktionierte die Abfrage über Squid nicht mehr.)

Gateways Einstellungen
Gateways Einstellungen

Anmerkung zur pfSense Version 2.1:

Mit der Version 2.1 scheint das Definieren eines “Default-Gateway” auch bei mir wieder zu Funktionieren. Daher sollte unter “System->Routing->Gateways” ein Gateway als “Default-Gateway” markiert werden.

Unter “Diagnostics->Routes” kann die Routingtabelle eingesehen werden und dort findet man auch den Eintrag des “Default-Gateway”.

Routingtabelle
Routingtabelle

Ein weiterer wichtiger Punkt ist die Einstellung “Allow default gateway switching” welche aktiviert werden sollte. So wird beim Ausfall des WAN-Interfaces automatisch ein anderes Interface als “Default-Gateway” eingesetzt. Dies kann unter “System->Advanced->Miscellaneous” geändert werden.

Load Balancing Einstellungen
Load Balancing Einstellungen

DNS-Server Einstellungen

Bei den DNS-Server Einstellungen sollten pro Gateway mindestens ein DNS-Server eingetragen werden. Was auch nicht schaden kann, ist ein öffentlicher DNS-Server der über alle Interfaces erreichbar ist. Hier in diesem Beispiel wurde zusätzlich ein DNS-Server von Google angegeben. Eintragen kann man diese unter “System->General Setup”.

DNS-Server Einstellungen
DNS-Server Einstellungen

Firewall Rules

Zusätzlich zu den Firewall-Regeln die den Datenverkehr über den gewünschten Gateway oder die Gatewaygruppe leiten, muss noch eine eigene Regel für den DNS-Traffic des Squid Proxy erstellt werden.

DNS-Floating Rule
DNS-Floating Rule

Details der Floating-Rule:

  • Interfaces: Wan & Wan2
  • Direction: out
  • Protocol: TCP/UDP
  • Source: any
  • Destination: any
  • Destination Port: 53 (DNS)
  • Gateway: Wan1BalanceWan2 (Definierte Gatewaygruppe)

Schritt 2: Squid Konfiguration

Wurde die Multi-WAN Konfiguration erfolgreich getestet (Unterbruch simulieren der verschiedenen WAN’s, surfen funktioniert noch), kann mit der Konfiguration des Proxy-Server’s angefangen werden.

Dazu werden unter “Services->Proxy Server” die Interfaces ausgewählt bei denen die HTTP-Abfrage über den Proxy Server laufen sollen. Anmerkung: In manchen Anleitungen steht, man soll das “Loopback” Interface auch auswählen. Dies wird jedoch in dieser Konfiguration nicht verwendet, sondern führt nur zu Fehler bei den Proxy abfragen.

Squid Einstellungen Interfaces
Squid Einstellungen Interfaces

Als letzte Einstellung muss unter “Custom Options” die Zeile “tcp_outgoing_address 127.0.0.1;” eingetragen werden. Mit diesem Befehl schickt Squid sämtliche TCP-Anfragen wieder zurück an pfSense, wo dann die Pakete an den richtigen Gateway verschickt werden.

Squid Einstellung Custom Options
Squid Einstellung Custom Options

Zum Schluss

Nach diesen Einstellungen sollten nun alle HTTP-Anfragen die über den Squid Web Proxy gehen, auch vom Load Balancing und Failover Mechanismus von pfSense profitieren. Diese Konfiguration habe ich nun seit einiger Zeit im Einsatz und es scheint gut zu funktionieren.

Bei Webapplikationen welche die Anmeldeinformationen an eine IP knüpfen, kann das Load Balancing zu Probleme führen. Nach dem Anmelden wird man kurze Zeit später wieder abgemeldet. Das ist immer dann der Fall, wenn die Verbindung neu über einen anderen Gateway geht. Um diese Problematik zu minimieren, kann man eigene Floating-Rules definieren oder man verwendet die Option “Use sticky connections”. Diese Option sorgt dafür, dass eine bestehende Verbindung immer über denselben Gateway geleitet wird. Aktivieren kann man sie unter “System->Advanced->Miscellaneous”. (Siehe Screenshot “Load Balancing Einstellungen”)

Nützliche Links

pfSense: Erweitern mit Zusatzpaketen (Erweiterungen)
pfSense doc: Multi-WAN
Google Public DNS
pfSense 2.0.2 Multiwan will filter ssl (squid+squidGuard+Lightsquid)
PDF: Set-up transparent Squid Web Proxy with failover on multi-WAN links
default gateway switching concern
New HOWTO: pfSense Squid Web Proxy with multi-WAN links
pfSense Multi-WAN – How to really make it work
Öffentliche Nameserver in der Schweiz

pfSense: NTP-Server aktivieren / konfigurieren

Um bei allen Rechnern in einem Netzwerk die Zeit synchron zu halten, benötigt man einen Zeitserver. Bei der Firewall-Distribution pfSense ist standardmässig OpenNTPD installiert. OpenNTPD ist eine einfache Implementierung des “Network Time Protocol”, welche den einfachen Betrieb eines NTP-Client und NTP-Server ermöglicht.
In diesem Beitrag wird der OpenNTPD von pfSense als Netzwerkzeitserver verwendet. Die Firewall bezieht die Zeit bei einem offiziellen Zeitserver und beantwortet NTP-Anfragen von den verschiedenen lokalen Netzwerken. Diese Konfiguration vereinfacht die Verwaltung und minimiert die NTP-Abfragen gegen Aussen.

Netzwerk konfiguration
Netzwerk konfiguration

1. Konfigurieren des pfSense NTP-Client

Damit auf der Firewall die aktuelle Zeit eines offiziellen Zeitservers verwendet wird, muss dieser im Menü “System -> General Setup” konfiguriert werden. Hier in diesem Beispiel wird der offizielle Zeitserver für die Schweiz “ntp.metas.ch” verwendet.
Wichtig: Die richtige Zeitzone muss eingestellt sein!

Eintragen der NTP-Server
Eintragen der NTP-Server

2. Konfigurieren des pfSense NTP-Server

Damit NTP-Anfragen auch beantwortet werden, muss der OpenNTP-Deamon unter “Services -> OpenNTPD” aktiviert werden. Als Nächstes wird noch angegeben an welchen Interfaces (Netzwerke) eine NTP-Abfrage erlaubt wird.

OpenNTP Einstellungen
OpenNTP Einstellungen

Im oberen Beispiel sind NTP-Anfragen aus den Netzwerken LAN, DMZ und Gray1 erlaubt. NTP-Anfragen aus dem WAN-Interface werden ignoriert.

3. Konfigurieren der Server und Clients

Zum Schluss müssen die verschiedenen Server und Clients so konfiguriert werden, damit die Firewall als Zeitserver verwendet wird.

Nützliche Links:

pfSense
OpenNTPD
ntp.metas.ch
Informationen zum NTP – ntp.org

pfSense: Erweitern mit Zusatzpaketen (Erweiterungen)

Installieren

pfSense Package Manager
pfSense Package Manager
Die Firewall Distribution pfSense lässt sich sehr einfach mit Zusatzpaketen erweitern. Im “Package Manager” findet man im Register “Available Packages” die Erweiterungen, welche sich mit einem Mausklick installieren lassen. Den “Package Manager” findet man über das Menü “System > Packages”.

Wichtig: Beachten sollte man die Spalte “Status”. Dort wird angegeben für welche Plattform (pfSense Version) das Paket erstellt wurde. Oft funktionieren die älteren Pakete auch auf neueren Versionen, jedoch muss dies nicht so sein.

Deinstallieren

Die installierten Erweiterungen lassen sich auch sehr einfach wieder deinstallieren. Um eine Erweiterung zu deinstallieren, wechselt man in das Register “Installed Packeges”. Sucht die betreffende Zeile und kann mit einem Mausklick auf den oberen Button (“Remove this Package”) das Zusatzpaket entfernen.

pfSense Package Manager - Installed Packages
pfSense Package Manager – Installed Packages

Updaten der Zusatzpakete

Gelegentlich sollte man im “Package Manager” prüfen, ob eine neue Version für ein installiertes Paket vorhanden ist. Ist eine neuere Version vorhanden, wird die Spalte “Package Version” in rot hervorgehoben.

Neue Version eines Paketes vorhanden
Neue Version eines Paketes vorhanden
Die neue Version kann nun mit einem Mausklick auf den Button “pkg” automatisch installiert werden.

Nützliche Links

pfSense Webseite
pfSense – Manually uninstall packages

pfSense: Zugriff auf das ADSL-Modem (im Bridge Mode) über die pfSense Firewall

Einleitung
Der Zugriff auf das Webinterface des ADSL-Modems kann bei der Fehlersuche sehr hilfreich sein. Wird die PPPoE Verbindung durch das Modem erstellt und die Firewall erhält an ihrem WAN-Interface eine IP aus dem gleichen IP-Bereich wie das Modem, so kann die Weboberfläche ganz einfach mit der zugeteilten IP-Adresse erreicht werden.

ADSL-Modem - pfSense
Das ADSL-Modem und die pfSense Firewall sind im gleichen IP-Bereich
Diese Konfiguration hat den Nachteil des doppel NAT. Das heisst: das Modem und die Firewall müssen sich die IP-Verknüpfung der ein- und ausgehenden Verbindungen merken. Um diesen zusätzlichen Aufwand zu verringern, kann das Modem im Bridge Mode betrieben werden und die PPPoE-Einwahl wird an die pfSense Firewall deligiert.

Das ADSL-Modem im Bridge Mode und die PPPoE-Einwahl wird durch die pfSense Firewall erledigt.
Wird nun versucht die Weboberfläche des Modems zu erreichen, wird eine Fehlermeldung erscheinen, dass diese Seite nicht erreichbar ist.

pfSense und Modem konfigurieren

Diese Anleitung gilt nur für die pfSense Firewall ab Version 2.x

  1. Dem Modem eine fixe IP zuweisen
  2. Neues Interface auf der Firewall erstellen
  3. Outbound NAT Regel erstellen

Konfigurieren des Modems

Wichtig: Bei der Wahl des IP-Bereiches für das Modem, darf dieser Bereich in keinem Interface auf der Firewall bereits verwendet werden. Hier im Beispiel wurde der Bereich 192.168.100.0/30 gewählt. Somit sind gerade 2 Hosts in diesem IP-Bereich möglich.

  • IP Modem : 192.168.100.1, Subnetmaske: 255.255.255.252
  • IP pfSense: 192.168.100.2, Subnetmaske: 255.255.255.252

Wie das Modem konfiguriert wird, kann man in der Anleitung zum jeweiligen Modell nachlesen.

IP-Einstellungen im Modem
IP-Einstellungen bei einem D-LINK DSL-320B Modem

Erstellen eines zusätzlichen Interfaces

Dazu wird unter “Interfaces-> (assign)” ein neues Interface hinzugefügt. Dieses Interface erhält als IP: 192.168.100.2 und als Subnetmask 255.255.255.252. Als Netzwerkkarte wird diejenige zugewissen an der das ADSL-Modem angeschlossen wurde. In diesem Fall verwendet das WAN-Interface (PPPoE1) die Netzwerkkarte re0.

pfSense Interfaces
Interface-Auflistung mit dem neu erstellten ADSLModem Interface

Outbound NAT

Zum Schluss muss nur noch das “Outbound NAT” konfiguriert werden. Dieses findet man unter “Firewall-> NAT-> Outbound”.

Folgende Werte müssen eingegeben werden:

  • Interface: Das oben neu erstellte Interface
  • Protocol: any (zum Einschränken gewünschtes Protokoll wählen)
  • Source: any (zum Einschränken gewünschtes Subnet wählen)
  • Destination: 192.168.100.0/30
  • Translation: Interface address
pfsense outbound nat
Die neu erstellte "Outbound NAT" Regel

Nach diesem Schritt ist das ADSL-Modem / die Weboberfläche, über die pfSense Firewall, erreichbar.

Nützliche Links

pfSense 1.2.x – Accessing modem from inside firewall
Ein nützliches Web-Tool um IP-Bereiche zu berechnen

pfSense – Squid proxy cache in der Konsole löschen

Sollte es einmal nötig werden, den “Squid Proxy Cache” von Hand zu löschen, kann dies in der Konsole erledigt werden.

Dazu muss die Ausführung von Squid zuerst gestoppt werden:
[cc lang=”bash”]/usr/local/etc/rc.d/squid.sh stop[/cc]

Dann wird das Verzeichnis “/var/squid/cache”, mit sämtlichen Unterverzeichnisse und Dateien, gelöscht:
[cc lang=”bash”]rm -rf /var/squid/cache/[/cc]

Verzeichnis “/var/squid/cache” wieder erstellen. Den Eigentümer und die Gruppe festlegen, sowie die Berechtigung für das Verzeichnis setzen:
[cc lang=”bash”]
mkdir -p /var/squid/cache/
chown squid:squid /var/squid/cache/
chmod 770 /var/squid/cache/
[/cc]

Da die gesamte Cache-Verzeichnisstruktur gelöscht wurde, muss diese nun wieder neu erstellt werden:
[cc lang=”bash”]squid -z[/cc]

Und zum Schluss kann Squid wieder gestartet werden:
[cc lang=”bash”]/usr/local/etc/rc.d/squid.sh start[/cc]

Nach dem Start sollte der Zugriff über den Proxy wieder funktionieren.

Zur Erinnerung: Die maximale Grösse, welche Squid für den Proxy-Cache verwenden soll, kann mit dem Webgui festgelegt werden:

pfSense - Squid Proxy Cache Size