मैं SSH के माध्यम से अपने सभी नेटवर्क ट्रैफ़िक को कैसे सुरंग बना सकता हूं?


117

जब भी मैं एक असुरक्षित स्थान (जैसे सार्वजनिक वाईफाई) से इंटरनेट का उपयोग कर रहा हूं, मुझे ssh -D port hostयह सुनिश्चित करने के लिए एक ssh सुरंग ( ) का उपयोग करना पसंद है ताकि यह सुनिश्चित हो सके कि मेरा ट्रैफ़िक सूँघा नहीं जा सकता है। दुर्भाग्य से, कई अनुप्रयोग प्रतीत होते हैं जो प्रॉक्सी को निर्दिष्ट करने का एक तरीका प्रदान नहीं करते हैं (फ्लैश एक प्रमुख उदाहरण है)।

ऐसा लगता है कि मेरे कंप्यूटर से सभी नेटवर्क ट्रैफ़िक के लिए एक सुरंग का उपयोग करने का कोई तरीका होना चाहिए , लेकिन मैं यह करने के लिए अनजान हूं। किसी भी तरह की सहायता का स्वागत किया जाएगा।


16
बेशक, आप शाब्दिक रूप से अपने सभी ट्रैफ़िक को ssh के माध्यम से सुरंग नहीं कर सकते, क्योंकि इसका मतलब होगा कि स्वयं के माध्यम से ssh सुरंग बनाना, लेकिन हमें पता था कि इसका क्या मतलब है। :)
कार्लएफ

1
यह एक अच्छा विचार है लेकिन आप केवल अपने कंप्यूटर और अपने ssh एंडपॉइंट के बीच सुरक्षित हैं। उसके बाद, आपका ट्रैफ़िक साफ़ है (जब तक कि अन्यथा संरक्षित न हो, जैसे SSL)। दी गई है, यह एक तार पर होने की बहुत अधिक संभावना है, लेकिन फिर भी ... आप वास्तव में उन तारों पर भरोसा नहीं कर सकते हैं जिन्हें आप नियंत्रित नहीं करते हैं।
5

6
लेकिन जब आप व्यापक इंटरनेट पर होते हैं, तो आपको अरबों पैकेटों में से एक होने में कुछ सुरक्षा होती है, है ना? जब आप एक सार्वजनिक वाई-फाई से जुड़ते हैं, तो आप शायद 3 कनेक्शनों में से एक हैं, आप व्यक्तिगत रूप से पहचाने जा सकते हैं, आदि
एंडोलिथ

जवाबों:


62

आप जो चाहते हैं, उसे करने के लिए, मैं sshuttle की सलाह देता हूं

आप इसे इस तरह उपयोग करते हैं:

./sshuttle -r username@sshserver 0.0.0.0/0 -vv

यह आपके लिए अपने सभी टीसीपी ट्रैफिक को स्वचालित रूप से टनल करेगा। आप --dnsअपने DNS ट्रैफ़िक को भी सुरंग में रखने के लिए तर्क जोड़ सकते हैं । दूरस्थ सर्वर को केवल पायथन स्थापित करने की आवश्यकता है।

यदि आप केवल विशिष्ट कार्यक्रमों के लिए सुरंग बनाना चाहते हैं, तो मैं प्रॉक्सिचिन्स की सिफारिश करूंगा

एक बार यह स्थापित हो जाने के बाद, अपने ssh मोजे को इस तरह शुरू करें:

ssh -fND 127.0.0.1:<local port> username@sshserver

यह "SOCKS" प्रॉक्सी को <स्थानीय पोर्ट> पर सुनना शुरू करेगा।

फिर <स्थानीय पोर्ट> के समान पोर्ट को इंगित करने के लिए /etc/proxychains.conf को संपादित करें।

अंत में अपना प्रोग्राम शुरू करें जिसे आप प्रॉक्सी-एड की तरह चाहते हैं:

proxychains <program name>

