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

Webknight: Calling LoadLibraryEx on ISAPI filter “Webknight.dll” failed

Nach dem Installieren der 64-Bit Version von der “Application Firewall” Webknight, erhält man beim Aufruf von Webseiten die Fehlermeldung “Calling LoadLibraryEx on ISAPI filter “C:\Program Files\AQTRONIX Webknight\Webknight.dll” failed” angezeigt. Eine mögliche Ursache ist, dass die falsche Version von Webknight installiert wurde.

Webknight loading failed

Welche Version von Webknight muss auf einem 64-Bit Windows installiert werden?

Grundsätzliche sollte die 64-Bit Version installiert werden. Beim Betrieb von älteren Webapplikationen, welche noch 32-Bit COM-Komponenten verwenden, muss der IIS 7.x im 32-Bit Modus betrieben werden.

Application Pool Advanced Settings
Application Pool mit aktiviertem 32-Bit Modus

Wird nun die 64-Bit Webknight-Version installiert erhält man die oben beschriebene Fehlermeldung, da der IIS 7.x im 32-Bit Modus ausgeführt wird. Bei dieser Konstellation installiert man die 32-Bit Version von Webknight.

Nützliche Links

Webknight Webseite
Webknight FAQ

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

Routingtabelle: statische Routen definieren unter: Windows, Debian Linux und Esxi-Server

Wenn eine Routingtabelle mit statischen Routeneinträge ergänzt werden soll, was bei einer VPN-Verbindung nötig sein kann, gibt es für die verschiedenen Betriebssysteme einen Befehl “route”. Dieser Befehl ist unter Windows und Linux sehr ähnlich. Der grösste Unterschied ist bei den permanenten Routings.

Einträge in der Rountingtabelle anzeigen:

  • unter Windows
    >route print

    Routingtabelle unter Windows
    Routingtabelle unter Windows
  • unter Linux
    >route

    Routingtabelle unter Linux
    Routingtabelle unter Linux
  • unter Esxi-Server
    >esxcfg-route -l

    Routingtabelle Esxi
    Routingtabelle Esxi

Eintrag in der Routingtabelle erstellen:
Achtung: Wenn das Betriebssystem neugestartet wird gehen die Einträge verloren, da es sich nicht um permanente Einträge handelt.

  • unter Windows
    >route add 192.168.7.0 MASK 255.255.255.0 10.50.147.66
  • unter Linux
    >route add -net 192.168.7.0 netmask 255.255.255.0  gw 10.50.147.66 dev eth0
  • unter Esxi-Server
    >esxcfg-route -a 192.168.7.0 255.255.255.0 10.50.147.66

Eintrag in der Routingtabelle löschen:

  • unter Windows
    >route delete 192.168.7.0 MASK 255.255.255.0 10.50.147.66
  • unter Linux
    >route del -net 192.168.7.0/24  gw 10.50.147.66
  • unter Esxi-Server
    >esxcfg-route -d 192.168.7.0/24 10.50.147.66

Permanenter Eintrag in der Routingtabelle erstellen:
Nach einem Neustart des Betriebssystemes sind diese Einträge wieder in der Routingtabelle vorhanden.

  • unter Windows muss nur der Parameter -p mitgegeben werden, damit dieser Eintrag permanent wird.
    >route add 192.168.7.0 MASK 255.255.255.0 10.50.147.66 -p
  • unter Linux ist es ein wenig aufwändiger, es muss ein Eintrag in der Datei “/etc/network/interfaces” erstellt werden.
    
    iface eth0 inet static
          address 10.50.147.99
          netmask 255.255.255.0
          network 10.50.147.0
          broadcast 10.50.147.255
          gateway 10.50.147.1
          dns-nameservers 10.50.147.1 10.50.147.2
    
    #hinzufügen der statischen permanenten Route
    up route add -net 192.168.7.0 netmask 255.255.255.0  gw 10.50.147.66 dev eth0
    
  • unter Esxi-Server wird ein Eintrag in der Datei “/etc/sysconfig/static-routes” erstellt.
    
    #hinzufügen der statischen permanenten Route
    any net 192.168.7.0 netmask 255.255.255.0  gw 10.50.147.66
    

Zum starten der Esxi-Konsole (unsupported modus: left alt key + F1, type: unsupported)

