Wenn man mit einer PFSense-Firewall mehrere öffentliche IP-Adressen benutzen möchte und dahinterliegende Server mit einer Firewall schützen möchte, bietet sich die Funktion eines 1:1 NAT an. Wie diese Funktion eingestellt wird, zeige ich euch hier in diesem Post.
Grundsätzlicher Aufbau
Der Aufbau bei mir ist ein Server in einem Rechenzentrum, auf dem Hyper-V zur Virtualisierung genutzt wird. Das System selbst ist über eine eigene IP-Adresse erreichbar, die in diesem Aufbau aber vollkommen unwichtig ist.
Zusätzlich ist für diesen Server noch ein Subnetz an IP-Adressen verfügbar, die für die virtuellen Systeme genutzt werden können. Die erste dieser Adressen ist auf der WAN-Seite der PFSense-VM eingetragen (nennen wir sie beispielhaft 40.30.20.10). Zusätzlich sind noch die Adressen 40.30.20.11 bis 40.30.20.19 verfügbar.
Auf der LAN-Seite der PFSense existiert ein normales internes IP-Netz (z.B. 192.168.100.0/24).
Die Konfiguration der PFSense
Wir beginnen nun damit, dass wir eine weitere IP-Adresse in dem PFSense-Router eintragen.
Weitere IP-Adressen hinzufügen
- Firewall => Virtual IPs
- Unten rechts auf Add
- Hier machen wir nun die folgenden Einstellungen:
Ob es sich wirklich um das WAN-Interface handelt ist immer die Frage, in einer „normalen“ Installation wird dies allerdings korrekt sein.
Nun speichern wir die getätigten Einstellungen und setzen sie mit Apply Changes fest.
NAT erstellen
Damit die Adresse bei einer Anfrage von außen auch auf den korrekten Server im LAN weitergereicht wird, wird ein 1:1 NAT benötigt. Statt eines Port-NATs sind wir so in der Lage, eine komplette Adresse 1:1 durchzureichen. Für diese Einrichtung benötigen wir die gerade eingetragene zusätzliche WAN-IP und die interne Adresse des Servers. In meinem Fall ist dies eine Debian-VM, auf der ein Apache Webserver installiert ist. Zum aktuellen Zeitpunkt ist der Apache-Webserver intern erreichbar, über die externe IP-Adresse erhalte ich einen Timeout.
Wir stellen nun das NAT ein unter
- Firewall => NAT => 1:1
- Hier tragen wir nun die folgenden Daten ein:
Nachdem ich nun die Änderungen gespeichert und übernommen habe, ist der Transfer der Daten von außen nach innen konfiguriert. Ich komme zu diesem Zeitpunkt aber immer noch nicht auf meinen Webserver, da die Firewall aktuell noch keinen Transfer durchlässt. Diesen Zugriff werden wir nun konfigurieren.
Firewall anpassen
Damit wir nun per NAT auf den Webserver zugreifen können, müssen wir noch die Firewall anpassen. Dies geschieht unter
- Firewall => Rules => WAN
Hier erstellen wir eine neue Regel mit den folgenden Einstellungen:
Ich begrenze das NAT hier in meinem Fall auf den Port 80 TCP. Nachdem ich die Regeln gespeichert und übernommen habe, komme ich nun von außen über die WAN-IP auf das System drauf und sehe die Apache-Standardseite.
Kleiner Gegencheck: Stelle ich die Firewall-Regel von HTTP auf HTTPS um, komme ich nach dem Speichern der Regel nicht mehr per HTTP auf meinen Webserver, die Anfrage läuft ins Leere. Dies zeigt erneut, dass die Firewall so arbeitet, wie sie arbeiten soll.
Nun können entweder mehrere Regeln erstellt werden für den unterschiedlichsten Bedarf, alternativ können die Regeln auch offener gestaltet werden und es können Bereiche oder auch ganze Protokolle erlaubt werden. Ich empfehle allerdings, dass die Regeln möglichst eng geschnürt werden, damit ein Missbrauch eingeschränkt werden kann.
Ein Aufruf aus dem LAN heraus
Das erste, was ich mich nun gefragt habe, ist: Unter welche IP-Adresse geht das System nun online, wenn ich von innen heraus einen Aufruf von z.B. einer Webseite mache oder meine IP direkt abfrage?
Um dies zu testen, habe ich aus der Debian-VM heraus ein dig ausgeführt, was mir meine aktuelle WAN-IP auflistet.
dig @resolver1.opendns.com ANY myip.opendns.com +short
Als Ausgabe zeigte mir die Shell die zusätzliche WAN-IP-Adresse, die ich explizit für die VM eingetragen habe. Sehr schön 🙂
Hallo Jan,
vielen Dank für deinen Beitrag den ich gerade auf der Suche nach einer Lösung für mein Problem gefunden habe. Leider wird mir aus deiner Anleitung heraus nicht ganz klar wie ich nun Teile eines öffentlichen Netzes an unterschiedliche Server weiterleuiten kann.
Nehmen wir mal an mein IP-Netz lautet 40.30.20.96/27
Somit habe ich die Adressen wie folgt zur Verfügung: 40.30.20.97 – 40.30.20.126 wobei die 40.30.20.97 für die WAN-Schnittstelle der Firewall verwendet werden soll.
Nach meinem Verständnis trage ich dann die 40.30.20.97 als Alias-IP ein und habe diese somit auf der Firewall zur Verfügung. Kann ich nun die restlichen IP-Adressen direkt ins DMZ routen und dort an die Server verteilen? Oder benötige ich zwingend an den Servern eine interne IP und muss per NAT routen?
Vielen Dank für eventuelle Unterstützung bereits im Vorraus.
Hallo Klaus,
du könntest du Adressen direkt an die Server anbinden und sie dort nutzen. In diesem Fall wäre aber der Schutz der Firewall davor nicht gegeben und du musst dich entweder über eine Firewall beim Hoster absichern oder über die Server direkt, die die Adresse bekommen sollen. Ob du die IP (z.B. 40.30.20.104) in der Firewall als Alias einträgst oder sie direkt einer VM gibst, das ist dir überlassen. Ich bevorzuge die Absicherung über eine Firewall, dort kann ich dann ganz genau definieren, welche Ports offen sind und welche nicht.
Wenn das deine Frage nicht beantworten sollte meld dich gern nochmal mit einem Kommentar hier.
Schönen Gruß und schönen Abend
Jan