Aktionen

Pfsense - GeoIP Blocking auf bestimmte Ports oder Dienste IPv4 IPv6

Aus znilwiki

Changelog:

  • 18.05.2016 Erste Version




1 Warum?

Auf meinem Miet-Server betreibe ich unter anderem einen Linux-Server der über SSH Port 22 und einen "Terminalserver" der über RDP Port 3389 erreichbar ist.
Nun sehe ich jeden Tag wie hunderte von Zugriffsversuchen auf diese beiden Ports stattfinden. Auf dem Linux-Server setze ich fail2ban ein, auf dem Terminalserver EvlWatcher.
Und die Liste der geblockten IP-Adressen wird länger und länger - bei den RDP-versuchen hatte ich mich an einer Liste versucht BannedIP ... aber das nahm einfach kein Ende ...

Heute nun brachte mich nun jemand auf die Idee des "GeoIP-Blocking" ... Also einfach den Zugriff nur aus bestimmten Ländern erlauben.
Das würde doch schon mal 99% der Angriffe ins leere laufen lassen .... und die pfSense kann das auch!



2 pfBlockerNG installieren

Eine Firewallregel um bestimmte IP-Adressen zu blocken ist nicht schwer ... aber wie kommen wir an die Daten dazu?
Das mach pfBlockerNG für uns!

Wir können diese Erweiterung über den Packetmanager nachinstallieren:
GeoIP-Blocking-pfSense-001.png

GeoIP-Blocking-pfSense-002.png

Das kann eine Weile dauern, insbesondere wenn er die IP-Datenbanken von MaxMind herunterlädt und konvertiert.

Danach haben wir unter Firewall den neuen Menüpunkt pfBlockerNG:
GeoIP-Blocking-pfSense-003.png



3 pfBlockerNG konfigurieren

Wir haben nun 2 Möglichkeiten:

  • Wir definieren die Länder aus denen der Zugriff verboten ist
  • Wir definieren die Länder aus denen der Zugriff erlaubt ist


Tja, auf den 2. Weg bin ich erst später gekommen - aber ist einfacher nur "Deutschland ist erlaubt" zu defnieren als hunderten von Ländern als "gesperrt".
Deshalb machen wir es auch jetzt so rum!

Wir rufen Firewall => pfBlockerNG auf und landen in den General Settings:
GeoIP-Blocking-pfSense-004.png
und als ersten aktivieren wir diesen erst einmal:

GeoIP-Blocking-pfSense-005.png

Um das zu speichern müssen wir ganz nach unten Scrollen und auf GeoIP-Blocking-pfSense-006.png klicken.
Die anderen Einstellungen sollten so passen - wir lassen keine Regeln durch das Modul erstellen, er soll uns nur die IP-Adressen beschaffen.

Nun wechseln wir oben zum Abschnitt Country:
GeoIP-Blocking-pfSense-007.png

Und wir landen in der Ansicht der TOP 20 - Spammer Countries
GeoIP-Blocking-pfSense-008.png

Nun könnten wir hier schon Deutschland wählen ... aber ich musste mehr als ein Land nehmen - deshalb gehen wir oben in der Auswahl auf Europe:
Mit gedrückter Strg bzw. CTRL Taste können wir nun in der Liste die Länder wählen aus denen der Zugriff erlaubt sein soll, auf der linken Seite für IPv4, auf der rechten Seiten für IPv6:
GeoIP-Blocking-pfSense-009.png
Wählt also die Länder aus aus denen Ihr den Zugriff erlauben wollt, bei List Action wählen wir Alias Permit
Ich habe auch noch das Logging deaktiviert.
Dann wieder auf den Save-Button klicken!


Mit dieser Einstellung erzeugt er uns eine IP-Adressliste für Europa mit den gewählten Ländern.
Diese Liste legt er uns in einen Alias den wir dann in Firewall und NAT-Regeln benutzen können.

