Proxy med aktiv koppling till klient

Diskussion kring säkerhet och nätverk.
Post Reply
Zenox
Posts: 1618
Joined: 3 May 2003, 18:32

Proxy med aktiv koppling till klient

Post by Zenox » 14 December 2009, 15:25

Jag behöver skicka kommandon genom internet (som får tillbaka svar) från en server till en klient som är bakom brandvägg (som jag inte kan administrera eller ens vet adressen till på förhand).

Finns det någon proxy eller tunnel för att lösa problemet ovan?

Funderar på om det går att sätta upp en proxy dit klienten kan skapa en socket som ligger öppen och väntar. När sen servern behöver göra en request till klienten skickas den via proxyn som i sin tur har kopplingen uppe mot klienten.

Kanske finns något annat sätt också (jag kanske tänker bakvänt)?

Zenox
Posts: 1618
Joined: 3 May 2003, 18:32

Re: Proxy med aktiv koppling till klient

Post by Zenox » 16 December 2009, 02:26

Sökt en massa efter information.

Man ska köra reverse tunnel (dator 1 bakom firewall kopplar upp sig till dator 2 på internet. dator 2 kan sedan skicka requests till dator 1 och få svar).

Har fått det att fungera med ssh -R kommando, men lite skeptisk att köra sshd för en sån grej. Tillåter man sånt så får användaren tillgång till tunnling med (i.e. kan surfa via proxy på ens IP adress).

Någon som kört reverse med http tunnel (hts och htc), netcat eller annat och vet hur det fungerar?

erik_persson
Posts: 1474
Joined: 29 August 2002, 15:19

Re: Proxy med aktiv koppling till klient

Post by erik_persson » 16 December 2009, 20:01

Befinner sig användaren bakom en brandvägg så måste användare öppna upp en reverse tunnel på något sätt.
Det är möjligt att det går att lura runt med ssh, men användaren kan alltid installera sin egen forwarding-pryl.

Detta kan möjligen vara en lösning:
http://www.linuxprimetime.com/?p=74

Dvs förhindra användaren från att använda andra än vissa av dig specificerade portar och låt användaren öppna en reverse proxy.

/ep

Zenox
Posts: 1618
Joined: 3 May 2003, 18:32

Re: Proxy med aktiv koppling till klient

Post by Zenox » 18 December 2009, 09:30

Jo det skulle det kunnat vara en lösning. Problemet är att jag bara har kontroll över serverdelen (inte klienten bakom brandväggen).

Det ska gå att göra en reverse tunnel med netcat, men inte fått till det så netcat skickar in och tar emot trafik från httpd och skickar vidare genom reverse tunneln till servern än. Och samtidigt är det nog svårt att få det säkert mha av netcat över internet (måste öppna "osäker" port i servern) så. SSH tunnel kanske är enda raka om det inte finns något projekt som just är till för det här.

erik_persson
Posts: 1474
Joined: 29 August 2002, 15:19

Re: Proxy med aktiv koppling till klient

Post by erik_persson » 19 December 2009, 20:44

Zenox wrote:Jo det skulle det kunnat vara en lösning. Problemet är att jag bara har kontroll över serverdelen (inte klienten bakom brandväggen).
Ja, och det är därför du måste hindra användaren att upprätta trafik ut från datorn annat än där du har tillåtit det (vad jag förstod var det detta som du ville förhindra - dvs att klienten tex använda serverns som en proxy för annat). Det skulle nog gå att göra enligt länken jag postade innan. Dvs tillåt klienten att ansluta med ssh till servern, men förhindra sedan att klienten upprättar några utgående förbindelser från servern.

Du kan också titta på stunnel (http://www.stunnel.org). Det kan kanske hjälpa dig.
Zenox wrote: Det ska gå att göra en reverse tunnel med netcat, men inte fått till det så netcat skickar in och tar emot trafik från httpd och skickar vidare genom reverse tunneln till servern än. Och samtidigt är det nog svårt att få det säkert mha av netcat över internet (måste öppna "osäker" port i servern) så. SSH tunnel kanske är enda raka om det inte finns något projekt som just är till för det här.
Vad jag förstår så vill du när klienten ansluter till servern öppna en port på servern som du kan använda för att nå klienten. Därmed måste du låta klienten på något sätt sköta startandet av denna port på servern. Ett alternativ är att själv skriva ett program för detta. Det enda du i princip behöver göra är att lyssna på en socket på servern, och när en klient ansluter starta upp en ny server-socket på servern och sedan knyta strömmarna mellan dessa på ett lämpligt sätt. Det uppstår dock ett problem i att veta hur du ska koppla server-port till klient (det får du i så fall göra ett eget protokoll för).

I princip skulle du kunna använda netcat, men du måste väl då på servern koppla koppla 2 st netcat med stdout från den ena netcat till stdin på den andra. Det kan du iofs göra med tex perl (se tex http://www.perl.com/doc/FMTEYEWTK/IPC/openplex.html ).

Edit:
Du kan också försöka med något liknande:
mkfifo apa
nc -l -p 5055 < apa | nc -l 5056 > apa

Sedan kan klienten ansluta över någon av dessa båda portar och du kan då kommunicera med klienten över den andra porten!

/ep

Post Reply