Redirect-Problem mit PF

kimio

Member
hallo in die runde,

habe das folgende kleine problem mit RDR und PF auf freeBSD 6.1:

habe einen server 1 mit zwei IFs (bge0 am internet / bge1 192.168.10.234)

am internen Netz hängt server 2 (bge0-s2 192.168.10.150), pf inaktiv


hier die pf.conf auf server 1:
---------------------------------------------------------------------------------------------------------
set skip on lo

rdr on bge0 proto tcp from any to any port 768 -> 192.168.10.150 port 768

block in on bge0 all

pass in quick on bge0 proto tcp from any to 192.168.10.150

pass in on bge1 proto tcp from any to any port >0

pass in on bge0 proto tcp from any to any port ssh
pass in on bge0 proto tcp from any to any port www
pass in on bge0 proto tcp from any to any port 443
pass in on bge0 proto {tcp,udp} from any to any port >4024

pass on lo all

pass out on lo proto {tcp,udp,icmp} all
pass out on bge0 from any to any
pass out on bge1 from any to any
---------------------------------------------------------------------------------------------------------

wenn ich zB per telnet aufs externe bge0 port 768 connecte, dann meldet mir tcpdump ("tcpdump -nf port 768") auf dem server 1 ankommende pakete, klar.

tcpdump ("tcpdump -nf port 768") auf server 2 (IF bge0-s2) schweigt aber.

wenn ich vom server 1 per telnet auf 192.168.10.150 768 connecte, dann meldet mir tcpdump auf server 2 ankommende pakete, super.

sieht so aus, als würde der RDR nicht richtig sein - hat jemand eine idee, wie ich die ursache ermitteln kann?

danke!

kimio
 
hi

du solltest auch den zugriff auf port 768 erlauben


pass in on bge0 proto tcp from any to 192.168.10.150 port 768 keep state

dann sollte das auch klappen

ansonsten solltest du block log in .... machen um dir den geblockten traffic via pflog0 anschauen zu koennen.

holger
 
habe alle aus meiner sicht logischen varianten getestet....

hi! aktuell erlaube ich auf server1 folgende pakete ankommend:

pass in quick on bge0 proto tcp from any to any port 768


--> "block in on bge0 all" habe ich in
--> "block in log on bge0 all" umgewandelt

cat /var/log/pf.today zeigt mir aber nach dem test per telnet ext-ip 768 an:

block drop in on bge0 all [ Evaluations: 10407940 Packets: 4116 Bytes: 1018491 States: 0 ]

kann man das genauer haben? eigentlich kann es am rdr und ruleset nicht liegen. aber wieso kommen meine pakete dann vom server 1 per telnet auf dem tcpdump server 2 an?

rätselhaft...
 
hi! aktuell erlaube ich auf server1 folgende pakete ankommend:

pass in quick on bge0 proto tcp from any to any port 768


--> "block in on bge0 all" habe ich in
--> "block in log on bge0 all" umgewandelt

cat /var/log/pf.today zeigt mir aber nach dem test per telnet ext-ip 768 an:

block drop in on bge0 all [ Evaluations: 10407940 Packets: 4116 Bytes: 1018491 States: 0 ]

kann man das genauer haben? eigentlich kann es am rdr und ruleset nicht liegen. aber wieso kommen meine pakete dann vom server 1 per telnet auf dem tcpdump server 2 an?

rätselhaft...

wie schon gesagt
du musst auch schon eine allow regel fuer deinen ziel rechner ( redirektet host )
samt port mit einbauen weil sonst alles gedropt wird.

holger
 
hi holger,

auf dem zielrechner ist pf abgeschaltet....

ich verstehe dich so, dass ich ein pass in auf dem server 2 einrichten soll. das ist ja in diesem fall nicht notwendig.

ich komme ja die tcp-pakete, abgeschickt per "telnet 192.168.10.150 768" vom server 1/bge1 auf den server 2 bge0 im tcpdump angezeigt.

dafür sollte die regel auf server 1/bge1 (inneres IF): "pass out on bge1 from any to any" zuständig sein.


das RDR selbst klappt anscheinend - folgender test ist erfolgreich:

rdr on bge0 proto tcp from any to any port 10002 -> (öffentl. IP bge0 auf server 1) port 80

folge: der webserver auf server 1 antwortet brav auf port 80.


ich beschäftige mich leider erst seit ein paar tagen mit PF.


grüße! kimio
 
ganz seltsam - auf dem parallelen system klappt die einstellung mit exakt den gleichen PF-rules:

öffentl. IP -> bge0-System 1a -> pf.conf -> kein durchleiten der pakete auf 192.168.10.150 768
öffentl. IP -> bge0-System 1b -> pf.conf -> durchleiten der pakete auf 192.168.10.150 768 ok

von beiden systemen aus kann ich ohne probleme lokal per per telnet auf den 192.168... zugreifen.

beides freeBSD 6.1 - ich kann es mir nicht erklären.
 
versuche doch einfach mal, die externe ip in der regel anzugeben:

rdr on bge0 proto tcp from any to ($ext_if) port 786 -> $server2 port 786

dann noch:
pass in on bge0 proto tcp from any to $server2 port 786 flags S/SA keep state #(weiss nicht, wie pf sich bei fbsd aktuelle mit den flags verhält)
pass out on bge1 proto tcp from any to $server2 port 786 flags S/SA keep state

die externen rechner kennen ja nur die externe ip von dem server; die interne wird ja nicht geroutet. weiterhin wären vielleicht auch die routingtabellen hilfreich (mac-adresse) bei der fehlersuche.

noch ein tipp:
"set skip on lo" macht zusätzliche "pass"-regeln für lo überflüssig, weils ja übersprungen wird.

hth,
marc
 
Hallo,
kann man das genauer haben?
unter Umständen sind folgende alias-Definitionen hilfreich:

in der Datei .cshrc im Verzeichnis /root folgende Zeilen hinzufügen
Code:
alias   llogint tcpdump -n -e -ttt -r /var/log/pflog on bge1
alias   llogext tcpdump -n -e -ttt -r /var/log/pflog on bge0

alias   pfchk   pfctl -nf /etc/pf.conf
alias   pffl    'pfctl -F all; pfctl -f /etc/pf.conf'

Die definieren die Kommandos:
llogint -> Auszug unter pflog Datei für die geloggten Records der internen Nic
llogext -> Auszug unter pflog Datei für die geloggten Records der externen Nic
pfchk -> Syntaxcheck von /etc/pf.conf
pffl -> Full load der pf-Regeln aus der Datei /etc/pf.conf

Für das aktivieren des Logs für pf sollte man in der rc.conf noch diese Zeile drin haben

pflog_enable="YES"

MfG PoJ
 
imho ist ein komplettes flushen der regeln nicht nötig, da das automatisch beim reload einer datei mit pfctl passiert
 
Zurück
Oben