Vmware Knowledge Base: Adding a static route to an ESX host
Esxcfg-Hilfe
Linux: man route

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

Kostenloses StartSSL Serverzertifikat einrichten beim NGINX Webserver

Achtung:
Mozilla und Google haben der Zertifizierungsstelle das Vertrauen entzogen, somit werden die meisten StartSSL-Zertifikate nicht mehr als vertrauenswürdig anerkannt. Als eine gute und freie Alternative kann Let’s Encrypt eingesetzt werden.

Zum Installieren eines kostenloses StartSSL-Zertifikates auf einem NGINX Webserver, braucht es folgende Schritte:

  1. Ein Zertifikat bei StartSSL erstellen
  2. Den neu erstellten privaten Schlüssel mit “Copy & Paste” in eine Datei, mit den Namen ssl.key, speichern
  3. Die Datei ssl.key mit einem geeigneten Tool, beispielsweise WinSCP für Windows Benutzer, auf den Webserver kopieren
  4. Mit Hilfe von OpenSSL muss der private Schlüssel, auf dem Server, entschlüsselt gespeichert werden: openssl rsa -in ssl.key -out server.key
    (Hinweis zur Passworteingabe bei verwendung von Putty: Möchte man nicht die >= 32 Stellige “PEM pass phrase” von Hand abtippen, kann diese mit “shift+Ins” eingefügt werden.)
  5. Wenn das Webseiten-Zertifikat durch StartSSL erstellt wurde, erhält man eine Benachrichtigung und kann das Zertifikat unter: Control Panel-> Tool Box-> Retrieve Certificate beziehen. Dazu wieder mit “Copy & Paste” in eine Datei namens ssl.cert speichern und zum Webserver kopieren
  6. Nach diesem Schritt muss noch ein Gesamtpaket mit den Hilfszertifikaten von StartSSL und dem Webseiten-Zertifikat erstellt werden, da beim NGINX Webserver diese Zertifikate nicht einzeln in der Konfiguration angegeben werden. Die Hilfszertifikate können bei StartSSL heruntergeladen werden. Um das Gesamtpaket zu erstellen, braucht es für die kostenlosen Zertifikate die Dateien ca.pem und sub.class1.server.ca.pem. Mit dem Befehl:
    cat ssl.cert ca.pem sub.class1.server.ca.pem > server.pem
    werden alle Dateien in die Datei server.pem zusammengefasst.
  7. Nun die Dateien “server.pem” und “server.key” in das gewünschte Verzeichnis kopieren. Hier in diesem Beispiel nach “/etc/nginx/cert/”.
  8. Jetzt muss noch die NGINX Konfiguration angepasst werden:
    server {
        listen   443;
        ssl on;
        ssl_certificate /etc/nginx/cert/server.pem;
        ssl_certificate_key /etc/nginx/cert/server.key;
        server_name  www.example.org;
        root /var/www/example;
        location / {
            index  index.html;
        }
    }
  9. Zum Abschluss wird noch ein Neustart von NGINX durchgeführt.(/etc/init.d/nginx restart) Wenn beim Neustart keine Fehlermeldung in der Konsole erscheint, ist das Zertifikat erfolgreich installiert worden.

Hinweis: Sollte NGINX nicht mehr starten und eine ähnliche Fehlermeldung wie:

[emerg]: SSL_CTX_use_certificate_chain_file("/etc/nginx/cert/server.crt") failed (SSL: error:02001002:system library:fopen:No such file or directory error:20074002:BIO routines:FILE_CTRL:system lib error:140DC002:SSL routines:SSL_CTX_use_certificate_chain_file:system lib)
configuration file /etc/nginx/nginx.conf test failed

in der Konsole angezeigt werden, dann deutet dies auf einen fehlenden Zeilenumbruch in der Datei server.pem hin.

NGINX - Fehler in der server.pem Datei
Fehlender Zeilenumbruch in der .PEM Datei
Einfach den Zeilenumbruch korrigieren und die Datei speichern. Nach der Korrektur sollte NGINX wieder erfolgreich starten.
Zeilenumbruch korrigiert
Zeilenumbruch korrigiert

nslookup: anzeigen einer Liste mit allen IP’s und Aliasse einer Domain

