Iptables लिनक्स ऑपरेटिंग सिस्टम के लिए निर्मित एक अत्यंत लचीला फ़ायरवॉल उपयोगिता है। चाहे आप एक नौसिखिया लिनक्स geek या एक सिस्टम व्यवस्थापक हैं, वहाँ शायद कुछ तरीका है कि iptables आप के लिए एक महान उपयोग हो सकता है। जैसा कि हम आपको दिखाते हैं कि सबसे बहुमुखी लिनक्स फ़ायरवॉल को कैसे कॉन्फ़िगर करें।
Iptables के बारे में
iptables एक कमांड-लाइन फ़ायरवॉल उपयोगिता है जो ट्रैफ़िक को अनुमति देने या अवरुद्ध करने के लिए नीति श्रृंखलाओं का उपयोग करती है। जब कोई कनेक्शन आपके सिस्टम पर खुद को स्थापित करने की कोशिश करता है, तो iptables इसे मैच करने के लिए अपनी सूची में एक नियम की तलाश करता है। यदि यह एक नहीं मिलता है, तो यह डिफ़ॉल्ट कार्रवाई का समर्थन करता है।
iptables लगभग हमेशा किसी भी लिनक्स वितरण पर पहले से इंस्टॉल आता है। इसे अद्यतन / स्थापित करने के लिए, बस iptables पैकेज पुनः प्राप्त करें:
sudo apt-get install iptables
वहाँ iptables की तरह जीयूआई विकल्प हैं अग्नि का प्रारम्भक , लेकिन iptables वास्तव में इतना कठिन नहीं है कि एक बार कुछ कमांड नीचे कर लें। आप iptables नियमों को कॉन्फ़िगर करते समय बहुत सावधान रहना चाहते हैं, खासकर यदि आप एक सर्वर में SSH’D’D हो, क्योंकि एक गलत आदेश आपको स्थाई रूप से तब तक लॉक कर सकता है जब तक कि यह भौतिक मशीन पर मैन्युअल रूप से तय न हो जाए।
जंजीरों के प्रकार
iptables तीन अलग-अलग श्रृंखलाओं का उपयोग करता है: इनपुट, फॉरवर्ड और आउटपुट।
इनपुट - इस श्रृंखला का उपयोग आने वाले कनेक्शन के लिए व्यवहार को नियंत्रित करने के लिए किया जाता है। उदाहरण के लिए, यदि कोई उपयोगकर्ता आपके पीसी / सर्वर में SSH का प्रयास करता है, तो iptables इनपुट श्रृंखला में एक नियम में आईपी पते और पोर्ट से मेल खाने का प्रयास करेगा।
आगे - इस श्रृंखला का उपयोग आने वाले कनेक्शनों के लिए किया जाता है जो वास्तव में स्थानीय स्तर पर वितरित नहीं किए जाते हैं। एक राउटर के बारे में सोचो - डेटा हमेशा इसे भेजा जा रहा है लेकिन शायद ही कभी राउटर के लिए ही किस्मत में है; डेटा सिर्फ अपने लक्ष्य के लिए अग्रेषित किया गया है। जब तक आप अपने सिस्टम पर किसी प्रकार की रूटिंग, नेटिंग, या कुछ और नहीं कर रहे हैं, जिसे अग्रेषण की आवश्यकता है, तब तक आप इस श्रृंखला का उपयोग नहीं करेंगे।
यह सुनिश्चित करने का एक निश्चित तरीका है कि आपका सिस्टम आगे की श्रृंखला का उपयोग करे या न करे।
iptables -L -v
ऊपर स्क्रीनशॉट एक सर्वर का है जो कुछ हफ्तों से चल रहा है और आने वाले या बाहर जाने वाले कनेक्शन पर कोई प्रतिबंध नहीं है। जैसा कि आप देख सकते हैं, इनपुट श्रृंखला ने 11GB पैकेट संसाधित किया है और आउटपुट श्रृंखला ने 17GB संसाधित किया है। दूसरी ओर, आगे की श्रृंखला को एक पैकेट को संसाधित करने की आवश्यकता नहीं है। ऐसा इसलिए है क्योंकि सर्वर किसी भी तरह का अग्रेषण नहीं कर रहा है या पास-थ्रू डिवाइस के रूप में उपयोग किया जा रहा है।
उत्पादन - इस चेन का इस्तेमाल आउटगोइंग कनेक्शन के लिए किया जाता है। उदाहरण के लिए, यदि आप howtogeek.com को पिंग करने का प्रयास करते हैं, तो iptables यह देखने के लिए कि क्या निर्णय लेने की अनुमति देने या अस्वीकार करने का निर्णय लेने से पहले ping और howtogeek.com के बारे में नियम हैं, यह देखने के लिए इसकी आउटपुट श्रृंखला की जाँच करेंगे।
कैवियट
हालाँकि, बाहरी होस्ट को पिंग करने से कुछ ऐसा लगता है, जिसके लिए केवल आउटपुट श्रृंखला को लांघना होगा, ध्यान रखें कि डेटा वापस करने के लिए, इनपुट श्रृंखला का भी उपयोग किया जाएगा। अपने सिस्टम को लॉक करने के लिए iptables का उपयोग करते समय, याद रखें कि बहुत सारे प्रोटोकॉल के लिए दो-तरफ़ा संचार की आवश्यकता होगी, इसलिए इनपुट और आउटपुट श्रृंखला दोनों को ठीक से कॉन्फ़िगर करने की आवश्यकता होगी। एसएसएच एक सामान्य प्रोटोकॉल है जिसे लोग दोनों श्रृंखलाओं पर अनुमति देना भूल जाते हैं।
नीति श्रृंखला डिफ़ॉल्ट व्यवहार
विशिष्ट नियमों में जाने और कॉन्फ़िगर करने से पहले, आप यह तय करना चाहते हैं कि आप तीन श्रृंखलाओं का डिफ़ॉल्ट व्यवहार क्या चाहते हैं। दूसरे शब्दों में, यदि आप कनेक्शन को किसी मौजूदा नियम से मेल नहीं खाते हैं तो आप क्या करना चाहते हैं?
यह देखने के लिए कि आपकी नीति श्रृंखला वर्तमान में बेजोड़ ट्रैफ़िक के साथ क्या करने के लिए कॉन्फ़िगर है, चलाएं
iptables -L
आदेश।
जैसा कि आप देख सकते हैं, हमने हमें क्लीनर आउटपुट देने के लिए grep कमांड का भी उपयोग किया। उस स्क्रीनशॉट में, हमारी श्रृंखलाओं को वर्तमान में ट्रैफ़िक स्वीकार करने के लिए लगाया गया है।
अधिक बार नहीं, आप चाहते हैं कि आपका सिस्टम डिफ़ॉल्ट रूप से कनेक्शन स्वीकार करे। जब तक आपने पहले नीति श्रृंखला नियमों को नहीं बदला है, इस सेटिंग को पहले से ही कॉन्फ़िगर किया जाना चाहिए। किसी भी तरह, यहां डिफ़ॉल्ट रूप से कनेक्शन स्वीकार करने की कमान है:
iptables - पोलिपीली इनपूट ACCEPT
iptables - अफीम की खट्टी चीजें
iptables - प्रॉपर्टी फॉरवर्ड ACCEPT
अन्य नियमों को स्वीकार करने के लिए जारी रखते हुए, आप विशिष्ट आईपी पते या पोर्ट संख्या को अस्वीकार करने के लिए iptables का उपयोग कर सकते हैं। हम एक मिनट में उन आदेशों पर पहुँच जाएंगे।
यदि आप सभी कनेक्शनों को अस्वीकार करते हैं और मैन्युअल रूप से निर्दिष्ट करते हैं कि आप किन लोगों को कनेक्ट करने की अनुमति देना चाहते हैं, तो आपको ड्रॉप करने के लिए अपनी चेन की डिफ़ॉल्ट नीति को बदलना चाहिए। ऐसा करना संभवतः केवल उन सर्वरों के लिए उपयोगी होगा, जिनमें संवेदनशील जानकारी होती है और केवल वही IP पते होते हैं जो उनसे जुड़ते हैं।
iptables - पोलिपिकल इनपूट ड्रॉप
iptables - अफीम की खूबी
iptables - पोलिपरी फ़ॉरवर्ड ड्रॉप
कनेक्शन-विशिष्ट प्रतिक्रियाएँ
आपकी डिफ़ॉल्ट श्रृंखला नीतियों को कॉन्फ़िगर करने के साथ, आप नियमों को iptables में जोड़ना शुरू कर सकते हैं ताकि यह जान सके कि जब वह किसी विशेष आईपी पते या पोर्ट से कनेक्शन का सामना करता है तो क्या करना है। इस गाइड में, हम तीन सबसे बुनियादी और आमतौर पर उपयोग की जाने वाली "प्रतिक्रियाओं" पर जा रहे हैं।
स्वीकार करना - कनेक्शन की अनुमति दें।
ड्रॉप - कनेक्शन को गिराएं, ऐसा कार्य करें जैसा कि कभी नहीं हुआ। यह सबसे अच्छा है यदि आप नहीं चाहते कि स्रोत को आपके सिस्टम का एहसास हो।
अस्वीकार - कनेक्शन की अनुमति न दें, लेकिन एक त्रुटि वापस भेजें। यदि आप अपने सिस्टम से जुड़ने के लिए कोई विशेष स्रोत नहीं चाहते हैं, तो यह सबसे अच्छा है, लेकिन आप उन्हें जानना चाहते हैं कि आपके फ़ायरवॉल ने उन्हें ब्लॉक कर दिया है।
इन तीन नियमों के बीच अंतर दिखाने का सबसे अच्छा तरीका यह दिखाना है कि ऐसा क्या दिखता है जब पीसी इन सेटिंग्स में से प्रत्येक के लिए कॉन्फ़िगर किए गए iptables के साथ लिनक्स मशीन को पिंग करने की कोशिश करता है।
कनेक्शन की अनुमति:
कनेक्शन को छोड़ना:
कनेक्शन खारिज करना:
विशिष्ट कनेक्शनों की अनुमति देना या अवरुद्ध करना
कॉन्फ़िगर की गई आपकी नीति श्रृंखलाओं के साथ, अब आप विशिष्ट पते, पता श्रेणियों और बंदरगाहों को अनुमति देने या ब्लॉक करने के लिए iptables को कॉन्फ़िगर कर सकते हैं। इन उदाहरणों में, हम कनेक्शन सेट करेंगे
ड्रॉप
, लेकिन आप उन्हें स्विच कर सकते हैं
स्वीकार करना
या
अस्वीकार
, आपकी आवश्यकताओं पर निर्भर करता है और आपने अपनी नीति श्रृंखलाओं को कैसे कॉन्फ़िगर किया है।
नोट: इन उदाहरणों में, हम उपयोग करने जा रहे हैं
iptables -ए
मौजूदा श्रृंखला के नियमों को लागू करने के लिए। iptables अपनी सूची के शीर्ष पर शुरू होता है और प्रत्येक नियम से गुजरता है जब तक कि यह एक ऐसा न मिले जिसे यह मेल खाता है। यदि आपको किसी अन्य के ऊपर एक नियम सम्मिलित करने की आवश्यकता है, तो आप उपयोग कर सकते हैं
iptables -I [chain] [number]
यह सूची में होना चाहिए संख्या निर्दिष्ट करने के लिए।
एक एकल आईपी पते से कनेक्शन
यह उदाहरण दिखाता है कि आईपी पते से सभी कनेक्शनों को कैसे अवरुद्ध करना है 10.10.10.10।
iptables-INPUT -s 10.10.10.10 -j DROP
IP पते की एक श्रृंखला से कनेक्शन
यह उदाहरण दिखाता है कि 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" को किसी भी प्रोटोकॉल या पोर्ट नंबर से बदल सकते हैं।
-पी टीसीपी
कोड का हिस्सा iptables बताता है कि प्रोटोकॉल किस तरह के कनेक्शन का उपयोग करता है। यदि आप एक प्रोटोकॉल को रोक रहे थे जो टीसीपी के बजाय यूडीपी का उपयोग करता है, तो
-पी udp
इसके बजाय आवश्यक होगा।
यह उदाहरण दिखाता है कि किसी भी आईपी पते से एसएसएच कनेक्शन को कैसे अवरुद्ध किया जाए।
iptables-INPUT -p tcp --dport ssh -j DROP
कनेक्शन राज्यों
जैसा कि हमने पहले बताया, बहुत सारे प्रोटोकॉल के लिए दो-तरफ़ा संचार की आवश्यकता होती है। उदाहरण के लिए, यदि आप अपने सिस्टम में एसएसएच कनेक्शन की अनुमति देना चाहते हैं, तो इनपुट और आउटपुट चेन को एक नियम की आवश्यकता होती है। लेकिन, क्या होगा यदि आप चाहते हैं कि एसएसएच आपके सिस्टम में आने की अनुमति दे? आउटपुट श्रृंखला में एक नियम जोड़ने से भी एसएसएच प्रयासों को आउटगोइंग करने की अनुमति नहीं है?
यह वह जगह है जहां कनेक्शन स्टेट्स आते हैं, जो आपको वह क्षमता प्रदान करते हैं, जिसके लिए आपको दो तरह के संचार की अनुमति देने की आवश्यकता होती है, लेकिन केवल एक ही तरीके से कनेक्शन स्थापित करने की अनुमति देते हैं। इस उदाहरण पर एक नज़र डालें, जहाँ SSH का कनेक्शन 10.10.10.10 से है, लेकिन SSH का कनेक्शन 10.10.10.10 से नहीं है। हालाँकि, सिस्टम को SSH के बारे में जानकारी वापस भेजने की अनुमति दी जाती है, जब तक कि सत्र पहले ही स्थापित हो चुका होता है, जो एसएसएच संचार को इन दोनों मेजबानों के बीच संभव बनाता है।
iptables-INPUT -p tcp --dport ssh -s 10.10.10.10 -m राज्य --स्टेट न्यू, ESTABLISHED -j ACCEPT
iptables-OUTPUT -p tcp --sport 22 -d 10.10.10.10 -m राज्य --स्टेट इस्टैब्लिशड -j ACCEPT
बचत परिवर्तन
जब आप अपने iptables नियमों में बदलाव करते हैं, तो अगली बार जब iptables सेवा फिर से शुरू हो जाती है, तब तक इसे हटा दिया जाएगा जब तक कि आप परिवर्तनों को सहेजने के लिए एक कमांड निष्पादित नहीं करते। यह वितरण आपके वितरण के आधार पर भिन्न हो सकता है:
उबंटू:
sudo / sbin / iptables-save
Red Hat / CentOS:
/ sbin / सेवा iptables सहेजें
या
/etc/init.d/iptables सहेजें
अन्य कमांड
वर्तमान में कॉन्फ़िगर किए गए iptables नियमों को सूचीबद्ध करें:
iptables -L
जोड़ रहा है
कम से
विकल्प आपको पैकेट और बाइट जानकारी देगा, और जोड़ देगा
-n
संख्यात्मक रूप से सब कुछ सूचीबद्ध करेगा। दूसरे शब्दों में - होस्टनाम, प्रोटोकॉल और नेटवर्क नंबर के रूप में सूचीबद्ध हैं।
वर्तमान में कॉन्फ़िगर किए गए सभी नियमों को साफ़ करने के लिए, आप फ्लश कमांड जारी कर सकते हैं।
iptables -F