यह सुनिश्चित करने के लिए कि एसएसएच पोर्ट केवल एक विशिष्ट आईपी पते के लिए खुला है?


42

यह मेरा है /etc/sysconfig/iptables:

इसके दो बंदरगाह खुले हैं 80 अपाचे और 22 एसश के लिए।

# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

पोर्ट 22 (एसएसएच) के लिए मैं यह सुनिश्चित करना चाहता हूं कि कोई भी विशिष्ट आईपी पते के अलावा इस पोर्ट से कनेक्ट न हो।

उदाहरण आईपी:

1.2.3.4

यदि मेरा आईपी बदलता है और मैं अपने सर्वर पर एसएसएच को और अधिक नहीं कर सकता हूं, तो इस बारे में किसी भी निगरानी / चिंताओं की अवहेलना करें।

जवाबों:


47

यदि मुझे सही तरीके से प्रश्न मिलता है, तो आप चाहते हैं कि आपका सर्वर केवल विशिष्ट आईपी पते से पोर्ट 22 पर ही पहुंच सके, इसके लिए आप Iptables को अपडेट कर सकते हैं:

iptables -A INPUT -p tcp -s YourIP --dport 22 -j ACCEPT

उस स्थिति में, यदि आप अपने आंतरिक नेटवर्क के लिए डीएनएस खोलने की जरूरत है, तो आप केवल एसआईपी पोर्ट खोल रहे हैं।

iptables -A INPUT -p udp -s YourIP --dport 53 -j ACCEPT
iptables -A INPUT -p tcp -s YourIP --dport 53 -j ACCEPT

एक बार जब आप उन्हें उन आईपी के लिए जोड़ और खोल देते हैं, तो आपको बाकी आईपी के लिए दरवाजा बंद करने की आवश्यकता होती है

iptables -A INPUT -p tcp -s 0.0.0.0/0 --dport 22 -j DROP
iptables -A INPUT -p udp -s 0.0.0.0/0 --dport 53 -j DROP
iptables -A INPUT -p tcp -s 0.0.0.0/0 --dport 53 -j DROP

(नियमों को अपने नियमों में सही स्थिति में सेट करना सुनिश्चित करें । वर्तमान iptables -A INPUTमें नियमों को उसी के अंत में जोड़ देगा INPUT।)

या जैसा कि joel ने कहा कि आप इसके बजाय एक नियम जोड़ सकते हैं:

iptables -A INPUT -p tcp ! -s <permittedIP> -j DROP

या आप बस फ़ायरवॉल पर डिफ़ॉल्ट नीति सेट कर सकते हैं

iptables -P INPUT DROP

संक्षेप में, एसओ पर इस प्रश्न में प्रस्तुत किया गया है :

iptables -A INPUT -p tcp --dport 22 -s YourIP -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP

2
यह भी ध्यान देने योग्य है कि iptablesयदि आप लक्षित करना चाहते हैं तो धमाके के संचालक के साथ उलटा समर्थन करता है DROP। उदाहरण:iptables -I INPUT -p tcp ! -s <permittedIP> -j DROP
ब्राचली

1
इसके अलावा, बिना शर्त के DROPआपको वास्तव में ज़रूरत नहीं है कि आप फ़ायरवॉल पर डिफ़ॉल्ट नीति को इसके साथ सेट कर सकें iptables -P INPUT DROPऔर इसे उस पर जाने दें। आप शायद उन्हें एक परिशिष्ट के रूप में भी करना चाहते हैं यदि उन्हें इस तरह से करें अन्यथा सभी ट्रैफ़िक को पकड़ लिया जाएगा DROPऔर कभी भी आपके ACCEPTशासन तक नहीं पहुंचेंगे ।
ब्राचली

1
यह मेरे लिए काम नहीं किया क्योंकि -I (इंसर्ट) के लिए डिफ़ॉल्ट को # 1 नियम के रूप में सम्मिलित करना है, इसलिए DROP को नियम # 1 के रूप में डाला जाता है और पहले मूल्यांकन किया जाता है और इसलिए सभी ssh पैकेट को गिराता है, कभी ACCEPT नियम का मूल्यांकन नहीं करता है। आपको INPUT के बाद "3" को निष्पादित करना होगा iptables -I INPUT 3 -p tcp -s 0.0.0.0/0 --dport 22 -j DROPऔर iptables -I INPUT 3 -p udp -s 0.0.0.0/0 --dport 53 -j DROPइसका मतलब INPUT नियम # 3 के रूप में सम्मिलित करना होगा (यह मानते हुए कि आप दो ACCEPTS सम्मिलित कर रहे हैं, अन्यथा यदि केवल एक ACCEPT है तो INPUT के लिए "2" का उपयोग करें।
केविन ट्रिपल जूल

@ नेटवर्कर का उपयोग -Iशीर्ष पर नए iptables नियमों को सम्मिलित करेगा। जैसे कि आप अपनी अनुमति से पहले अपने ड्रॉप को समाप्त कर सकते हैं। मैं -Aइसके बजाय का उपयोग करने का सुझाव देता हूं
BlueCacti

1
अच्छी तरह से मैं अपने आप को बंद कर लिया,
जीजे

6

यद्यपि मैं SSH कुंजी का उपयोग करने की सलाह देता हूं, मैं आपको स्पष्टीकरण दूंगा।

आप जो हासिल करने की कोशिश कर रहे हैं, उसके लिए IPtables का उपयोग करने की आवश्यकता नहीं है, कई तरीके हैं। यह IPtables तरीका है:

iptables -I INPUT -s [YOUR_HOME_IP] -p tcp -m tcp --dport [SSH_PORT] -j ACCEPT