यह सिर्फ काम करना चाहिए। हालाँकि, कुछ कार्यक्रमों में प्रॉक्सी चेन्स के साथ काम करने में परेशानी होगी। यह भी ध्यान रखें, कि फ़ायरफ़ॉक्स के साथ, आपको इसके तहत अतिरिक्त आइटम को बदलना होगा: इसे बाध्य करने के बजाय प्रॉक्सी के माध्यम से DNS लुकअप करने के लिए मजबूर करने के लिए कॉन्फ़िगर करें।

वेब ब्राउज़र पर एक अतिरिक्त नोट के रूप में। यदि वे सॉक्स प्रॉक्सी का समर्थन करते हैं, तो आपको उपर्युक्त, ssh सुरंग का उपयोग करने के लिए उन्हें कुछ भी अतिरिक्त करने की आवश्यकता नहीं है, बस प्रॉक्सी पोर्ट के लिए SOCKS प्रॉक्सी सर्वर और <स्थानीय पोर्ट> के लिए 127.0.0.1 दर्ज करें।

EDIT 3/29/16

चूँकि यह पोस्ट अभी भी कुछ उठापटक देख रही है, मैंने सोचा कि मैं इसे अपडेट करूँगा। Proxychains अभी भी अधिकांश लिनक्स रिपोज में है और अभी भी लिनक्स पर काम करता है। हालाँकि, प्रोजेक्ट को प्रभावी रूप से छोड़ दिया गया है और यह OSX पर काम नहीं करता है। लिनक्स या OSX के लिए, मैं अभी भी बनाए रखने वाले कांटे को उन्नत करने की सलाह देता हूं: प्रॉक्सिचिन्स-एनजी: https://github.com/rofl0r/proxychains-ng

लिनक्स और OSX दोनों में काम करने के अलावा, यह संकलन करना आसान है, और DNS सुरंग के लिए भी बेहतर समर्थन है।

मुझे एक अन्य विकल्प का भी उल्लेख करना चाहिए, जो कि रिड्यूस है। यह समीपस्थ (-ng) के समान काम करता है और आपके डिस्ट रेपो में भी संभव है: https://github.com/darkk/redsocks


Sshuttle का उपयोग करके नए लिनक्स सिस्टम के लिए ध्यान दें: लेखन के समय एक कर्नेल बग है जो आपको टूटी हुई पाइप देगा। उस स्थिति में, का उपयोग करें:sshuttle -r root@host -x host 0/0
समुच्चय

49

man sshइसका एक उदाहरण देता है। एक ssh आधारित वीपीएन:

SSH-BASED VIRTUAL PRIVATE NETWORKS
     ssh contains support for Virtual Private Network (VPN) tunnelling using
     the tun(4) network pseudo-device, allowing two networks to be joined
     securely.  The sshd_config(5) configuration option PermitTunnel controls
     whether the server supports this, and at what level (layer 2 or 3 traf-
     fic).

     The following example would connect client network 10.0.50.0/24 with
     remote network 10.0.99.0/24, provided that the SSH server running on the
     gateway to the remote network, at 192.168.1.15, allows it:

       # ssh -f -w 0:1 192.168.1.15 true
       # ifconfig tun0 10.0.50.1 10.0.99.1 netmask 255.255.255.252

~~ स्निप ~~

     Since a SSH-based setup entails a fair amount of overhead, it may be more
     suited to temporary setups, such as for wireless VPNs.  More permanent
     VPNs are better provided by tools such as ipsecctl(8) and isakmpd(8).

एक बार जब आपके पास नया इंटरफ़ेस आ जाता है, तो आपको बस इसे डिफ़ॉल्ट मार्ग बनाना होगा, जो एक अलग प्रश्न है।


1
क्या आप थोड़ा और समझा सकते हैं? Ifconfig कमांड ट्यून नाम का एक नया इंटरफेस बनाता है, है ना? या tun0 ssh द्वारा बनाया गया है और ifconfig द्वारा अभी और कॉन्फ़िगर किया गया है? हो सकता है कि प्रश्न से संबंधित एक उदाहरण जोड़ें?
कोई नहीं