Die Liste wird nun einmal die Stunde aktualisiert ... solange wollen wir nicht warten, deswegen stoßen wir das von Hand an!
Dazu gehen wir auf Update:
GeoIP-Blocking-pfSense-010.png
und klicken unten auf Run - sofern er nicht sowieso gleich starten würden.
Unten im Log-Feld sehen wir dann das er - unter anderem - die Listen erzeugt:

===[  Continent Process  ]============================================

[ pfB_Europe_v4 ]	 Changes found... Updating

[ pfB_Europe_v6 ]	 Changes found... Updating

Nun hat er uns 2 Aliase erzeugt:

pfB_Europe_v4
pfB_Europe_v6

die wir in unseren NAT und Firewallregeln verwenden können:
GeoIP-Blocking-pfSense-011.png

GeoIP-Blocking-pfSense-012.png
Wichtig: Die Aliase findet Ihr auf dem Reiter URLs!



4 NAT-Regeln anpassen (IPv4)

Im IPv4 Bereich habe ich nur eine externe IP-Adresse und deshalb den SSH und RDP Zugriff durch ein Port-Forwarding auf die internen Server frei geschaltet.
Diese Regeln ändere ich nun wie folgt ab:

Vorher:
GeoIP-Blocking-pfSense-013.png
Wie man sieht steht bei Source Address ein * - der Zugriff ist also von überall erlaubt.
Nun bearbeiten wir den Eintrag:
GeoIP-Blocking-pfSense-014.png

Das er dann wie folgt aussieht:
Nachher:
GeoIP-Blocking-pfSense-015.png
Wichtig ist das Ihr den IPv4 Alias nehmt!

Nachdem die Regeln übernommen wurden ist der SSH-Zugriff nur noch aus den gewählten Ländern möglich!



5 Rules anpsssen (IPv6)

Die Rules für die NAT-regeln passt er automatisch mit an.
Bei IPv6 gibt es kein NAT sondern nur eine Regel welche den Zugriff auf SSH erlaubt:

Vorher:
GeoIP-Blocking-pfSense-016.png
Wie man sieht steht bei Source Address ein * - der Zugriff ist also von überall erlaubt.
Nun bearbeiten wir den Eintrag:
GeoIP-Blocking-pfSense-017.png

Das er dann wie folgt aussieht:
Nachher:
GeoIP-Blocking-pfSense-018.png
Wichtig ist das Ihr den IPv6 Alias nehmt!



6 Kommentare


Kerrbenok

15 Monaten zuvor
Punktzahl 0++

Wunderbar - genau wonach ich gesucht hatte, sehr schön beschrieben!

Zumindest beim ersten Googeln habe ich keinerlei pfBlockerNG Doku im Netz gefunden!?

rv112@gmx.de

6 Monaten zuvor
Punktzahl 0++

Funktioniert so leider bei mir nicht! Ich habe damit meinen IPsec Zugriff regeln wollen, doch der Traffic wird durchgewunken obwohl die IP in der erstellen Liste nicht aufgeführt ist.

Was mache ich falsch?

BLinz

6 Monaten zuvor
Punktzahl 0++

Vermutlich greift eine andere Regel - Also gerade bei IPSec finde ich bei mir keine passende Regel. Es könnte sein das es bei diesen Protokoll (Port 500 und Port 4500, beides UDP) nicht greift.

Ggf. musst du direkt unter Firewll => Rules etwas anlegen

Jochen Vogel

einem Monat zuvor
Punktzahl 0++

Hallo,

hast Du das gleiche für rdp/rds regel angewendet? (Source Address)

BLinz

einem Monat zuvor
Punktzahl 0++
Jupp, für alles mögliche, auch RDP (im Artikel erwähnt). Funktioniert mit allen Port-Weiterleitungen

Jochen Vogel

einem Monat zuvor
Punktzahl 0++
Grazie...
Kommentar hinzufügen
znilwiki freut sich über alle Kommentare. Sofern du nicht anonym bleiben möchtest, trage deinen Namen oder deine Email-Adresse ein oder melde dich an. Du kannst das Feld auch einfach leer lassen.