IP पते द्वारा विशिष्ट ग्राहकों तक SSH की पहुंच सीमित करें


22

हम SSH लॉगिन (RSA कुंजी युग्म) के माध्यम से लिनक्स सर्वर में निजी आईपी के कुछ सेट को कैसे प्रवेश करने देते हैं?


3
फ़ायरवॉल नियम कार्रवाई का एक सामान्य कोर्स है
रमन सेललॉप

2
अगर ssh संकलन w / TCP रैपर या / etc / ssh / sshd_config फ़ाइल नियमों को फ़ायरवॉल या /etc/hosts.allow करता है।
रुई एफ रिबेरो

ऐसा करने का एक से अधिक तरीका, linux.die.net/man/5/sshd_config का संदर्भ लें जिसमें सब कुछ समझाया गया है/etc/ssh/sshd_config
ron

जवाबों:


42

आप सीमित कर सकते हैं कि कौन सी मेजबानों को iptables  का उपयोग करके TCP रैपर या फ़िल्टरिंग नेटवर्क ट्रैफ़िक (फ़ायरवॉल) को कॉन्फ़िगर करके कनेक्ट किया जा सकता है । यदि आप क्लाइंट आईपी पते के आधार पर विभिन्न प्रमाणीकरण विधियों का उपयोग करना चाहते हैं, तो इसके बजाय SSH डेमॉन को कॉन्फ़िगर करें (विकल्प 3)।

विकल्प 1: IPTABLES के साथ फ़िल्टरिंग

प्रथम मैच तक, Iptables नियमों का मूल्यांकन किया जाता है।

उदाहरण के लिए, 192.168.0.0/24 नेटवर्क से ट्रैफ़िक को अनुमति देने के लिए और अन्यथा ट्रैफ़िक को ड्रॉप (22 पोर्ट करने के लिए)। DROPअपने iptables डिफ़ॉल्ट पॉलिसी के लिए कॉन्फ़िगर है, तो नियम जरूरी नहीं है DROP

iptables -A INPUT -p tcp --dport 22 --source 192.168.0.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP

अधिक नेटवर्क / होस्ट से मिलान करने के लिए आप ड्रॉप नियम से पहले और नियम जोड़ सकते हैं। यदि आपके पास बहुत सारे नेटवर्क या होस्ट पते हैं, तो आपको ipset मॉड्यूल का उपयोग करना चाहिए । इसमें iprange मॉड्यूल भी है जो किसी भी मनमाने ढंग से IP पते का उपयोग करने की अनुमति देता है।

रिबूट के पार Iptables लगातार नहीं होते हैं। बूट पर iptables को पुनर्स्थापित करने के लिए आपको कुछ तंत्र को कॉन्फ़िगर करने की आवश्यकता है।

iptablesकेवल IPv4 ट्रैफ़िक पर लागू करें। जिन प्रणालियों के पास आईपीवी 6 को सुनने के लिए ssh है वे आवश्यक कॉन्फ़िगरेशन को संबोधित कर सकते हैं ip6tables

विकल्प 2: टीसीपी रैपर का उपयोग करना

आप यह भी कॉन्फ़िगर कर सकते हैं कि कौन से मेजबान टीसीपी रैपर का उपयोग करके कनेक्ट कर सकते हैं। टीसीपी रैपर के साथ, आईपी पते के अलावा आप नियमों में होस्टनाम का भी उपयोग कर सकते हैं।

डिफ़ॉल्ट रूप से, सभी होस्ट को अस्वीकार करें।

/etc/hosts.deny:

sshd : ALL

तब होस्ट होस्टल में मेजबान की अनुमति दी गई सूची। उदाहरण के लिए नेटवर्क 192.168.0.0/24 और लोकलहोस्ट की अनुमति देना ।

/etc/hosts.allow:

sshd : 192.168.0.0/24
sshd : 127.0.0.1
sshd : [::1]

विकल्प 3: SSH डेमॉन कॉन्फ़िगरेशन

