Puncte:0

OpenVPN Modificați traficul de intrare sau încărcarea utilă cu un script personalizat

drapel ph

Recent, am configurat OpenVPN cu Dnsmasq ca DNS și vreau să fac ceva despre care se pare că nu găsesc informații.

Iată înțelegerea mea actuală, bazată și pe ceea ce am configurat în prezent pe serverul meu.

A. Clientul se conectează la OpenVPN, să zicem de pe un telefon

B. Clienții trimit trafic, adică deschide un site web, să spunem YouTube

C. Serverul OpenVPN preia cererea.

D. Redirecționează solicitarea către serverul de destinație, adică YouTube.

E. YouTube răspunde.

F. OpenVPN transmite răspunsul către client de la A

Desigur, cele de mai sus sunt prea simplificate.

Ce vreau sa fac?

Între etapele C și D, ca după ce OpenVPN preia cererea (sau primește un răspuns de la serverul de destinație, adică D->C), vreau să procesez datele reale.

De exemplu, un caz de utilizare tipic.

Între D și C, vreau să trec încărcătura utilă, de exemplu, unui script Python, să schimb tot textul „Te iubesc” din html-ul paginii web în „Te urăsc” înainte ca sarcina utilă să fie împachetată și trimisă clientului.

Întrebare

Există vreo formă de „Life Cycle Hooks” cu OpenVPN în care pot, practic, să ascult și să modific sarcina utilă a unei solicitări?

Înțeleg că orice conexiune de intrare sau de ieșire de la OpenVPN este securizată „fort knox”. Sunt interesat de punctul în care sarcina utilă de răspuns stă goală pe server.

Care sunt opțiunile mele disponibile? Trebuie să folosesc un alt pachet/software pentru a consulta astfel de rezultate?

drapel us
Singurul loc în care mă pot gândi unde puteți monitoriza și manipula pachetul TCP este pe interfața fizică a rețelei, cum ar fi `eth0` sau `ens2p0`. Cu toate acestea: dacă serverul tău VPN folosește NAT pentru a redirecționa traficul către Internet, devine ceva mai complicat, deoarece vrei să accesezi pe Internet traficul care părăsește VPN-ul înainte ca acesta să treacă prin NAT. Aceasta este o sarcină non-trivială.
drapel us
Mi-am actualizat răspunsul de mai jos, explicând în detaliu de ce nu puteți face nimic din obiectivele dorite.
Puncte:3
drapel us

Ideea ta este imposibilă din mai multe motive:

1)

Din câte îmi amintesc, nu există o funcție în OpenVPN în sine care să conducă datele de la o conexiune VPN într-un proces personalizat, înainte de redirecționare.

Pentru referință rapidă: verificați unde este utilizat TCP/IP în stiva OSI.

OpenVPN se află pe stratul 3 al stivei OSI (stratul de rețea), în timp ce pachetele TCP aparțin stratului 4 (stratul de transport).

Întrebarea dvs. este doar din acest motiv în afara domeniului de aplicare a ceea ce dorește să obțină OpenVPN.

Singurul lucru cu care puteți manipula este ceea ce se întâmplă atunci când un client se conectează la server sau se deconectează.

Aceste situații pot fi definite în fișierul dvs. de configurare a serverului prin următoarele setări:

# client conectat la serverul VPN
client-connect „/script/client_connect.sh”

# client deconectat de la serverul VPN
client-disconnect „/script/client_disconnect.sh”

Toate variabilele de mediu care sunt disponibile pentru scriptul personalizat sunt disponibile aici:

https://openvpn.net/community-resources/reference-manual-for-openvpn-2-4/#scripting-and-environmental-variables

Dar, în esență, singura informație pe care o puteți monitoriza este ce certificat de client a fost folosit pentru a vă conecta la server și ce adresă ip a fost atribuită clientului și apoi faceți o logică personalizată pe server, în funcție de cine se conectează și ce să facă când se deconectează din nou.

