[fli4l] Frage zur Firewall (Input-Chain)
Christoph Schulz
fli4l at kristov.de
So Aug 16 18:31:43 CEST 2015
Hallo!
K. Dreier schrieb:
>> PF_PREROUTING_x='if:IP_NET_2_DEV:any any any:1234 DNAT:127.0.0.1'
>
> Sowas in der Art hatte ich versucht, allerdings offensichtlich mit der
> falschen Syntax. Dennoch wird das Gewünschte (siehe unten) auch damit
> nicht erreicht: Ich kann sogar sämtliche Internetseiten normal
> erreichen, auch wenn der SOCKS-Proxy gar nicht auf dem fli4l initiiert
> wurde. Das verstehe ich nun überhaupt nicht.
> [...]
> So die Idee, ja. Es geht letztlich darum, daß wenn auf einem
> (bestimmten) client der Proxy eingerichtet wurde (bzw. ohne das
> explizite Einrichten, wenn es transparent läuft) die aufgerufene
> Webseite/"Internetdienst" nicht die WAN-IP des fli4l sieht, sondern jene
> vom externen Server. D.h. also jener Rechner weit draussen im Internet,
> zu dem vom fli4l der SOCKS-Proxy aufgebaut wurde.
Also ist der SOCKS-Proxy eigentlich auf einem _anderen_ Host. Dann geht es
dir gar nicht darum, ss5 auf dem fli4l laufen zu lassen -- es sei denn, es
gibt einen SOCKS-to-SOCKS-Relay, siehe [1].
[1] http://socks-relay.sourceforge.net/
Solange du keinen Relay nutzt, musst der Client transparent mit dem
entfernten Proxy verbunden werden.
> Ich mache das ständig mit meinen PCs, völlig problemlos: Ich initiiere
> auf dem PC einen SSH-Tunnel zu einem externen Rechner und aktiviere
> dabei zugleich auf einem bestimmten Port einen SOCKS-Proxy. Setze ich
> nun im Browser den (SOCKS-)Proxy auf "localhost 1234", dann erkennt die
> liebe weite Welt des Internet nicht mehr meine WAN-IP des lokalen
> Providers (jene des eth0 am fli4l), sondern jene vom remote Server.
OK, Problem verstanden. Dann sollte Folgendes deine Lösung sein:
PF_PREROUTING_1='if:IP_NET_2_DEV:any @<Host-der-über-den-Proxy-surfen-will>
IP_NET_2_IPADDR:<Proxy-Port-auf-dem-fli4l> DNAT:<IP-des-SOCKS-
Proxys>:<entfernter-SOCKS-Port>'
Wenn also der entfernte Proxy unter der Adresse 1.2.3.4:5678 zu erreichen
ist und der fli4l SOCKS auf Port 1234 für Client "client" im zweiten LAN
(IP_NET_2) anbieten soll, wäre dies die Regel:
PF_PREROUTING_1='if:IP_NET_2_DEV:any @client IP_NET_2_IPADDR:1234
DNAT:1.2.3.4:5678'
Das geht aber nur, wenn du den entfernten SOCKS-Proxy mehr oder weniger
direkt (also über das Internet, einen OpenVPN-Tunnel o.ä.) erreichen kannst.
Ich weiß nicht genau, ob das bei dir geht oder nicht. Du erwähnst SSH-
Verbindungen, sagst aber nicht, ob dies die _einzige_ mögliche Anbindung
ist. Über einen OpenVPN-Tunnel würde das sicherlich in der beschriebenen Art
und Weise auch gehen. Nutzt du nur Port-Weiterleitungen via SSH, musst du
die lokale Adresse und den lokalen Port nutzen:
PF_PREROUTING_1='if:IP_NET_2_DEV:any @client IP_NET_2_IPADDR:1234
DNAT:127.0.0.1:1234'
Das sollte zusammen mit "plink -L 1234:localhost:5678 <entfernter-SOCKS-
Proxy>" funktionieren, falls auf dem entfernten Host der SOCKS-Proxy lokal
auf Port 5678 horcht. Beachte das "-L" vs. "-D" -- "-L" ist "rohe"
Weiterleitung, und die Pakete auf dem Port 1234 werden ungeändert an Port
1234 auf dem entfernten Host weitergeleitet, wo (hoffentlich) ein SOCKS-
Proxy horcht und die Pakete verarbeitet. Bei "-D" würde plink selbst einen
lokalen SOCKS-Proxy aufmachen und die SOCKS-Anfragen nicht unverändert
weiterleiten (so verstehe ich das zumindest).
Viele Grüße,
--
Christoph Schulz
[fli4l-Team]
Mehr Informationen über die Mailingliste Fli4L