6

Ssh में "टनल" विकल्प देखें। यह एक सुरंग उपकरण बनाता है जिसे आप एक IP पता असाइन कर सकते हैं और फिर आप उस सुरंग का उपयोग करने के लिए डिफ़ॉल्ट मार्ग बदल सकते हैं।


4

मैंने ऐसा सॉफ़्टवेयर विकसित किया है जो आपको SOCKS5 प्रॉक्सी, सिस्टम-वाइड के माध्यम से सभी TCP और वैकल्पिक रूप से UDP को अग्रेषित करने की अनुमति देता है।

http://code.google.com/p/badvpn/wiki/tun2socks

यह लैन पर कंप्यूटर से सभी कनेक्शनों को अग्रेषित करने के लिए एक राउटर पर भी स्थापित किया जा सकता है।


0

SSH-BASED VIRTUAL PRIVATE NETWORKS ssh में वर्चुअल प्राइवेट नेटवर्क (वीपीएन) टनलिंग के लिए सपोर्ट होता है जो ट्यून (4) नेटवर्क स्यूडो-डिवाइस का उपयोग करते हुए दो नेटवर्क को सुरक्षित रूप से जुड़ने की अनुमति देता है। Sshd_config (5) कॉन्फ़िगरेशन विकल्प PermitTunnel यह नियंत्रित करता है कि सर्वर इस का समर्थन करता है, और किस स्तर पर (परत 2 या 3 ट्रैफिक फिक)।

 The following example would connect client network 10.0.50.0/24 with
 remote network 10.0.99.0/24 using a point-to-point connection from
 10.1.1.1 to 10.1.1.2, provided that the SSH server running on the gateway
 to the remote network, at 192.168.1.15, allows it.

 On the client:

       # ssh -f -w 0:1 192.168.1.15 true
       # ifconfig tun0 10.1.1.1 10.1.1.2 netmask 255.255.255.252
       # route add 10.0.99.0/24 10.1.1.2

 On the server:

       # ifconfig tun1 10.1.1.2 10.1.1.1 netmask 255.255.255.252
       # route add 10.0.50.0/24 10.1.1.1

 Client access may be more finely tuned via the /root/.ssh/authorized_keys
 file (see below) and the PermitRootLogin server option.  The following
 entry would permit connections on tun(4) device 1 from user “jane” and on
 tun device 2 from user “john”, if PermitRootLogin is set to
 “forced-commands-only”:

   tunnel="1",command="sh /etc/netstart tun1" ssh-rsa ... jane
   tunnel="2",command="sh /etc/netstart tun2" ssh-rsa ... john

 Since an SSH-based setup entails a fair amount of overhead, it may be
 more suited to temporary setups, such as for wireless VPNs.  More perma‐
 nent VPNs are better provided by tools such as ipsecctl(8) and
 isakmpd(8).

1
कृपया अपनी जानकारी के लिए एक स्रोत जोड़ें। नोट: यह एक पुराना प्रश्न है।
लोरेंजो वॉन मैटरहॉर्न

-2

बस यह साफ़ करना चाहता था कि (ssh -D port host) ट्रैफ़िक को सूँघने के लिए नहीं 100% सुरक्षित तरीका है। जोड़ना (ssh -D -c ब्लोफ़िश पोर्ट होस्ट) एक बेहतर विकल्प होगा क्योंकि आप अपने सत्र में एन्क्रिप्शन जोड़ने में कम से कम हैं। ऐसे और भी विकल्प हैं जिन्हें आप जोड़ सकते हैं, लेकिन पूरी तरह से लिस्टिंग के लिए अपने टर्मिनल या Google में "मैन एसश" टाइप करना काफी आसान है।

विकल्प मुझे लगता है कि आप एक वीपीएन (वर्चुअल प्राइवेट नेटवर्क) की तलाश कर रहे हैं