O configurație tipică ar putea fi implementarea unei părți dinamice a serverului DNS sau efectuarea unor rute personalizate, cum ar fi rutarea de failover, în funcție de conexiunea VPN activată.

2)

Referindu-ne la această diagramă a unui pachet IPv4 de la WikiPedia:

Schema unui pachet IPv4

În esență, ceea ce doriți este să manipulați câmpul de date, în funcție de adresa sursă sau de destinație.

Acesta este, de asemenea, cunoscut sub numele de atacul omului din mijloc.

După cum ați aflat greu, faceți-o ascultând pe interfața OpenVPN, deoarece tot conținutul este criptat. Ce se întâmplă este că pachetul IPv4 destinat Internetului este încapsulat într-un alt pachet IPv4, care este destinat serverului OpenVPN.

Pachetul IPv4 încapsulat este stocat în câmpul de date din diagrama de mai sus.

Este pachetul decapsulat care este redirecționat către Internet de la serverul VPN.

Cu toate acestea, există o avertizare:

Presupun că clientul VPN o face nu au o adresă IP publică. Aceasta înseamnă că traducerea NAT este implicată și adresa sursă este rescrisă pentru a fi cea a serverului VPN înainte ca orice gazdă să fie contactată pe Internet.

La fel, atunci când gazda răspunde cu un răspuns, avem adresa IPv4 de destinație aceeași cu serverul VPN.

Aceasta înseamnă că, pentru a manipula câmpul de date, trebuie să urmărim ce porturi sunt utilizate în tabelul de traducere a adreselor de rețea (alias NAT).

Porturile utilizate sunt în mod normal de natură dinamică, deoarece mai mult de un client VPN se poate conecta la Internet prin VPN și NAT și fiecare sesiune TCP (mail, web, ssh orice) folosește un port diferit.

Deci, dacă vrei să manipulezi pachet TCP decriptat trebuie să se întâmple după decriptare, dar înainte de a fi tradus în NAT.

În teorie, puteți intercepta pachetul folosind iptables, dar nu este banal atunci când VPN și NAT se află pe aceeași mașină.

O altă abordare este să atacați direct traficul criptat OpenVPN, deoarece controlați serverul OpenVPN înseamnă că controlați și ce certificate și chei private sunt utilizate atât pe server, cât și pe client.

Acest lucru este realizabil ca un atac clasic de tip man-in-the-middle. Nu știu totuși cum se face asta. :-)

... dar asta mă duce la ultimul meu argument:

3)

Majoritatea traficului de pe Internet este criptat TLS.

Deci, chiar și după ce ați decriptat traficul OpenVPN, există un alt nivel de criptare pe care trebuie să îl învingeți pentru a manipula conținutul câmpului de date.

Această parte este chiar mai greu de atacat decât doar atacarea traficului criptat OpenVPN, deoarece nu deții controlul cheilor de criptare utilizate pentru sesiune.

Chiar dacă ați încerca să decriptați traficul TLS și să recriptați conținutul, astfel încât pentru utilizatorul final să pară că traficul criptat a provenit într-adevăr de pe YouTube sau orice altceva, atunci ar fi inutil, deoarece certificatul pe care îl utilizați pentru a cripta traficul https este nu de încredere de browserele de pe computerele utilizatorilor finali.

Numai asta face ca atacul tău omul din mijloc să fie inutil.

Acum, acesta este cât mai aproape de un răspuns complet la întrebarea dvs.

Există și alte unghiuri pentru a ataca o sesiune TCP, dar acum mergem la un domeniu avansat care aparține unui forum plin de experți în securitate.

Acea parte este CU MULT peste calificările mele. :-)

drapel ph
Apreciez cu adevărat răspunsul profund. Mi-a dat multe indicații despre care să citesc mai multe.
drapel us
Atunci poate doriți să marcați răspunsul ca „acceptat”. La urma urmei - nu vă puteți primi rambursarea recompensei pentru reputație. :-)

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.