आप क्लाइंट पते / होस्टनाम के आधार पर अलग प्रमाणीकरण विधि का उपयोग करने के लिए sshd_config में ssh डेमन को कॉन्फ़िगर कर सकते हैं। यदि आप केवल अन्य होस्ट को कनेक्ट करने से रोकना चाहते हैं, तो आपको इसके बजाय iptables या TCP रैपर का उपयोग करना चाहिए।

पहले डिफ़ॉल्ट प्रमाणीकरण विधियों को निकालें:

PasswordAuthentication no
PubkeyAuthentication no

फिर Match Addressफ़ाइल के अंत में वांछित प्रमाणीकरण विधियों को जोड़ें । Matchफ़ाइल के अंत में रखना महत्वपूर्ण है, क्योंकि सभी कॉन्फ़िगरेशन लाइनों के बाद इसे सशर्त ब्लॉक के अंदर अगली Matchपंक्ति तक रखा जाता है । उदाहरण के लिए:

Match Address 127.0.0.*
    PubkeyAuthentication yes

अन्य क्लाइंट अभी भी कनेक्ट करने में सक्षम हैं, लेकिन लॉगइन विफल हो जाएंगे क्योंकि कोई प्रमाणीकरण विधि उपलब्ध नहीं है।

तर्क और सशर्त कॉन्फ़िगरेशन विकल्पों का मिलान sshd_config मैन पेज में किया जाता है । मैच पैटर्न ssh_config मैन पेज में प्रलेखित हैं ।


/ Etc / ssh / sshd_config में एक ListenAddress निर्देश जोड़ने के बारे में क्या?
जेरोम

यह विशिष्ट स्थितियों में संभव है (उदाहरण के लिए निजी नेटवर्क पते को सुनना), आपके नेटवर्क कॉन्फ़िगरेशन पर निर्भर करता है और जो आपको अनुमति देना चाहता है।
sebasth

2
इसके अतिरिक्त, sshd_config, AlowUsers के निर्देशन के साथ फ़िल्टरिंग सेट कर सकता है और इसके अलावा, अधिकृत_कीप्स को फ़िल्टर करने के लिए 'IP या सबनेट' से भी सेट किया जा सकता है।
tonioc

मेरे उपयोग के मामले के लिए @tonioc महान समाधान। कृपया इस सुझाव का उत्तर में विस्तार करें।
अनुकरण करें

यदि आप 4 बंदरगाहों प्रत्येक एक अलग नेटवर्क के लिए जा रहा है, तो डिफ़ॉल्ट के साथ एक एनआईसी है #ListenAddress ::में /etc/ssh/sshd_configSSH सर्वर बता उन नेटवर्कों में से किसी से भेजे स्वीकार करने के लिए होगा। अन्यथा उन एनआईसी बंदरगाहों में से एक है ListenAddress <ip address>जहां <ip address>आप अनुमति चाहते हैं। मेरे eth0है 192.168.3.4इसलिए ListenAddress 192.168.3.4SSH में परिणाम केवल नेटवर्क 192.168.3.4 जो eth0 पर है पर काम कर रहा; और eth1 eth2 eth3 नकारा है।
रॉन

5

पिछले उत्तर का विस्तार करने के लिए SSH डेमॉन के लिए कुछ अतिरिक्त कॉन्फ़िगरेशन:

  • फ़ाइल AllowUsersमें विकल्प के साथ उपयोगकर्ता फ़िल्टरिंग जोड़ें sshd_config:

    AllowUsers johndoe@192.168.1.* admin2@192.168.1.* otherid1 otherid2
    

    यह अनुमति देता है johndoe और admin2 केवल से 192.168.1.*पते और otherid1 , otherid2 कहीं से भी।

  • .ssh/authorized_keysकिसी दिए गए उपयोगकर्ता के घर निर्देशिका की फ़ाइल में पते के एक सेट के लिए एक ssh कुंजी या ca- आधारित कुंजी को प्रतिबंधित करें :

    from="192.168.1.*,192.168.2.*" ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABA...etc...mnMo7n1DD useralias
    

    इस उदाहरण में, उपयोगकर्ताियाल के लिए सार्वजनिक कुंजी केवल दिए गए पते से प्रभावी होगी।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.