Wie blockiere ich missbräuchliche IP-Adressen mit pf in OpenBSD?

14

Aus den Nginx-Protokollen können wir ersehen, dass es eine IP-Adresse gibt, die böse Dinge tut.

Wie können wir es mit einem pfBefehl und später dauerhaft mit dem blockieren /etc/pf.log? Wie können wir eine x.x.x.x/24für diese IP sperren ? Es ist Beispiel: 1.2.3.4

UPDATE: nein, es sieht so aus, als ob OpenBSD keine Datei in / etc erlaubt / verweigert. Und AFAIKs beste Ratschläge zum Sperren missbräuchlicher IP-Adressen sind die Verwendung von pf.

# cd /etc 
# ls -la|egrep -i 'deny|allow'
# uname -a
OpenBSD foo.com 5.4 GENERIC.MP#0 amd64
# 
somelooser28533
quelle
Haben Sie eine hosts.deny-Datei im Verzeichnis / etc?
Ryekayo

Antworten:

13

Der beste Weg , dies zu tun ist , um eine Tabelle zu definieren und eine Regel zu erstellen , die Hosts zu blockieren, in pf.conf:

table <badhosts> persist
block on fxp0 from <badhosts> to any

Und dann dynamisch IP-Adressen hinzufügen / löschen:

$ pfctl -t badhosts -T add 1.2.3.4
$ pfctl -t badhosts -T delete 1.2.3.4

Andere 'table'-Befehle umfassen flush(alle entfernen) replaceund show. Sehen Sie man pfctlfür mehr.

Wenn Sie eine dauerhaftere Liste wünschen, können Sie diese in einer (oder mehreren) Dateien aufbewahren. In pf.conf:

table <badhosts> persist file "/etc/badguys1" file "/etc/badguys2"
block on fxp0 from <badhosts> to any

Sie können auch Hostnamen anstelle von IP-Adressen hinzufügen. Siehe den Abschnitt "Tabellen" von man pf.confund man pfctl.

Hinweis : In den obigen Beispielen wird davon ausgegangen, dass die mit dem Internet verbundene Benutzeroberfläche fxp0entsprechend Ihren Einstellungen geändert wird. Beachten Sie auch, dass die Regeln in der pf.confReihenfolge ausgewertet werden und für blockoder passRegeln die letzte zutreffende Übereinstimmungsregel ist. Mit diesem Regelsatz

table <badhosts> persist
block on fxp0 from <badhosts> to any
pass inet tcp from 192.168.0.0/24 to any port 80

und nach dem Hinzufügen von 1.2.3.4 und 192.168.0.10 zur badhostsTabelle

$ pfctl -t badhosts -T add 1.2.3.4
$ pfctl -t badhosts -T add 192.168.0.10

Der gesamte Datenverkehr von 1.2.3.4 und 192.168.0.10 wird blockiert, aber der zweite Host kann Verbindungen zum Port 80 anderer Computer herstellen, da die passRegel mit der Regel übereinstimmt und diese überschreibt block.

Zé Loff
quelle
4
Die Sperrregel kann einfacher als angegeben werden block in from <badhosts>. Sie müssen weder die Schnittstelle noch das to anyTeil angeben .
Kurtm
4

Aus anderen Antworten geht nicht hervor, dass Sie eine tatsächliche Tabelle der Badhosts erstellen müssen, die Sie blockieren möchten.

Dies geht in der pf.conf-Datei, zum Beispiel habe ich zwei badguys-Dateien, 1 & 2 badguys1 ist für diejenigen, die kommen und gehen, und badguys2 ist für die permanente Blacklisting.

Wenn Sie also eine IP von jemandem hinzufügen müssen, der für einen bestimmten Zeitraum ein Ärgernis darstellt, fügen Sie sie badguys1 hinzu.

