मुखपृष्ठ » कैसे » बिगिनर गाइड टू आईपीटैबल्स, लिनक्स फ़ायरवॉल

    बिगिनर गाइड टू आईपीटैबल्स, लिनक्स फ़ायरवॉल

    Iptables लिनक्स ऑपरेटिंग सिस्टम के लिए निर्मित एक अत्यंत लचीला फ़ायरवॉल उपयोगिता है। चाहे आप एक नौसिखिया लिनक्स geek या एक सिस्टम व्यवस्थापक हों, वहाँ शायद कुछ तरीका है कि iptables आप के लिए एक महान उपयोग हो सकता है। आगे पढ़ें कि कैसे हम आपको दिखाते हैं कि सबसे बहुमुखी लिनक्स फ़ायरवॉल को कैसे कॉन्फ़िगर किया जाए.

    के द्वारा तस्वीर ezioman.

    Iptables के बारे में

    iptables एक कमांड-लाइन फ़ायरवॉल उपयोगिता है जो ट्रैफ़िक को अनुमति देने या अवरुद्ध करने के लिए नीति श्रृंखलाओं का उपयोग करती है। जब कोई कनेक्शन आपके सिस्टम पर खुद को स्थापित करने की कोशिश करता है, तो iptables इसे मैच करने के लिए अपनी सूची में एक नियम की तलाश करता है। यदि यह एक नहीं मिलता है, तो यह डिफ़ॉल्ट कार्रवाई का समर्थन करता है.

    iptables लगभग हमेशा किसी भी लिनक्स वितरण पर पहले से इंस्टॉल आता है। इसे अद्यतन / स्थापित करने के लिए, बस iptables पैकेज पुनः प्राप्त करें:

    sudo apt-get install iptables

    Firestarter की तरह iptables के लिए GUI विकल्प हैं, लेकिन iptables वास्तव में इतना कठिन नहीं है कि एक बार आपके पास कुछ कमांड हो। आप iptables नियमों को कॉन्फ़िगर करते समय बेहद सावधान रहना चाहते हैं, खासकर यदि आप SSH'd एक सर्वर में हैं, क्योंकि एक गलत आदेश आपको स्थायी रूप से तब तक लॉक कर सकता है जब तक कि यह भौतिक मशीन पर मैन्युअल रूप से तय न हो जाए।.

    जंजीरों के प्रकार

    iptables तीन अलग-अलग श्रृंखलाओं का उपयोग करता है: इनपुट, फॉरवर्ड और आउटपुट.

    इनपुट - इस श्रृंखला का उपयोग आने वाले कनेक्शन के लिए व्यवहार को नियंत्रित करने के लिए किया जाता है। उदाहरण के लिए, यदि कोई उपयोगकर्ता आपके पीसी / सर्वर में SSH के लिए प्रयास करता है, तो iptables इनपुट श्रृंखला में एक नियम में आईपी पते और पोर्ट से मेल खाने का प्रयास करेगा.

    आगे - इस श्रृंखला का उपयोग आने वाले कनेक्शनों के लिए किया जाता है जो वास्तव में स्थानीय स्तर पर वितरित नहीं किए जा रहे हैं। एक राउटर के बारे में सोचो - डेटा हमेशा इसे भेजा जा रहा है लेकिन शायद ही कभी राउटर के लिए ही किस्मत में होता है; डेटा सिर्फ अपने लक्ष्य के लिए अग्रेषित किया गया है। जब तक आप अपने सिस्टम पर किसी प्रकार की रूटिंग, नेटिंग, या कुछ और कर रहे हैं, जिसे अग्रेषण की आवश्यकता है, तो आप इस श्रृंखला का उपयोग नहीं करेंगे.

    यह सुनिश्चित करने का एक निश्चित तरीका है कि आपका सिस्टम आगे की श्रृंखला का उपयोग करता है या नहीं.

    iptables -L -v

    ऊपर दिया गया स्क्रीनशॉट एक सर्वर का है जो कुछ हफ्तों से चल रहा है और इनकमिंग या आउटगोइंग कनेक्शन पर कोई प्रतिबंध नहीं है। जैसा कि आप देख सकते हैं, इनपुट श्रृंखला ने 11GB पैकेट संसाधित किया है और आउटपुट श्रृंखला ने 17GB संसाधित किया है। दूसरी ओर, आगे की श्रृंखला को एक पैकेट को संसाधित करने की आवश्यकता नहीं है। ऐसा इसलिए है क्योंकि सर्वर किसी भी प्रकार का अग्रेषण नहीं कर रहा है या पास-थ्रू डिवाइस के रूप में उपयोग किया जा रहा है.

    उत्पादन - इस श्रृंखला का उपयोग आउटगोइंग कनेक्शन के लिए किया जाता है। उदाहरण के लिए, यदि आप howtogeek.com को पिंग करने का प्रयास करते हैं, तो iptables यह देखने के लिए कि क्या निर्णय लेने की अनुमति देने या अस्वीकार करने का निर्णय लेने से पहले नियम पिंग और howtogeek.com के बारे में हैं, यह देखने के लिए इसकी आउटपुट श्रृंखला की जाँच करेंगे।.

    कैवियट

    हालाँकि, बाहरी होस्ट को पिंग करने से कुछ ऐसा लगता है, जिसके लिए केवल आउटपुट चेन को ट्रैस करना होगा, ध्यान रखें कि डेटा को वापस करने के लिए, इनपुट चेन का भी उपयोग किया जाएगा। अपने सिस्टम को लॉक करने के लिए iptables का उपयोग करते समय, याद रखें कि बहुत सारे प्रोटोकॉल के लिए दो-तरफ़ा संचार की आवश्यकता होगी, इसलिए इनपुट और आउटपुट श्रृंखला दोनों को ठीक से कॉन्फ़िगर करने की आवश्यकता होगी। SSH एक सामान्य प्रोटोकॉल है जो लोग दोनों श्रृंखलाओं पर अनुमति देना भूल जाते हैं.

    नीति श्रृंखला डिफ़ॉल्ट व्यवहार

    विशिष्ट नियमों में जाने और कॉन्फ़िगर करने से पहले, आप यह तय करना चाहेंगे कि आप तीन श्रृंखलाओं का डिफ़ॉल्ट व्यवहार क्या चाहते हैं। दूसरे शब्दों में, यदि आप कनेक्शन को किसी भी मौजूदा नियमों से मेल नहीं खाते हैं, तो आप क्या करना चाहते हैं iptables?

    यह देखने के लिए कि आपकी नीति श्रृंखला वर्तमान में बेजोड़ ट्रैफ़िक के साथ क्या करने के लिए कॉन्फ़िगर है, चलाएं iptables -L आदेश.

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

    अधिक बार नहीं, आप चाहते हैं कि आपका सिस्टम डिफ़ॉल्ट रूप से कनेक्शन स्वीकार करे। जब तक आपने नीति श्रृंखला नियमों को पहले नहीं बदला है, तब तक यह सेटिंग पहले से ही कॉन्फ़िगर की जानी चाहिए। किसी भी तरह, यहां डिफ़ॉल्ट रूप से कनेक्शन स्वीकार करने की कमान है:

    iptables - पॉलीपसी INPUT ACCEPT
    iptables - अफीम की तरह खाता है
    iptables - प्रॉपर्टी फॉरवर्ड ACCEPT

    अन्य नियमों को स्वीकार करने के लिए जारी रखने के दौरान, आप विशिष्ट IP पते या पोर्ट संख्या को अस्वीकार करने के लिए iptables का उपयोग कर सकते हैं। हम एक मिनट में उन आदेशों को प्राप्त करेंगे.

    यदि आप सभी कनेक्शनों को अस्वीकार करते हैं और मैन्युअल रूप से निर्दिष्ट करते हैं कि आप किन लोगों को कनेक्ट करने की अनुमति देना चाहते हैं, तो आपको ड्रॉप करने के लिए अपनी चेन की डिफ़ॉल्ट नीति को बदलना चाहिए। ऐसा करना संभवतः केवल उन सर्वरों के लिए उपयोगी होगा, जिनमें संवेदनशील जानकारी होती है और केवल कभी-कभी एक ही आईपी पते उनसे जुड़े होते हैं.

    iptables - पोलिपिकल इनपूट ड्रॉप
    iptables - अफीम की खूशबू
    iptables - पोलिपरी फ़ॉरवर्ड ड्रॉप

    कनेक्शन-विशिष्ट प्रतिक्रियाएँ

    आपकी डिफ़ॉल्ट श्रृंखला नीतियों को कॉन्फ़िगर करने के साथ, आप iptables में नियम जोड़ना शुरू कर सकते हैं ताकि यह पता चले कि जब यह किसी विशेष आईपी पते या पोर्ट से कनेक्शन का सामना करता है तो क्या करना है। इस गाइड में, हम तीन सबसे बुनियादी और आमतौर पर इस्तेमाल की जाने वाली "प्रतिक्रियाओं" पर जा रहे हैं.

    स्वीकार करना - कनेक्शन की अनुमति दें.

    ड्रॉप - कनेक्शन को गिरा दें, ऐसा कार्य करें जैसा कि कभी नहीं हुआ। यह सबसे अच्छा है यदि आप नहीं चाहते कि आपके सिस्टम का अस्तित्व का स्रोत मौजूद है.

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

    इन तीन नियमों के बीच अंतर दिखाने का सबसे अच्छा तरीका यह दिखाना है कि ऐसा क्या दिखता है जब पीसी इन सेटिंग्स में से प्रत्येक के लिए कॉन्फ़िगर किए गए iptables के साथ एक लिनक्स मशीन को पिंग करने की कोशिश करता है।.

    कनेक्शन की अनुमति:

    कनेक्शन छोड़ना:

    कनेक्शन खारिज करना:

    विशिष्ट कनेक्शनों की अनुमति देना या अवरुद्ध करना

    कॉन्फ़िगर की गई आपकी नीति श्रृंखलाओं के साथ, आप अब विशिष्ट पते, पता श्रेणियों और बंदरगाहों को अनुमति देने या ब्लॉक करने के लिए iptables को कॉन्फ़िगर कर सकते हैं। इन उदाहरणों में, हम कनेक्शन सेट करेंगे ड्रॉप, लेकिन आप उन्हें बदल सकते हैं स्वीकार करना या अस्वीकार, आपकी आवश्यकताओं के आधार पर और आपने अपनी नीति श्रृंखलाओं को कैसे कॉन्फ़िगर किया है.

    नोट: इन उदाहरणों में, हम उपयोग करने जा रहे हैं iptables -ए मौजूदा श्रृंखला के नियमों को जोड़ने के लिए। iptables अपनी सूची के शीर्ष पर शुरू होता है और प्रत्येक नियम से गुजरता है जब तक कि यह एक ऐसा न मिल जाए कि यह मेल खाता हो। यदि आपको दूसरे के ऊपर एक नियम सम्मिलित करने की आवश्यकता है, तो आप उपयोग कर सकते हैं iptables -I [श्रृंखला] [संख्या] यह सूची में होना चाहिए संख्या निर्दिष्ट करने के लिए.

    एक एकल आईपी पते से कनेक्शन

    यह उदाहरण दिखाता है कि आईपी एड्रेस 10.10.10.10 से सभी कनेक्शनों को कैसे अवरुद्ध किया जाए.

    iptables-INPUT -s 10.10.10.10 -j DROP

    आईपी ​​पते की एक श्रृंखला से कनेक्शन

    यह उदाहरण दिखाता है कि 10.10.10.0/24 नेटवर्क रेंज में सभी आईपी एड्रेस को कैसे ब्लॉक किया जाए। IP पतों की श्रेणी निर्दिष्ट करने के लिए आप एक netmask या मानक स्लैश नोटेशन का उपयोग कर सकते हैं.

    iptables-INPUT -s 10.10.10.0/24 -j DROP

    या

    iptables-INPUT -s 10.10.10.0/255.255.255.0 -j DROP

    किसी विशिष्ट पोर्ट से कनेक्शन

    यह उदाहरण दिखाता है कि 10.10.10.10 से SSH कनेक्शन को कैसे अवरुद्ध किया जाए.

    iptables-INPUT -p tcp --dport ssh -s 10.10.10.10 -j DROP

    आप "ssh" को किसी भी प्रोटोकॉल या पोर्ट नंबर से बदल सकते हैं। -p tcp कोड का हिस्सा iptables बताता है कि प्रोटोकॉल किस तरह के कनेक्शन का उपयोग करता है। यदि आप एक प्रोटोकॉल को रोक रहे थे जो टीसीपी के बजाय यूडीपी का उपयोग करता है, तो -पी udp इसके बजाय आवश्यक होगा.

    यह उदाहरण दिखाता है कि किसी भी आईपी पते से एसएसएच कनेक्शन को कैसे अवरुद्ध किया जाए.

    iptables-INPUT -p tcp --dport ssh -j DROP

    कनेक्शन राज्यों

    जैसा कि हमने पहले उल्लेख किया है, बहुत सारे प्रोटोकॉल के लिए दो-तरफ़ा संचार की आवश्यकता होती है। उदाहरण के लिए, यदि आप अपने सिस्टम से SSH कनेक्शन की अनुमति देना चाहते हैं, तो इनपुट और आउटपुट श्रृंखलाओं को उनके साथ जोड़े गए नियम की आवश्यकता होगी। लेकिन, क्या होगा अगर आप चाहते हैं कि एसएसएच आपके सिस्टम में आने की अनुमति दे? उत्पादन श्रृंखला में एक नियम नहीं जोड़ने से आउटगोइंग एसएसएच प्रयास भी हो सकते हैं?

    यहीं पर कनेक्शन स्टेट्स आते हैं, जो आपको वह क्षमता प्रदान करते हैं जिसके लिए आपको दो तरह के संचार की अनुमति देने की आवश्यकता होती है, लेकिन केवल एक ही तरीके से कनेक्शन स्थापित करने की अनुमति देते हैं। इस उदाहरण पर एक नज़र डालें, जहाँ SSH का कनेक्शन 10.10.10.10 से है, लेकिन SSH का कनेक्शन 10.10.10.10 से नहीं है। हालाँकि, सिस्टम को SSH के बारे में जानकारी वापस भेजने की अनुमति दी जाती है, जब तक कि सत्र पहले ही स्थापित हो चुका होता है, जो इन मेजबान के लिए SSH संचार को संभव बनाता है।.

    iptables-INPUT -p tcp --dport ssh -s 10.10.10.10 -m राज्य --state NEW, ESTABLISHED -j ACCEPT

    iptables-OUTPUT -p tcp --sport 22 -d 10.10.10.10 -m राज्य --state ESTABLISHED -j ACCEPT

    बचत परिवर्तन

    जब आप अपने iptables नियमों में बदलाव करते हैं, तो अगली बार जब iptables सेवा फिर से शुरू हो जाती है, तब तक इसे हटा दिया जाएगा, जब तक कि आप परिवर्तनों को सहेजने के लिए एक कमांड निष्पादित नहीं करते। यह वितरण आपके वितरण के आधार पर भिन्न हो सकता है:

    उबंटू:

    sudo / sbin / iptables-save

    Red Hat / CentOS:

    / sbin / सेवा iptables सहेजें

    या

    /etc/init.d/iptables सहेजें

    अन्य कमांड

    वर्तमान में कॉन्फ़िगर किए गए iptables नियम सूचीबद्ध करें:

    iptables -L

    जोड़ रहा है -v विकल्प आपको पैकेट और बाइट जानकारी देगा, और जोड़ देगा -n सब कुछ संख्यात्मक रूप से सूचीबद्ध करेगा। दूसरे शब्दों में - होस्टनाम, प्रोटोकॉल और नेटवर्क नंबर के रूप में सूचीबद्ध हैं.

    वर्तमान में कॉन्फ़िगर किए गए सभी नियमों को साफ़ करने के लिए, आप फ्लश कमांड जारी कर सकते हैं.

    iptables -F