IPTables आने वाले SSH कनेक्शन की अनुमति देने का नियम है


11

इस स्क्रिप्ट का उद्देश्य केवल लोकलहोस्ट </> लोकलहोस्ट और आने वाले एसएसएच ट्रैफ़िक को छोड़कर वीपीएन पर ट्रैफ़िक की अनुमति देना है। लेकिन जब मैं SSH पर स्क्रिप्ट चलाता हूं तो मुझे डिस्कनेक्ट कर दिया जाता है और वीएम को फिर से शुरू करने के लिए मजबूर किया जाता है। मेरी स्क्रिप्ट में क्या गलत है?

#!/bin/bash
iptables -F

#Allow over VPN
iptables -A INPUT -i tun+ -j ACCEPT
iptables -A OUTPUT -o tun+ -j ACCEPT

#Localhost
iptables -A INPUT -s 127.0.0.1/8 -j ACCEPT
iptables -A OUTPUT -d 127.0.0.1/8 -j ACCEPT

#VPN
iptables -A INPUT -s 123.123.123.123 -j ACCEPT
iptables -A OUTPUT -d 123.123.123.123 -j ACCEPT

#SSH
iptables -A INPUT -p tcp --dport ssh -j ACCEPT

#Default Deny
iptables -A INPUT -j DROP
iptables -A OUTPUT -j DROP

जवाबों:


10

किसी भी पैकेट के बाहर जाने के लिए आउटपुट चेन जिम्मेदार है।

आपकी स्क्रिप्ट केवल आउटबाउंड पैकेट को सुरंग इंटरफ़ेस, लोकलहोस्ट और रिमोट होस्ट को 123.123.123.123 पर अनुमति देती है।

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

अपने SSH डेमॉन से SSH क्लाइंट को आउटबाउंड पैकेट की अनुमति देने के लिए आपको निम्नलिखित नियम जोड़ने होंगे:

iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT

यदि आप केवल एक ही स्थान से जुड़ रहे हैं, तो आप उपरोक्त नियम में गंतव्य आईपी मानदंड भी जोड़ना चाह सकते हैं। आउटपुट श्रृंखला के लिए इस नियम को अंतिम 'DROP कुछ और' नियम से पहले आना चाहिए।


+1 यह काम करेगा और एक स्थापित, संबंधित नियम का उपयोग करने की तुलना में अधिक विशिष्ट है (इसे संदर्भ के आधार पर अधिक या कम उपयोगी बनाता है)।
गोल्डीलॉक्स

दोनों महान जवाब, मैंने बहुत कुछ सीखा है! मैंने @SkyDan उत्तर का परीक्षण किया और यह अच्छी तरह से काम करता है!
स्टीवन

नाइटपिक: फॉरवर्ड किए गए पैकेट के लिए आउटपुट चेन जिम्मेदार नहीं है।
ब्योर्न लिंडक्विस्ट

13

आपका #SSHनियम तात्पर्य है कि ssh संचार का एक तरीका है, जो यह नहीं है। डेटा को आगे और पीछे भेजा जा रहा है ।

इससे निपटने का सामान्य तरीका, चूंकि आप ग्राहक की ओर से पहले से पोर्ट नंबर नहीं जान सकते हैं, इसलिए उन कनेक्शनों को अनुमति देना है, जिन्हें स्थापित कनेक्शन के लिए "स्थापित" या "संबंधित" माना जाता है । ऐसा करने के लिए आपको चाहिए:

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

आपके DROPनियमों से पहले (और अधिमानतः शीर्ष पर, चूंकि नियमों को क्रम में संसाधित किया जाता है और ये दोनों अधिकांश पैकेटों पर लागू होंगे)।

टीसीपी कनेक्शन यहां कैसे स्थापित हो जाता है , इसकी व्याख्या है ; अनिवार्य रूप से, आपके #SSH INPUTनियम द्वारा अनुमत पैकेट पर सर्वर का उत्तर देने का तथ्य ऐसा करता है।


1
यह काम नहीं करेगा। स्थापित साधनों में दिए गए टीसीपी कनेक्शन के लिए दोनों दिशाओं में पैकेट देखे गए हैं। यदि आप केवल इस नियम को जोड़ते हैं, तो पहला आउटबाउंड पैकेट अभी भी अवरुद्ध होगा।
नरकोदनीलो

2
@SkyDan यहाँ इसके लिए एक संदर्भ है । आरेख पर ध्यान दें कि जब सर्वर शुरुआती सिंक प्राप्त करने के बाद क्लाइंट को एक syn / ack वापस भेजता है, तो कनेक्शन स्थापित किया जाता है जिसका अर्थ है कि iptables उस उत्तर को पैकेट के माध्यम से देगा: "एक बार जब उसने एक पैकेट (SYN) को देखा है, तो वह वापस आ जाता है। कनेक्शन को नया के रूप में। एक बार जब यह रिटर्न पैकेट (SYN / ACK) देखता है, तो यह कनेक्शन को स्थापित माना जाता है। " -> फिर से: iptables रिटर्न पैकेट को देखता है जो सर्वर भेजना चाहता है, कनेक्शन को स्थापित के रूप में सेट करता है, और इसके माध्यम से उत्तर देता है।
गोल्डीलॉक्स

1
ठीक है, मैं देखता हूं कि यह क्यों काम करेगा। यह थोड़ा अस्पष्ट है, क्योंकि iptables आदमी केवल दोनों दिशाओं में पैकेट को देखने के बारे में बात करता है, टीसीपी हैंडशेक पैकेट के बारे में एक शब्द नहीं, एक अपवाद है। संदर्भ के लिए धन्यवाद!
नरकोदनीलो

2
@SkyDan वास्तव में, तर्क केवल tcp पर लागू नहीं होता है - मैं -p tcpइस अर्थ में कोई फर्क करने के बारे में गलत था , और उस पृष्ठ पर UDP के लिए बाद के स्पष्टीकरण को देखें (यह वही है)। मुद्दा यह है कि सर्वर यह जाने बिना कि क्या iptables इसकी अनुमति देगा या नहीं, और जब स्थानीय सिस्टम पर सर्वर से उस उत्तर को प्राप्त होता है , तो वह अब दोनों दिशाओं में ट्रैफ़िक देख चुका होता है (ग्राहक के पास अभी तक नहीं है), विचार करता है। कनेक्शन स्थापित है, और उत्तर को बाहर करने देता है। यहां "तकनीकीता" दोनों पक्षों के मध्य में फ़ायरवॉल पर टिका है ।
गोल्डीलॉक्स

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