VPN के ज़रिए rsync: डेमन पोर्ट 873 बनाम SSH मोड
पोर्ट 873 एक आंतरिक सेवा है जिसे सुरंग ढोती है, उसका विकल्प नहीं। डेमन मोड को SSH मोड से अलग पहचानें, फिर केवल वही रास्ता खोलें जो आप वास्तव में उपयोग करते हैं।
सुरंग इंटरफ़ेस पर TCP 873 की अनुमति देने से rsync OpenVPN-के ज़रिए नहीं जाता, और इससे दूसरा सिरा मॉड्यूल स्वीकार भी नहीं करता। सुरंग एक आंतरिक कनेक्शन ढोती है जिसके प्रोटोकॉल और गंतव्य के नियम पहले जैसे ही रहते हैं। इसलिए पहला सवाल यह नहीं कि कौन-सा पोर्ट खोलें, बल्कि यह है कि rsync किस तरह का कनेक्शन बनाता है। नीचे सब कुछ मान लेता है कि सुरंग पहले से चालू है और केवल आंतरिक सेवा ही संदेह में है।
तय करें कि rsync वास्तव में कौन-सा कनेक्शन बनाता है
कमांड का रिमोट आर्ग्युमेंट आमतौर पर फ़ायरवॉल में किसी भी बदलाव से पहले उस सवाल का जवाब देता है। दोहरा कोलन या URL स्कीम डेमन चुनता है, जबकि होस्ट नाम के बाद एक अकेला कोलन रिमोट शेल चुनता है। वह आर्ग्युमेंट पढ़ें जो आप वास्तव में चलाते हैं, दस्तावेज़ के उदाहरण वाला नहीं।
स्पष्ट रिमोट-शेल विकल्प जवाब फिर बदल सकता है, क्योंकि वह rsync को बताता है कि परिवहन के लिए कौन-सा प्रोग्राम शुरू करना है। पूरी कमांड लाइन पढ़ें, विरासत में मिली रैपर स्क्रिप्ट सहित, केवल होस्ट वाला हिस्सा नहीं।
| Remote argument | What it opens |
|---|---|
rsync://vault.corp.internal/archive/ | rsync daemon, normally TCP 873 |
vault.corp.internal::archive/ | rsync daemon, normally TCP 873 |
[email protected]:/srv/archive/ | Remote shell, normally SSH on its configured port |
डेमन मोड: बाइंड पता, मॉड्यूल और पोर्ट
डेमन सिंटैक्स में पथ खंड किसी कॉन्फ़िगर किए गए मॉड्यूल का नाम देता है, डिस्क पर की गई डायरेक्टरी का नहीं। मॉड्यूल पासवर्ड की जाँच कनेक्शन स्वीकार होने के बाद ही होती है, और मॉड्यूल अतिरिक्त रूप से केवल-पढ़ने योग्य या सूची से छिपा हो सकता है। त्रुटि पढ़ते समय यह क्रम मायने रखता है, क्योंकि अस्वीकृत कनेक्शन और अस्वीकृत मॉड्यूल दो अलग चरणों की विफलताएँ हैं। दोनों में से कोई संदेश सुरंग के बारे में कुछ नहीं बताता।
एक अलग डेमन को उसकी कॉन्फ़िगरेशन फ़ाइल में सुरंग के पते पर पिन किया जा सकता है, जो उसे बिना किसी फ़ायरवॉल नियम के सार्वजनिक इंटरफ़ेस से दूर रखता है। मान तब मौजूद होना चाहिए जब डेमन बाइंड करता है, और सॉकेट-सक्रिय या inetd-प्रबंधित श्रोता इसे पूरी तरह अनदेखा कर सकता है।
address = 10.44.0.1
port = 873
[archive]
path = /srv/archive
read only = yes
फिर सार्वजनिक नाम के बजाय निजी पते के विरुद्ध परखें। सार्वजनिक होस्ट नाम WAN पते पर हल होता है और अलग रास्ता लेता है, तब भी जब एक ही मशीन दोनों पर जवाब देती है।
rsync --list-only rsync://10.44.0.1/archive/
रिमोट-शेल मोड: SSH स्थानांतरण ढोता है
एक अकेले कोलन के साथ rsync एक रिमोट-शेल प्रोग्राम शुरू करता है और उसी चैनल पर उसका प्रोटोकॉल बोलता है, इसलिए पहुँचने योग्य एकमात्र सेवा SSH है, सर्वर जिस भी पोर्ट पर सुनता हो। rsync डेमन कभी नहीं चलता, पोर्ट 873 अप्रासंगिक है, और पहुँच का निर्णय SSH खाते का निर्णय बन जाता है। रिमोट पथ तब एक वास्तविक फ़ाइल-तंत्र पथ होता है जिसे दूसरे सिरे का शेल व्याख्यायित करता है। इसीलिए 873 को निशाना बनाने वाला फ़ायरवॉल बदलाव इस मोड के लिए कुछ भी नहीं करता।
उस डिज़ाइन के लिए चाहिए एक अधिकृत खाता और होस्ट कुंजी का सत्यापन, और वह SSH की अपनी प्रमाणन नीति विरासत में लेता है। अक्सर यह बेहतर विकल्प होता है जब स्थानांतरण को किसी अविश्वसनीय नेटवर्क से गुज़रना हो, क्योंकि एन्क्रिप्शन उसी प्रोटोकॉल का है जो इसके लिए बना है। पासवर्ड माँगने वाला डेमन वही चीज़ नहीं है।
केवल वही रास्ता खोलें जो आपने चुना
मोड तय होने के बाद, सुरंग ढोने वाले एक ही इंटरफ़ेस पर एक ही आंतरिक सेवा की अनुमति दें। नियम को इंटरफ़ेस, स्रोत पूल और गंतव्य पते से सीमित करें ताकि बाद में डिफ़ॉल्ट-अस्वीकृति का बदलाव उसे चुपचाप चौड़ा न कर सके। फिर नियमों का क्रम देखें, क्योंकि श्रृंखला में पहले आने वाला अनुमति देने वाला नियम संकीर्ण नियम को केवल सजावट बना देता है।
यदि डेमन VPN गेटवे के पीछे की मशीन पर चलता है, गेटवे पर नहीं, तो गेटवे को भी अग्रेषण पथ चाहिए और लक्ष्य को अपनी अनुमति और वापसी मार्ग। केवल गेटवे पर पोर्ट खोलने से ऐसा कनेक्शन बनता है जो स्वीकार होता है और फिर कहीं नहीं जाता।
क्लाइंट से उसी मोड और गंतव्य के साथ जाँचें जिन्हें आप उत्पादन में उपयोग करने की सोच रहे हैं। सफल सूची श्रोता, मार्ग और नियम को साथ-साथ सिद्ध करती है; समय-समाप्ति मार्ग की ओर इशारा करती है, और अस्वीकृति श्रोता की ओर।
ufw allow in on tun0 from 10.44.0.0/24 to 10.44.0.1 port 873 proto tcp
ss -ltnp | grep 873