अपने खुद के वीपीएन को सेट करने से पहले दोनों ( एसएसएच बनाम वीपीएन ) या एक अच्छे सारांश संस्करण के बीच अंतर की समझ पाने के लिए इस लेख पर एक नज़र डालें । यदि आप वीपीएन मार्ग पर जाने का निर्णय लेते हैं तो मैं ओपनवीपीएन , इसके मुफ्त और बहुत सारे प्रलेखन और समर्थन की सिफारिश करता हूं ।


6
बुरी सलाह। "ब्लोफिश" एक SSH-1 सिफर है; यह तेज़ है, सोचा सुरक्षित है (1999 तक: unixhelp.ed.ac.uk/CGI/man-cgi?ssh+1 ), लेकिन फिर भी। आप शायद चाहते हैं ssh -2 -C -D [...](SSH2 को बल दें, संपीड़न का उपयोग करें) और ड्रॉप करें -cman sshSSH2 में मेरे सिस्टम की सिफर सूची के अनुसार चूक होती है aes128-cbc,3des-cbc,blowfish-cbc,[etc]। मेरा कहना है, यदि आप अनुरोध -c blowfishकरते हैं कि आप SSH1 के साथ समाप्त हो सकते हैं, जो SSH2 की तुलना में बहुत कम सुरक्षित है।
5

2
यह सच है, लेकिन जेरेमी इस धारणा के तहत था कि कनेक्शन सिर्फ -80 8080 के साथ सुरक्षित था, मैंने केवल यह कहा कि वह जो उपयोग कर रहा था उससे बेहतर था। आप एक वैध बिंदु बनाते हैं और यही कारण है कि मैं अधिक विकल्पों के लिए मैनुअल का उल्लेख करता हूं।
रिकबैक्स

शायद आपको अपना जवाब बदलना चाहिए, क्योंकि यह अन्यथा सहायक है।
एंडोलिथ

भूल गए कि मैंने यह पूछा है, इस साइट का नियमित रूप से उपयोग न करें। स्पष्टीकरण के लिए धन्यवाद ... मेरे पास यह मजबूत धारणा थी कि एसएसएच डिफ़ॉल्ट रूप से सुरक्षित था।
जेरेमी बैंक्स

9
WTF SSH डिफ़ॉल्ट रूप से एन्क्रिप्शन का उपयोग नहीं कर रहा है ??
लातिनसुद

-3

इन उदाहरणों का उपयोग करें:

  • अपने लोकलहोस्ट पर रिमोट होस्ट से 8888 पर पोर्ट 80 को फॉरवर्ड करें

    ssh -fnN -L8888: localhost: 80 उपयोगकर्ता @ सर्वर

    दूरस्थ होस्ट पर सेवाओं का उपयोग करने के लिए इसका उपयोग करें जो केवल वहां उपलब्ध हैं

  • एक दूरस्थ होस्ट पर yourlocalhost से 8888 पर पोर्ट अग्रेषित करें

    ssh -fnN -R8888: localhost: 80 उपयोगकर्ता @ सर्वर

    वेब उपयोगकर्ताओं, या जो कुछ भी आपकी सेवाओं का उपयोग करने की अनुमति देने के लिए इसका उपयोग करें।

चीयर्स! :)


अच्छी टिप्पणी है, लेकिन हम यहां जिस बारे में बात कर रहे हैं उससे संबंधित नहीं है। रिवर्स ssh एक सर्वर के लिए अनुरोध करता है कि वह एक यातायात मार्ग एक यातायात के बंदरगाह का अनुरोध करे। उस ट्रैफ़िक को इंटरनेट तक पहुँचाने के लिए अधिक कॉन्फ़िगरेशन की आवश्यकता होगी। आपको प्रत्येक पोर्ट के लिए एक SSH सुरंग भी स्थापित करनी होगी। और इसे सर्वर से शुरू किया जाना चाहिए, क्लाइंट से नहीं - जो आप कभी भी ऐसा क्यों करेंगे?
बीचहाउस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.