pf und rdr auf Proxy wollen nicht

Errorsmith

Kompiliertier
Hi

Hab hier folgendes Netz stehen:

Clients liegen in 192.168.9.0/24
Im gleichen Netz liegt ein Server der neben 192.168.9.1 zusätzlich noch die IP 192.168.12.21 hat und als default Gateway bei den Clients eingetragen ist.

Der Proxy (Squid) hat 192.168.12.26

Die Firewall hat 192.168.12.1

Auf der Firewall habe ich diese Regel in pf.conf:
Code:
intif ="rl0"
extif="tun0"
lan="192.168.9.0/24"
...
...
rdr pass on $intif proto tcp from $lan to any port 80 -> 192.168.12.26
nat on $extif from 192.168.12.0/24 to any -> ($extif)
....
...

pfctl -f /etc/pf.conf schluck das Regelset ohne zu murren. Alles funktioniert soweit, aber ich komme mit den Clients nicht ins Netz. Er macht ums verrecken kein rdr. Stelle ich die Clients manuell auf den Proxy ein funktioniert alles. Richte ich eine nat-Regel für die Clients ein ebenfalls. Versuche ich mit der rdr Regel online zu gehen bekomme ich einen Timeout. Er ignoriert diese Regel scheinbar einfach.

Squid ist soweit in Ordnung, wenn ich das rdr versuche bekomme ich nicht mal die Anfragen am Proxy, es hängt also schon vorher.

Nun weiß ich nicht weiter. Irgendwelche Ideen?

Mfg, Error
 
Hi

Danke für die Antwort. Das war mein Ausgangstutorial ;) Leider scheint es so erstmal nicht zu funktionieren.

Ich hab mittlerweile eine potentielle Lösung:
Es funktioniert wenn ich den Proxy auf dem gleichen Host installiere wie die Firewall. Werd ich wohl auch so lassen bis ich was besseres hab, der Rechner ist fit genug dafür.

Mfg, Error
 
Hallo ErrorSmith,

rdr pass on $intif proto tcp from $lan to any port 80 -> 192.168.12.26
Auf welchen Port leitest Du alles um?

Viele Grüße

Jürgen
 
Hi

Sorry für die späte Antwort. Ich leite das auf Port 80 um wo auch der PRoxy lauscht. Sollte doch kein Problem sein oder?

Gruss Error
 
Mal ein Auszug:
Code:
rdr on $int_if inet proto tcp from any to any port www -> 127.0.0.1 port 3128
[...]
pass in log on $int_if inet proto tcp from any to 127.0.0.1 port 3128 keep state
pass out log on $ext_if inet proto tcp from any to any port www keep state
Die conf von SQUID:
Code:
[...]
http_port 127.0.0.1:3128
http_access deny to_localhost
acl our_networks src 10.0.0.0/8
http_access allow our_networks
visible_hostname hostname.example.de
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
[...]
Und Rechte setzen:
Code:
# chgrp squid /dev/pf
# chmod g+rw /dev/pf
Wenn das alles partout nicht will, hier läuft es exakt so, dann bitte mal output der logs posten.
 
Errorsmith said:
...
rdr pass on $intif proto tcp from $lan to any port 80 -> 192.168.12.26
...
Du leitest Requests auf tcp/80 auf eine andere Maschine mit tcp/80 um. Squid horcht doch aber auch bei Dir sicher auf tcp/3128 oder hast Du Deinem Squid gesagt, er möge auf tcp/80 horchen?

Lösung:
rdr .... port 80 -> 192.168.12.26 port 3128
 
Last edited:
Hi

Jupp er lauschte auf 80.
Ich hab es bisher erstmal so gelassen, der Rechner auf dem der Squid im Moment läuft kann das ab, da ich im Moment (diese Woche nocht) recht wenig Zeit für derartige Experimente hab. Werd mich nächste Woche weiter damit befassen.
Werde dann den Proxy auf dem anderen Rechner nochmal komplett neu installieren und von vorn anfangen, vielleicht hab ich ja wirklich was übersehen.

Konkret welche Logs sind denn gemeint? Anfragen beim Squid kamen nicht an, pf gab mir auch nichts vernünftiges aus (garnix um genau zu sein) und ein tcpdump auf den Interfaces zeigte auch nichts den Proxy betreffendes.

Gruss, Errorsmith
 
error,

wenn Du squid im Browser einstellst, gibst Du dann auch tcp/80 als Proxy-Port an oder benutzt Du da tcp/3128?

mach doch mal ein `sockstat -4' - wo horcht squid wirklich?

und dann bitte mal ein `grep accel /usr/local/etc/squid/squid.conf'

An logs sind interessant: Firewall-log (und vielleicht nicht nur blockierte Pakete) und squid access.log und natürlich Dein möglichst vollständiges pf ruleset.

Solche redirects habe ich schon quer Beet gemacht und das funktioniert grundsätzlich (ob man nun Ports verbiegen will oder auf andere Maschinen umleiten oder sonstwas).
 
Hi

Danke für die Hinweise. Werd ich machen wenn ich ihn neu installiert hab. Auf der anderen Maschine geht es ja im Moment. Bin im zur Zeit auch nicht an diesem Rechner.
Welches Firewall Log meinst du? Ich hab diesbezüglich nur /var/log/pf.today (und pf.yesterday) die aber nur einen Eintrag enhalten. Einen tcpdump auf /var/pflog könnte ich dir anbieten wahlweise natürlich auch auf /dev/pflog0.

Gruss, Error
 
Back
Top