Nun haben Sie dies in Ihrer pf.conf-Datei. In meinem Beispiel verwende ich en1, weil das meine WiFi-Schnittstelle ist. Stellen Sie dies auf die Schnittstelle ein, an der Ihr Netzwerk angeschlossen ist.

table <badhosts> persist file "/etc/badguys1" file "/etc/badguys2"
block on en1 from <badhosts> to any

Jetzt können Sie badguys1 temporäre Adressen hinzufügen. (NICHT badhosts, das ist ein Name für die Tabellen)

sudo pfctl -t badguys1 -T add 185.130.5.160

1 table created.
1/1 addresses added.

Obwohl 1 Tabelle erstellt heißt, wird die IP tatsächlich hinzugefügt und keine neue Tabelle erstellt. Wenn Sie jetzt in badguys1 suchen, sehen Sie die neue IP.

sudo pfctl -t badhosts -T show
user160328
quelle
3

Ich habe diese Informationen von der Website erhalten und vergebe mir mein schlechtes Wissen darüber OpenBSD, aber jetzt geht es los. Schauen Sie sich diese URL an . Demnach heißt es, eine IP zu blockieren, die Sie würden:

echo '123.123.123.123' >> /etc/pf.blocked.ip.conf

Dann würden Sie die Firewall neu starten:

pfctl -d
pfctl -e -f /etc/pf.conf

Oder fügen Sie Folgendes hinzu, ohne den Firewall-Typ neu zu starten:

pfctl -t blockedips -T add 111.222.333.444

Um nun zu überprüfen, ob es hinzugefügt wurde, geben Sie Folgendes ein:

pfctl -t blockedips -T show

Update: Vielleicht würde das helfen.

  • Öffnen Sie die folgende Datei in vi:

    vi /etc/pf.conf

  • Fügen Sie die folgende Codezeile hinzu:

    table <blockedips> persist file "/etc/pf.blocked.ip.conf" ext_if="bge0" # interface connected to internet

  • Danach würde ich versuchen, die Firewall neu zu starten und zu bestätigen, dass die IP-Adresse blockiert ist, indem ich Folgendes eingebe:

    pfctl -d
    pfctl -e -f /etc/pf.conf
    pfctl -t blockedips -T show
    
Ryekayo
quelle
1
Ich denke, die Tabelle muss auf Block gesetzt werden, aber dieser Teil ist im Howto nicht klar, ich folgte ihm, aber die IP ist immer noch nicht blockiert
somelooser28533
Lassen Sie mich sehen, ob ich nachschlagen kann, wie das geht.
Ryekayo
2
Es ist nicht erforderlich, pf zu deaktivieren und erneut zu aktivieren, um pf.conf neu zu laden. pfctl -f /etc/pf.confreicht.
Zé Loff
1
(Schlechte) HOWTOs entmutigen zum Nachdenken und fördern das Kopieren. Lesen man pf.confSie, Sie werden überrascht sein, wie gut OpenBSD-Manpages sind. Außerdem müssen die pf.confDateien als Ganzes gelesen werden (die Reihenfolge, in der die Regeln festgelegt werden, ist entscheidend). Daher ist das Kopieren und Einfügen einzelner Zeilen in der Regel eine schlechte Idee. Erstellen Sie die Datei und die tableRegel (so viel ist korrekt), aber entweder geben Sie Ihre gesamte pf.confDatei frei, oder Sie müssen die entsprechende blockRegel und ihren Speicherort in der Datei ermitteln.
Zé Loff
1
@ryekayo Wenn Sie die Aufnahme des Makros nicht rechtfertigen können ext_if="bge0"und keine Blockierungsregel haben, werde ich Ihre Antwort kritisieren, da sie unvollständig ist (dh keine richtige Antwort ist), ungeachtet des von Ihnen unternommenen Aufwands. Außerdem wurde mein Kommentar zu den HOWTOs im OP angesprochen, nicht Sie (Entschuldigung, das hätte ich klarstellen sollen).
Zé Loff