6 पॉइंट द्वारा GN⁺ 2024-09-20 | 1 टिप्पणियां | WhatsApp पर शेयर करें

SSH tunneling और port forwarding के लिए visual guide

  • सारांश: यह ब्लॉग पोस्ट SSH tunneling और port forwarding को समझने में मदद करने के लिए लिखी गई है। इसमें use case, setup, SSH jump host, local/remote/dynamic port forwarding, और limitations शामिल हैं।
उपयोग के मामले
  • सुरक्षा:

    • FTP जैसे असुरक्षित connections को encrypt करना
    • SSH tunnel के ज़रिए web admin panel तक पहुँच (public key authentication)
    • exposed ports की संख्या कम करना (सिर्फ port 22 expose करना)
  • समस्या समाधान:

    • firewall/content filter को bypass करना
    • दूसरा route चुनना
  • कनेक्टिविटी:

    • NAT के पीछे मौजूद server तक पहुँचना
    • jump host का उपयोग करके internet के ज़रिए internal server तक पहुँचना
    • local port को internet पर expose करना
Port forwarding
  • Setup/तैयारी:
    • local और remote users को ports खोलने की अनुमति चाहिए
    • port 0-1024 के लिए root permission चाहिए
    • client और network firewall को सही तरीके से configure करें
    • SSH server पर port forwarding enabled होना चाहिए: AllowTcpForwarding yes
    • दूसरे interface पर port forward करने के लिए GatewayPorts yes enabled होना चाहिए
SSH jump host / SSH tunnel
  • jump host के ज़रिए connection:

    ssh -J user@REMOTE-MACHINE:22 -p 22 user@10.99.99.1
    
  • कई jump hosts का उपयोग:

    ssh -J user@REMOTE-MACHINE:22,user@ANOTHER-REMOTE-MACHINE:22 -p 22 user@10.99.99.1
    
Local port forwarding
  • उदाहरण 1:

    ssh -L 10.10.10.1:8001:localhost:8000 user@REMOTE-MACHINE
    
  • उदाहरण 2:

    ssh -L 8001:10.99.99.1:8000 user@REMOTE-MACHINE
    
Remote port forwarding
  • उदाहरण 1+2:

    ssh -R 8000:localhost:8001 user@REMOTE-MACHINE
    ssh -R 8000:10.10.10.2:8001 user@REMOTE-MACHINE
    
  • उदाहरण 3:

    ssh -R 10.99.99.2:8000:10.10.10.2:8001 user@REMOTE-MACHINE
    
Dynamic port forwarding
  • SOCKS protocol का उपयोग:
    ssh -D 10.10.10.1:5555 user@REMOTE-MACHINE
    
SSH TUN/TAP tunneling
  • bidirectional TCP tunnel बनाना:
    ssh -w local_tun[:remote_tun]
    
Background में SSH चलाना
  • Background execution:

    ssh -fN -L 8001:127.0.0.1:8000 user@REMOTE-MACHINE
    
  • Background SSH रोकना:

    ps -ef | grep ssh
    kill <PID>
    
SSH connection को बनाए रखना
  • timeout handling:
    • ClientAliveInterval 15
    • ClientAliveCountMax 3
सीमाएँ
  • UDP:

    • SSH reliable delivery की आवश्यकता रखता है, इसलिए UDP supported नहीं है
  • TCP-over-TCP:

    • अतिरिक्त overhead के कारण throughput घटता है और latency बढ़ती है
  • VPN का विकल्प नहीं:

    • SSH tunneling VPN की जगह ले सकती है, लेकिन performance के लिहाज़ से VPN अधिक उपयुक्त है
  • संभावित सुरक्षा जोखिम:

    • जिन features की ज़रूरत न हो, उन्हें disable करना बेहतर है

GN⁺ की संक्षिप्त整理

  • यह लेख SSH tunneling और port forwarding के विभिन्न use case और setup methods समझाता है
  • SSH tunneling secure connection प्रदान करने और firewall bypass करने में उपयोगी है
  • लेकिन यह VPN का पूर्ण विकल्प नहीं है, और इसमें performance degradation जैसी सीमाएँ हैं
  • संबंधित अन्य projects में OpenVPN जैसे VPN solutions शामिल हैं

1 टिप्पणियां

 
GN⁺ 2024-09-20
Hacker News राय
  • 2024 में SSH कमांड सीधे लिखने के बजाय, ~/.ssh/config फ़ाइल का उपयोग करके LocalForward, RemoteForward, ProxyJump सेट करना बेहतर है

    • उदाहरण कॉन्फ़िगरेशन के ज़रिए कई मध्यवर्ती SSH कनेक्शनों से होकर डेटा भेजते समय समय बचाया जा सकता है
    • सेटअप के बाद alias के माध्यम से target-server पर SSH, SCP, RSYNC का उपयोग किया जा सकता है
    • LocalForward और RemoteForward सेटिंग्स के ज़रिए port forwarding आसानी से की जा सकती है
  • जटिल कंपनी वातावरण में SSH tunneling अनिवार्य है

    • बहुत अधिक bureaucracy और waiting time के कारण ज़रूरी access permissions पाने में समय लगता है
    • ssh -D 8888 someserver कमांड का उपयोग करके browser का SOCKS proxy localhost:8888 पर सेट करने से browser traffic उस server के माध्यम से route होता है
  • firewall के पीछे और fixed IP के बिना Linux server या IoT device में SSH access चाहिए तो tunneling service का उपयोग किया जा सकता है

  • सबसे जटिल SSH tunneling hack का अनुभव data center के बीच कनेक्शन में हुआ

    • A से B, और B से C तक डेटा ले जाना था
    • rsync, SSH tunnel, keys, और routing को मिलाकर डेटा सफलतापूर्वक भेजा गया
    • उस समय यह बड़ी उपलब्धि थी, और आज भी वह याद ताज़ा है
  • networking visualization और अधिक होनी चाहिए

    • खासकर low-level connections में traffic visualization की ज़रूरत है
  • TCP-over-TCP में overhead बढ़ता है और latency बढ़ने से performance घट सकती है

    • SSH tunnel में TAP/TUN का उपयोग न करने पर आम तौर पर यह समस्या नहीं होती
    • लेकिन कई channels का उपयोग करने पर performance degradation हो सकता है
  • SSH tunnel शानदार tool है, लेकिन आजकल TLS और reverse proxy features built-in वाले tools का अधिक उपयोग होता है

  • sshuttle tunneling के लिए बेहतर tool है

    • sshuttle -r user@host 10.0.0.0/8 कमांड का उपयोग करके इसे VPN की तरह इस्तेमाल किया जा सकता है
  • 15 साल पहले विश्वविद्यालय नेटवर्क के firewall को bypass करने के लिए SSH tunnel का उपयोग शुरू किया था

    • default port को 443 में बदलकर इस्तेमाल किया गया
    • तब से firewall bypass के अलावा भी कई तरह से उपयोग कर रहे हैं
  • यह जानने की जिज्ञासा है कि क्या SSH में खुद redirect feature है

    • अगर A, B पर SSH से कनेक्ट करने की कोशिश करे, तो क्या B यह निर्देश दे सकता है कि C से कनेक्ट करो, और A पारदर्शी रूप से सीधे C से कनेक्ट हो जाए
    • तब B अब महत्वपूर्ण data path का हिस्सा नहीं रहेगा
    • ऐसी कोई सुविधा मौजूद है या नहीं, यही जानना है