Um eine Liste mit allen IP’s und Aliasse einer Domain zu erhalten, kann mit Hilfe des Tools nslookup ein Zonen-Transfer simuliert werden. Dies setzt voraus, dass der zuständige DNS-Server die Option “Zone-Transfere” eingeschaltet hat.

Aus dem Gesichtspunkt der Sicherheit, sollte diese Option bei einem DNS-Server nicht aktiviert sein. Mehr zu diesem Thema “Why is securing DNS zone transfer necessary?”

Um die Liste zu erstellen, braucht es folgende Schritte:

  1. nslookup im interaktiven Modus starten
  2. den Typ der Abfrage auf Nameserver setzen (ns)
  3. ermitteln des Domain-Servers
  4. Simulieren eines Zonen-Transfers

In den interaktiven Modus wechseln und den zuständige DNS-Server bestimmen:


>nslookup
>set type=ns
>2022.ch
>
Nicht autorisierende Antwort:
2022.ch nameserver = ns15.zoneedit.com
2022.ch nameserver = ns13.zoneedit.com

ns13.zoneedit.com       internet address = 66.223.97.114
ns15.zoneedit.com       internet address = 216.227.210.9

Auf den obigen Zeilen 6 und 7 sind die zuständigen DNS-Server abgebildet. Nun wird einer dieser DNS-Server unter nslookup definiert, als Server für die Anfragen, danach wird die Simulation des Zonen-Transfers gestartet:


>server ns15.zoneedit.com
>ls -d 2022.ch
>
[ns15.zoneedit.com]
 2022.ch.                       SOA    ns13.zoneedit.com soacontact.zoneedit.com
. (2011330253 300 300 300 300)
 2022.ch.                       NS     ns15.zoneedit.com
 2022.ch.                       NS     ns13.zoneedit.com
 2022.ch.                       A      80.238.129.157
 demo                           A      194.88.197.97
 www                            A      80.238.129.157
 2022.ch.                       SOA    ns13.zoneedit.com soacontact.zoneedit.com
. (2011330253 300 300 300 300)

Will man das Resultat direkt in eine Textdatei speichern, kann der Befehl auch folgendermassen eingegeben werden:


>ls -d 2022.ch > DateiZumSpeichern.txt

Der Output kann jetzt in der Datei “DateiZumSpeichern.txt” angeschaut werden.

Mercury/32 Autoresponder und Weiterleitung

Autoresponder (Abwesenheitsbenachrichtigung)

Der Mailserver Mercury/32 bietet die Möglichekeit für jeden Mailaccount einen Autoresponder zu definieren. Dabei wird im Verzeichnis, in dem der Mailaccount gespeichert wird, eine Datei mit dem Namen “AREPLY.pm” erstellt. Der Inhalt dieser Datei ist der Text, welcher jedem Absender zurückgeschickt werden soll. Damit die Absender nicht unzählige Abwesenheitsbenachrichtigungen erhalten, wird durch den Mailserver eine Absender-History geführt, in der jeder Absender abgespeichert wird, der schon eine Abwesenheitsbenachrichtigung erhalten hat. Die Datei wird auch im Verzeichnis des Mailaccounts gespeichert. Der Name der Datei ist “AREPLY.kfl”.

Forwards (Weiterleitungen)

Um eine Weiterleitung zu definieren, muss im Mailaccount-Verzeichnis die Datei “FORWARD” erstellt werden. Dabei werden sämtliche Weiterleitungs Email-Adressen in dieser Datei gespeichert. Auch wird definiert ob eine Kopie der Nachricht in der eigenen Mailbox behalten werden soll.

Beispiel einer FORWARD Datei:

Forward-To : meine@weiterleitung.ch
Forward-To : meine2te@weiterleitung.ch
Deliver-Also : Y

  • Forward-To  Email-Adresse an die eine Nachricht weitergeschickt werden soll
  • Deliver-Also  Definiert ob eine Kopie der Nachricht in der Mailbox gespeichert werden soll. Die gültigen Werte sind Y und N.

Abwesenheitsbenachrichtigung und Weiterleitungen

Besitzt ein Mailaccount eine oder mehrere Weiterleitungen, muss zwingend die Option „Kopie bei forwards“ aktiviert werden. Ist dies nicht der Fall, so erhält die Mailbox keine Nachrichten und somit werden auch keine Abwesenheitsbenachrichtigungen verschickt.

