व्यक्तिगत पहुँच के लिए I2P के पीछे ssh सर्वर कैसे सेट अप करें
यह मार्गदर्शिका बताती है कि I2P tunnel को कैसे सेट अप और समायोजित किया जाए ताकि आप I2P या i2pd में से किसी का उपयोग करके किसी SSH सर्वर तक दूरस्थ रूप से पहुंच सकें। फिलहाल, यह मानता है कि आप अपना SSH सर्वर पैकेज मैनेजर से इंस्टॉल करेंगे और वह एक सेवा के रूप में चल रहा होगा।
विचारणीय बातें: इस मार्गदर्शिका में, मैं कुछ धारणाएँ मानकर चल रहा हूँ। आपकी विशिष्ट सेटअप में उत्पन्न होने वाली जटिलताओं के आधार पर इन्हें समायोजित करने की आवश्यकता होगी, खासकर यदि आप आइसोलेशन के लिए VMs (वर्चुअल मशीनें) या containers (कंटेनर) का उपयोग करते हैं। यह मानकर चला गया है कि I2P router और ssh server एक ही localhost पर चल रहे हैं। आपको नए-निर्मित SSH host keys का उपयोग करना चाहिए, या तो नए सिरे से इंस्टॉल किए गए sshd का उपयोग करके, या पुरानी keys को हटाकर और उनका पुनर्जनन करवाकर। उदाहरण के लिए:
sudo service openssh stop
sudo rm -f /etc/ssh/ssh_host_*
sudo ssh-keygen -N "" -t rsa -f /etc/ssh/ssh_host_rsa_key
sudo ssh-keygen -N "" -t dsa -f /etc/ssh/ssh_host_dsa_key
sudo ssh-keygen -N "" -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
sudo ssh-keygen -N "" -t ed25519 -f /etc/ssh/ssh_host_ed25519_key
Step One: Set up I2P tunnel for SSH Server
Using Java I2P
java I2P के वेब इंटरफ़ेस का उपयोग करके, Hidden Services Manager पर जाएँ और tunnel विज़ार्ड शुरू करें।
Tunnel Wizard
चूँकि आप इस tunnel को SSH सर्वर के लिए सेट कर रहे हैं, इसलिए आपको “Server” tunnel प्रकार चुनना होगा।
स्क्रीनशॉट प्लेसहोल्डर: विज़ार्ड का उपयोग करके “Server” tunnel बनाएँ
आपको इसे बाद में सूक्ष्म-समायोजित करना चाहिए, लेकिन शुरुआत के लिए Standard tunnel प्रकार सबसे आसान है।
स्क्रीनशॉट प्लेसहोल्डर: “Standard” प्रकार का
इसे एक अच्छा विवरण दें:
केवल अनुवाद ही प्रदान करें, और कुछ नहीं:
स्क्रीनशॉट प्लेसहोल्डर: यह किस उद्देश्य के लिए है, इसका वर्णन करें
और उसे बताएं कि SSH सर्वर कहाँ उपलब्ध होगा।
स्क्रीनशॉट प्लेसहोल्डर: इसे अपने SSH सर्वर के भविष्य के स्थान की ओर इंगित करें
परिणामों की समीक्षा करें, और अपनी सेटिंग्स सहेजें।
स्क्रीनशॉट स्थानधारक: सेटिंग्स सहेजें।
Advanced Settings
अब वापस Hidden Services Manager (हिडन सर्विसेज़ मैनेजर) पर जाएँ, और उपलब्ध उन्नत सेटिंग्स की समीक्षा करें। एक चीज़ जिसे आप निश्चित रूप से बदलना चाहेंगे, वह है इसे बल्क कनेक्शनों की बजाय इंटरैक्टिव कनेक्शनों के लिए कॉन्फ़िगर करना।
स्क्रीनशॉट प्लेसहोल्डर: इंटरैक्टिव कनेक्शनों के लिए अपना tunnel कॉन्फ़िगर करें
इसके अलावा, अपने SSH server तक पहुँचते समय प्रदर्शन पर इन अन्य विकल्पों का असर पड़ सकता है। यदि आप अपनी अनामता को लेकर उतने चिंतित नहीं हैं, तो आप अपने मार्ग में hops (नेटवर्क में मध्यवर्ती नोड्स) की संख्या कम कर सकते हैं। यदि गति में समस्या हो, तो tunnel की संख्या बढ़ाना मदद कर सकता है। कुछ बैकअप tunnels रखना शायद अच्छा विचार है। आपको थोड़ा-सा समायोजन करना पड़ सकता है।
स्क्रीनशॉट प्लेसहोल्डर: यदि आप गुमनामी को लेकर चिंतित नहीं हैं, तो tunnel length (टनल की लंबाई) कम करें।
अंत में, ताकि आपकी सभी सेटिंग्स प्रभावी हो जाएँ, tunnel को पुनः आरंभ करें।
एक और दिलचस्प सेटिंग, खासकर यदि आप अधिक संख्या में tunnels चलाना चुनते हैं, “Reduce on Idle” है, जो तब चल रही tunnels की संख्या को कम कर देगी जब सर्वर लंबे समय तक निष्क्रिय रहा हो।
स्क्रीनशॉट प्लेसहोल्डर: निष्क्रिय होने पर कम करें, यदि आपने tunnels की संख्या अधिक चुनी है
Using i2pd
i2pd के साथ, सभी कॉन्फ़िगरेशन वेब इंटरफ़ेस के बजाय फ़ाइलों के माध्यम से की जाती है। i2pd के लिए SSH सेवा tunnel को कॉन्फ़िगर करने के लिए, निम्नलिखित उदाहरण सेटिंग्स को अपनी गोपनीयता और प्रदर्शन आवश्यकताओं के अनुसार समायोजित करें और उन्हें tunnels.conf में कॉपी करें।
[SSH-SERVER]
type = server
host = 127.0.0.1
port = 22
inbound.length = 1
outbound.length = 1
inbound.quantity = 5
outbound.quantity = 5
i2cp.reduceOnIdle = true
keys = ssh-in.dat
Restart your I2P router
चरण एक: SSH सर्वर के लिए I2P tunnel कॉन्फ़िगर करें
आप अपने SSH सर्वर तक किस तरह पहुँचना चाहते हैं, इस पर निर्भर करते हुए, आप सेटिंग्स में कुछ बदलाव करना चाहेंगे। सभी SSH सर्वर्स(Public-Key Authentication, root के रूप में लॉगिन न करना, आदि) पर किए जाने वाले स्पष्ट SSH हार्डनिंग उपायों के अलावा, यदि आप नहीं चाहते कि आपका SSH सर्वर आपके server tunnel के अलावा किसी भी पते पर listen करे, तो आपको AddressFamily को inet और ListenAddress को 127.0.0.1 पर बदलना चाहिए।
AddressFamily inet
ListenAddress 127.0.0.1
यदि आप अपने SSH सर्वर के लिए 22 के अलावा कोई पोर्ट चुनते हैं, तो आपको अपनी I2P tunnel कॉन्फ़िगरेशन में पोर्ट बदलना होगा।
Step Three: Set up I2P tunnel for SSH Client
अपने क्लाइंट कनेक्शन को कॉन्फ़िगर करने के लिए, आपको SSH सर्वर की I2P router कंसोल देखने में सक्षम होना होगा। इस सेटअप की एक अच्छी बात यह है कि I2P tunnel से प्रारंभिक कनेक्शन प्रमाणित होता है, जिससे SSH सर्वर से आपके प्रारंभिक कनेक्शन के MITM (Man-in-the-Middle) हमले का शिकार बनने का जोखिम कुछ हद तक कम हो जाता है, जैसा कि Trust-On-First-Use (पहली बार उपयोग पर भरोसा) परिदृश्यों में जोखिम होता है।
Java I2P का उपयोग
Tunnel विज़ार्ड
सबसे पहले, Hidden Services Manager से tunnel कॉन्फ़िगरेशन विज़ार्ड शुरू करें और एक क्लाइंट tunnel चुनें.
स्क्रीनशॉट प्लेसहोल्डर: क्लाइंट tunnel बनाने के लिए विज़ार्ड का उपयोग करें
अब, मानक tunnel प्रकार चुनें। आप बाद में इस विन्यास का सूक्ष्म-समायोजन करेंगे।
स्क्रीनशॉट प्लेसहोल्डर: मानक प्रकार का
इसका एक अच्छा विवरण दें।
स्क्रीनशॉट प्लेसहोल्डर: इसे एक अच्छा विवरण दें
यह थोड़ा-सा पेचीदा हिस्सा है। I2P router console के hidden services manager पर जाएँ और SSH server tunnel के base64 “local destination” को ढूँढें। आपको यह जानकारी अगले चरण में कॉपी करने का कोई तरीका ढूँढना होगा। मैं आमतौर पर इसे खुद को Tox के जरिए भेज देता हूँ, अधिकांश लोगों के लिए कोई भी off-the-record (निजी) तरीका पर्याप्त होना चाहिए।
स्क्रीनशॉट प्लेसहोल्डर: जिस Destination (I2P पहचान/पता) से आप कनेक्ट करना चाहते हैं, उसे खोजें
जब आप वह base64 destination ढूंढ लें, जिससे आप कनेक्ट करना चाहते हैं और जो आपके क्लाइंट डिवाइस पर भेजा गया है, तब उसे client destination field में पेस्ट करें।
स्क्रीनशॉट स्थानधारक: गंतव्य निर्धारित करें
अंत में, एक लोकल पोर्ट सेट करें जिससे आपका SSH client कनेक्ट होगा। यह लोकल पोर्ट base64 destination (Base64-एन्कोड किया हुआ डेस्टिनेशन) से जुड़ा होगा और इस प्रकार SSH सर्वर से भी।
स्क्रीनशॉट प्लेसहोल्डर: एक स्थानीय पोर्ट चुनें
तय करें कि आप इसे स्वतः प्रारंभ करना चाहते हैं या नहीं।
स्क्रीनशॉट प्लेसहोल्डर: तय करें कि आप इसे autostart (स्वतः प्रारंभ) करना चाहते हैं या नहीं
उन्नत सेटिंग्स
पहले की तरह, आप सेटिंग्स को इंटरैक्टिव कनेक्शनों के लिए अनुकूलित करने के लिए बदलना चाहेंगे। इसके अतिरिक्त, यदि आप सर्वर पर client whiteliting (क्लाइंट को स्वीकृत सूची तक सीमित करना) सेट करना चाहते हैं, तो आपको “Generate key to enable persistent client tunnel identity” रेडियल बटन को चुनना चाहिए।
स्क्रीनशॉट प्लेसहोल्डर: इसे इंटरैक्टिव बनाने के लिए कॉन्फ़िगर करें
Using i2pd
आप अपने tunnels.conf में निम्नलिखित पंक्तियाँ जोड़कर इसे कॉन्फ़िगर कर सकते हैं और अपनी प्रदर्शन/गुमनामी आवश्यकताओं के अनुसार समायोजित कर सकते हैं।
[SSH-CLIENT]
type = client
host = 127.0.0.1
port = 7622
inbound.length = 1
outbound.length = 1
inbound.quantity = 5
outbound.quantity = 5
i2cp.dontPublishLeaseSet = true
destination = thisshouldbethebase32ofthesshservertunnelabovebefore.b32.i2p
keys = ssh-in.dat
Restart the I2P router on the client
Step Four: Set up SSH client
I2P पर अपने सर्वर से जुड़ने के लिए SSH क्लाइंट सेटअप करने के कई तरीके हैं, लेकिन गुमनाम उपयोग के लिए अपने SSH क्लाइंट को सुरक्षित करने हेतु कुछ बातों का ध्यान रखना चाहिए। सबसे पहले, इसे इस तरह कॉन्फ़िगर करें कि वह SSH सर्वर के सामने अपनी पहचान केवल एक ही, विशिष्ट कुंजी से करे, ताकि आपकी गुमनाम और गैर‑गुमनाम SSH कनेक्शनों के बीच कोई अनचाहा संबंध न बन पाए।
सुनिश्चित करें कि आपके $HOME/.ssh/config में निम्नलिखित पंक्तियाँ शामिल हों:
IdentitiesOnly yes
Host 127.0.0.1
IdentityFile ~/.ssh/login_id_ed25519
वैकल्पिक रूप से, आप अपने विकल्पों को लागू करने और I2P से स्वचालित रूप से कनेक्ट होने के लिए एक .bash_alias प्रविष्टि बना सकते हैं। आप समझ गए होंगे, आपको IdentitiesOnly को अनिवार्य करना है और एक पहचान फ़ाइल प्रदान करनी है।
i2pssh() {
ssh -o IdentitiesOnly=yes -o IdentityFile=~/.ssh/login_id_ed25519 serveruser@127.0.0.1:7622
}
Step Five: Whitelist only the client tunnel
यह कमोबेश वैकल्पिक है, लेकिन काफ़ी अच्छा है और यह किसी भी व्यक्ति को, जो संयोग से आपके गंतव्य पर पहुँच जाए, यह पता लगाने से रोक देगा कि आप SSH सेवा होस्ट कर रहे हैं।
सबसे पहले, स्थायी क्लाइंट tunnel destination को प्राप्त करें और उसे सर्वर को प्रेषित करें।
स्क्रीनशॉट प्लेसहोल्डर: क्लाइंट डेस्टिनेशन प्राप्त करें
क्लाइंट के base64 destination (गंतव्य पहचान) को सर्वर की destination whitelist में जोड़ें। अब आप केवल उसी विशिष्ट client tunnel के माध्यम से server tunnel से जुड़ पाएंगे और कोई अन्य उस destination से जुड़ नहीं सकेगा।
स्क्रीनशॉट प्लेसहोल्डर: और इसे सर्वर की श्वेतसूची में पेस्ट करें
परस्पर प्रमाणीकरण ही सबसे बढ़िया.
नोट: मूल पोस्ट में संदर्भित छवियाँ /static/images/ निर्देशिका में जोड़ी जानी चाहिए: - server.webp, standard.webp, describe.webp, hostport.webp, approve.webp - interactive.webp, anonlevel.webp, idlereduce.webp - client.webp, clientstandard.webp, clientdescribe.webp - finddestination.webp, fixdestination.webp, clientport.webp, clientautostart.webp - clientinteractive.webp, whitelistclient.webp, whitelistserver.webp