pf - bestimmte IPs blocken

Herakles

Profifragensteller
Moin!

Ich möchte gern einen einzelnen Rechner aus dem Internet aussperren. Dafür habe ich diese Einträge in der pf.conf gemacht:

Code:
table <blockedips> persist file "/etc/pf.blocked.ip.conf"
(...)
block on $ExtDev
block out quick on $ExtDev from <blockedips> to any
# allow ICMP for ping(8)
pass in quick on $ExtDev inet proto icmp all icmp-type 8 code 0 keep state
# the latter one is priorized, if there are ToS-fileds in the packet, that identifies those as logins or such
pass out on $ExtDev inet proto tcp from ($ExtDev) to any flags S/SA modulate state queue(default_queue_out, tcp_ack_out)
pass out quick on $ExtDev inet proto { tcp udp } from ($ExtDev) to any port domain modulate state queue dns_out
pass out quick on $ExtDev inet proto { tcp udp } from ($ExtDev) to any port sh
modulate state queue default_queue_out
pass out quick on $ExtDev inet proto { tcp udp } from ($ExtDev) to any port imap modulate state queue email_out
pass out quick on $ExtDev inet proto tcp from ($ExtDev) to any port ftp-data modulate state queue bulk_data_out
pass out quick on $ExtDev inet proto { tcp udp icmp } from ($ExtDev) to any modulate state queue default_queue_out
# allow the local users to do everything regarding outbound connections
# quick: perform this rule immediately, therefore improve pf's performance
# module state: Initial Sequence Number is chosen at random
pass out quick on $ExtDev from ($ExtDev) to any modulate state queue default_queue_out

Die genannte Datei für die blockedips sieht wie folgt aus:

Code:
# cat /etc/pf.blocked.ip.conf                                                  
192.168.1.23

Dennoch kann der Rechner weiterhin online gehen. Was macht ich falsch?

Sollten noch infos fehlen, versuche ich natürlich, diese fix nachzuliefern!

Grüße
Herakles
 
Was sagt denn ein:
Code:
# pfctl -t blockedips -Tshow
Taucht deine IP da auf? Ich meinte ich hätte mal ein ähnliches Problem gehabt. Nachdem ich die IP dann manuell über pfctl hinzugefügt habe ging es dann...allerdings unter FreeBSD.
Code:
# pfctl -t blockedips -T add 192.168.1.23
 
Ich habe gerade kein OpenBSD zum Testen da.
Aber du kannst dir doch irgendwie anzeigen lassen, von welcher Regel der entsprechende State erzeugt worden ist. Ich verwende normalerweise pftop aber mit pfctl -sv info oder pfctl -s states sollte das auch zu machen sein.

Bau einfach eine Verbindung von deinem geblockten Rechner zum Internet auf und schau dir an welche Regel den entsprechenden state erzeugt.

Gruß
Florian
 
anstelle von pftop geht auch:

% sudo systat states

meine vermutung waere, dass die packete mit NAT schon uebersetzt worden sind und am ausgehenden IF nicht mehr die ursprungs-IP haben!?

--ingolfo
 
block out quick on $ExtDev from <blockedips> to any

eher "block in quick on $IntDev from <blockedips>", oder?? sonst wird doch genatted...
 
@oenone: den Punkt hatte ich zwar auch im Kopf, nur verbietet der dem Rechner dann ja auch den Zugang zum Router selbst, weil er so ja bereits auf dem eingehenden Device geblockt wird. Natürlich ist das tolerabel - dann wird der Router eben von einer priviligierten Maschine administriert. Allein aus "ich will's richtig machen und verstehen"-Gründen würde ich's gern anders machen: NUR Internetzugang blocken, ALLES Andere erlauben :)

Also: die Regel von oenone funktioniert - Internet ist für den Rechner geblockt. Nur optimieren würd ich gerne noch.

Herakles

EDIT: Die Kombination von zwei Regeln schafft, was ich will:

Code:
pass in quick on $IntDev from <blockedips> to $IntNet
block in quick on $IntDev from <blockedips> to any
 
die kannst du auch in eine machen: "block in quick on $IntDev from <blockedips> to !$IntNet"
 
Zurück
Oben