Abwesenheitsbenachrichtigung und Weiterleitungen im webadmin

In meiner erstellten Webapplikation (webadmin) zum Verwalten des Mercury/32 Mailserver, können Autoresponder und Weiterleitungen, sehr einfach, von jedem Mailaccount selbst erstellt werden.

webadmin Autoresponder
Autoresponder im Webadmin erstellen und aktivieren
webadmin Benutzeroptionen
In den Benutzeroptionen "kopie bei forwards" aktiveren

ARP-Übersetzungstabelle anzeigen und verändern

Mit Hilfe des Tools “arp” kann unter Windows und Linux die Übersetzungstabelle für IP-Adressen zur MAC-Adresse (physikalische Adresse) angezeigt und verändert werden. Diese Übersetzungstabelle wird von ARP (Address Resolution Protocol) verwendet. Das Tool wird im Normalfall nur für Test- und Debugzwecke verwendet.


>arp -a

Zeigt die aktuellen ARP-Einträge in der Übersetzungstabelle an.

ARP-Einträge

Um einen Eintrag aus der Tabelle zu löschen:


>arp -d 192.168.0.22

Um einen eigenen statischen Eintrag hinzuzufügen:


>arp -s 192.168.0.22 00-aa-00-62-c6-09

DNS-Abfragen mit nslookup

Braucht man Informationen zu einer Domain kann unter Windows und Linux nslookup verwendet werden. Das Tool nslookup bietet die Möglichkeit einen interaktiven Modus oder den nicht interaktiven Modus zu verwenden. Diese Modi unterscheiden sich beim Eingeben der Werte. Im interaktiven Modus wird in einer eigenen Konsole gearbeitet und jeder Befehl einzeln angegeben. Beim nicht interaktiven Modus hingegen, wird alles in einem Befehl definiert.

Was hat www.monsterli.ch für eine IP-Adresse?

Im interaktiven Modus:


>nslookup
>www.monsterli.ch
Server:                192.168.0.1
Address:               192.168.0.1#53

Name:      www.monsterli.ch
Address:   80.238.129.157

Durch die Eingabe von nslookup, in der Konsole, wird in den interaktiven Modus gewechselt. Nach dem wechseln des Modus, kann durch die Eingabe des Hostnamens die Abfrage gestartet werden.

Im nicht interaktiven Modus:


>nslookup www.monsterli.ch
Server:                192.168.0.1
Address:               192.168.0.1#53

Name:      www.monsterli.ch
Address:   80.238.129.157

Was ist der Mailserver der Domain monsterli.ch ?

Im interaktiven Modus:


>nslookup
>set type=mx
>monsterli.ch
Server:                192.168.0.1
Address:               192.168.0.1#53

Nicht autorisierende Antwort:
monsterli.ch    MX preference = 0, mail exchanger = mail.monsterli.ch
monsterli.ch    MX preference = 5, mail exchanger = monsterli.ch
monsterli.ch    MX preference = 10, mail exchanger = mail2.monsterli.ch

Im nicht interaktiven Modus:


>nslookup -type=mx monsterli.ch
Server:                192.168.0.1
Address:               192.168.0.1#53

Nicht autorisierende Antwort:
monsterli.ch    MX preference = 0, mail exchanger = mail.monsterli.ch
monsterli.ch    MX preference = 5, mail exchanger = monsterli.ch
monsterli.ch    MX preference = 10, mail exchanger = mail2.monsterli.ch

Einen alternativen DNS-Server für die Abfragen verwenden

Soll bei der DNS-Abfrage nicht der standart DNS-Server verwendet werden, kann dieser angegeben werden. Hier im Beispiel wird ein öffentlicher DNS-Server von Google verwendet.

Im interaktiven Modus:


>nslookup
>server 8.8.4.4
Standardserver: google-public-dns-b.google.com
Address:  8.8.4.4

>www.monsterli.ch
Server:                8.8.4.4
Address:               8.8.4.4#53

Name:      www.monsterli.ch
Address:   80.238.129.157

Im nicht interaktiven Modus:


>nslookup www.monsterli.ch 8.8.4.4
Server:                8.8.4.4
Address:               8.8.4.4#53

Name:      www.monsterli.ch
Address:   80.238.129.157