[YOUR_HOME_IP] = आपका घर आईपी (बहुत सीधा)

[SSH_PORT] = जिस पोर्ट पर आप SSH चलाते हैं (डिफ़ॉल्ट रूप से 22)

iptables -I INPUT -p tcp -m tcp --dport [SSH_PORT] -j REJECT

यह सुनिश्चित करता है कि आपके IP को छोड़कर कोई भी SSH में लॉग इन नहीं कर सकता है।

एक और तरीका है, जो कुछ को जोड़कर है sshd_config

निम्नलिखित जोड़ें:

AllowUsers root@[YOUR_HOME_IP]
PermitRootLogin without-password

यह आपको rootपासवर्ड मांगे बिना आपके IP से उपयोगकर्ता के रूप में SSH में लॉग इन करने की अनुमति देता है ।

कृपया ध्यान रखें कि एक क्रोनजॉब के साथ

iptables -X
iptables -F

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


क्रोनजॉब सिर्फ फायरवॉल को हटा देगा। iptablesपहली जगह में क्यों स्थापित ? बैंड एक्सेस से बाहर का कुछ रूप सामान्य तरीका है। knockdदूसरा है।
मैट

@mtm हां, जब आप बाहर लॉक हो जाते हैं तो क्रोनजॉब आपके IPtables सेटअप को रीसेट कर देगा जिससे आप SSH को फिर से एक्सेस कर पाएंगे। लोग जिन कारणों से IPtables का उपयोग करते हैं वे भिन्न हैं, मेरा विचार है कि यह एक प्रभावी, सरल और लचीला फ़ायरवॉल है।
विलियम एडवर्ड्स

2
oic। आप नियमित रूप से निर्धारित नहीं, सेटअप समय पर एक बार फ्लश चलाते हैं। atक्या वो।
मैट

4
केवल आपके आईपी को श्वेतसूची में रखना और फिर पासवर्ड के बिना रूट लॉगिन की अनुमति देना एक भयानक विचार जैसा लगता है।
एलेक्स डब्ल्यू '’

1
@AlexW मुझे पता है कि यह एक समय हो गया है, लेकिन मैं अभी भी टिप्पणी करना चाहता था: Without-Passwordइसका मतलब है कि पासवर्ड प्रमाणीकरण की अनुमति नहीं है, इसलिए आपको इसके बजाय SSH कुंजी प्रमाणीकरण का उपयोग करना होगा। यह वास्तव में इस प्रमाणीकरण विधि के लिए एक अस्पष्ट नामकरण का एक सा है। लेकिन इसका मतलब यह नहीं है कि आपको रूट के रूप में लॉगिन करने के लिए पासवर्ड की आवश्यकता नहीं है। फिर भी, एक अधिक सुरक्षित विधि PermitRootLogin noलॉगिन करने के लिए एक अलग sudo खाते को सेट करने और उपयोग करने के लिए है, क्योंकि रूट एक सामान्य लक्ष्य है
BlueCacti

5

अन्य उत्तर iptables -Iउनके उदाहरणों में उपयोग कर रहे हैं, जो अक्सर वह नहीं है जो आपको उपयोग करना चाहिए।

iptables पहले नियम को निष्पादित करेगा जो मेल खाता है, इसलिए नियमों का क्रम बहुत महत्वपूर्ण है। -I"इन्सर्ट" कमांड है, और यह निर्दिष्ट करने के लिए इंडेक्स पैरामीटर के साथ उपयोग किया जाना चाहिए कि सूची में कोई नियम कहां है। -A"परिशिष्ट" कमांड है, जो सूची के अंत में नियम जोड़ देगा।

-Iइंडेक्स पैरामीटर के बिना उपयोग करने वाले कुछ विकृतियों में (शायद सभी) नियम को एक इंडेक्स में जोड़ देगा, जिससे यह पहला नियम चेक हो जाएगा। इस परिदृश्य में यदि आपके द्वारा चलाया जाने वाला अंतिम कमांड है, iptables -I INPUT -s tcp 0.0.0.0/0 -j DROPतो iptables सभी ट्रैफ़िक को छोड़ देगा, भले ही आपके पास ACCEPTचेन में बाद में कोई नियम हो या न हो ।

यहाँ एक नियम स्थापित करने का एक नमूना है जो केवल SSH को एक ही IP से अनुमति देता है:

नियमों के बिना शुरू करना:

#> iptables -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

एक नया "1.2.3.4 से SSH की अनुमति दें" नियम जोड़ें:

#>iptables -A INPUT -p tcp -s 1.2.3.4 --dport 22 -j ACCEPT

अन्य सभी IP से SSH को ब्लॉक करें:

#>iptables -A INPUT -p tcp -s 0.0.0.0/0 --dport 22 -j DROP

अब आपकी INPUT श्रृंखला इस तरह दिखाई देगी:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  1.2.3.4              0.0.0.0/0            tcp dpt:22
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22

बाद में, यदि आपको एक दूसरे आईपी को श्वेत सूची में लाने की आवश्यकता है तो आप -Iइसे ब्लैकलिस्ट नियम से पहले रखने के लिए पैरामीटर का उपयोग कर सकते हैं ।

#>iptables -I INPUT 2 -p tcp -s 4.3.2.1 --dport 22 -j ACCEPT

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  1.2.3.4              0.0.0.0/0            tcp dpt:22
ACCEPT     tcp  --  4.3.2.1              0.0.0.0/0            tcp dpt:22
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22

ध्यान दें कि -I INPUT 2नए नियम को नियम संख्या 2 के रूप में जोड़ा गया है और DROP नियम को संख्या 3 से टकराया है।

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