[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