के द्वारा तस्वीर ezioman.
Iptables के बारे में
iptables एक कमांड लाइन फ़ायरवॉल उपयोगिता है जो यातायात को अनुमति देने या अवरुद्ध करने के लिए नीति श्रृंखला का उपयोग करती है। जब कोई कनेक्शन आपके सिस्टम पर खुद को स्थापित करने का प्रयास करता है, तो iptables इसकी सूची में इसे मिलान करने के लिए एक नियम की तलाश करता है। यदि यह एक नहीं मिलता है, तो यह डिफ़ॉल्ट कार्रवाई के लिए रिसॉर्ट करता है।
iptables लगभग हमेशा किसी भी लिनक्स वितरण पर पूर्व स्थापित किया जाता है। इसे अद्यतन / स्थापित करने के लिए, बस iptables पैकेज पुनर्प्राप्त करें:
sudo apt-get install iptables
फायरस्टार्टर जैसे iptables के लिए जीयूआई विकल्प हैं, लेकिन आपके पास कमांड कम होने के बाद iptables वास्तव में कठिन नहीं है। Iptables नियमों को कॉन्फ़िगर करते समय आप बेहद सावधान रहना चाहते हैं, विशेष रूप से यदि आप किसी सर्वर में SSH'd हैं, क्योंकि एक गलत आदेश स्थायी रूप से भौतिक मशीन पर ठीक होने तक आपको स्थायी रूप से लॉक कर सकता है।
चेन के प्रकार
iptables तीन अलग श्रृंखला का उपयोग करता है: इनपुट, आगे, और आउटपुट।
इनपुट - इस श्रृंखला का उपयोग आने वाले कनेक्शन के व्यवहार को नियंत्रित करने के लिए किया जाता है। उदाहरण के लिए, यदि कोई उपयोगकर्ता आपके पीसी / सर्वर में एसएसएच का प्रयास करता है, तो iptables इनपुट श्रृंखला में किसी नियम पर आईपी पते और पोर्ट से मिलान करने का प्रयास करेगा।
आगे - इस श्रृंखला का उपयोग उन आने वाले कनेक्शनों के लिए किया जाता है जिन्हें वास्तव में स्थानीय रूप से वितरित नहीं किया जा रहा है। राउटर के बारे में सोचें - डेटा हमेशा इसे भेजा जा रहा है लेकिन शायद ही कभी राउटर के लिए नियत है; डेटा सिर्फ अपने लक्ष्य के लिए भेजा जाता है। जब तक आप किसी भी प्रकार की रूटिंग, नेटिंग या आपके सिस्टम पर कुछ और नहीं कर रहे हैं जिसके लिए अग्रेषण की आवश्यकता है, तो आप इस श्रृंखला का भी उपयोग नहीं करेंगे।
यह जांचने के लिए एक निश्चित अग्नि तरीका है कि आपका सिस्टम अगली श्रृंखला का उपयोग करता है या नहीं।
iptables -L -v
उत्पादन - इस श्रृंखला का उपयोग आउटगोइंग कनेक्शन के लिए किया जाता है। उदाहरण के लिए, यदि आप howtogeek.com को पिंग करने का प्रयास करते हैं, तो iptables कनेक्शन आउटपुट को अनुमति देने या अस्वीकार करने का निर्णय लेने से पहले पिंग और howtogeek.com के संबंध में नियमों को देखने के लिए इसकी आउटपुट श्रृंखला की जांच करेगा।
चेतावनी
भले ही बाहरी होस्ट को पिंग करना ऐसा कुछ लगता है जो केवल आउटपुट चेन को पार करने की आवश्यकता होगी, ध्यान रखें कि डेटा वापस करने के लिए, इनपुट श्रृंखला का भी उपयोग किया जाएगा। अपने सिस्टम को लॉक करने के लिए iptables का उपयोग करते समय, याद रखें कि बहुत सारे प्रोटोकॉल को दो-तरफा संचार की आवश्यकता होगी, इसलिए इनपुट और आउटपुट चेन दोनों को ठीक से कॉन्फ़िगर करने की आवश्यकता होगी। एसएसएच एक आम प्रोटोकॉल है जो लोग दोनों श्रृंखलाओं पर अनुमति देना भूल जाते हैं।
नीति श्रृंखला डिफ़ॉल्ट व्यवहार
विशिष्ट नियमों को कॉन्फ़िगर करने और कॉन्फ़िगर करने से पहले, आप यह तय करना चाहेंगे कि आप तीन श्रृंखलाओं के डिफ़ॉल्ट व्यवहार को क्या चाहते हैं। दूसरे शब्दों में, यदि आप किसी मौजूदा नियम से मेल नहीं खाते हैं तो आप iptables क्या करना चाहते हैं?
यह देखने के लिए कि आपकी नीति श्रृंखलाएं वर्तमान में बेजोड़ ट्रैफ़िक के साथ करने के लिए कॉन्फ़िगर की गई हैं, चलाएं
iptables -L
आदेश।
अधिक से अधिक बार, आप चाहते हैं कि आपका सिस्टम डिफ़ॉल्ट रूप से कनेक्शन स्वीकार करे। जब तक आपने पहले पॉलिसी श्रृंखला नियमों को नहीं बदला है, तब तक यह सेटिंग पहले से कॉन्फ़िगर की जानी चाहिए। किसी भी तरह से, यहां डिफ़ॉल्ट रूप से कनेक्शन स्वीकार करने का आदेश दिया गया है:
iptables --policy INPUT ACCEPT
iptables --policy OUTPUT ACCEPT
iptables --policy FORWARD ACCEPT
स्वीकृति नियम में डिफ़ॉल्ट रूप से, आप अन्य सभी कनेक्शन स्वीकार करते समय विशिष्ट आईपी पते या पोर्ट नंबरों को अस्वीकार करने के लिए iptables का उपयोग कर सकते हैं। हम एक मिनट में उन आदेशों को प्राप्त करेंगे।
यदि आप सभी कनेक्शनों को अस्वीकार करना चाहते हैं और मैन्युअल रूप से निर्दिष्ट करना चाहते हैं कि आप किससे कनेक्ट करना चाहते हैं, तो आपको अपनी श्रृंखलाओं की डिफ़ॉल्ट नीति को ड्रॉप करना चाहिए। ऐसा करने से शायद उन सर्वरों के लिए उपयोगी हो सकता है जिनमें संवेदनशील जानकारी होती है और केवल उनके पास एक ही आईपी पते कनेक्ट होते हैं।
iptables --policy INPUT DROP
iptables --policy OUTPUT DROP
iptables --policy FORWARD DROP
कनेक्शन-विशिष्ट प्रतिक्रियाएं
आपकी डिफ़ॉल्ट श्रृंखला नीतियों को कॉन्फ़िगर करने के साथ, आप iptables में नियम जोड़ने शुरू कर सकते हैं, इसलिए यह जानता है कि जब किसी कनेक्शन से या किसी विशेष आईपी पते या पोर्ट से कनेक्शन का सामना करना पड़ता है तो क्या करना है। इस गाइड में, हम तीन सबसे बुनियादी और सामान्य रूप से उपयोग किए जाने वाले "प्रतिक्रियाओं" पर जा रहे हैं।
स्वीकार करना - कनेक्शन की अनुमति दें।
ड्रॉप - कनेक्शन ड्रॉप, ऐसा कार्य कभी नहीं हुआ। यह सबसे अच्छा है अगर आप नहीं चाहते कि स्रोत आपके सिस्टम को महसूस कर सके।
अस्वीकार - कनेक्शन की अनुमति न दें, लेकिन एक त्रुटि वापस भेजें। यह सबसे अच्छा है अगर आप किसी विशेष स्रोत को अपने सिस्टम से कनेक्ट नहीं करना चाहते हैं, लेकिन आप उन्हें यह जानना चाहते हैं कि आपकी फ़ायरवॉल ने उन्हें अवरुद्ध कर दिया है।
इन तीन नियमों के बीच अंतर दिखाने का सबसे अच्छा तरीका यह दिखाने के लिए है कि जब पीसी एक लिनक्स मशीन को पिंग करने की कोशिश करता है तो इन सेटिंग्स में से प्रत्येक के लिए कॉन्फ़िगर किए गए iptables के साथ यह कैसा दिखता है।
कनेक्शन की अनुमति:
विशिष्ट कनेक्शन की अनुमति या अवरुद्ध करना
आपकी नीति श्रृंखलाओं को कॉन्फ़िगर करने के साथ, अब आप विशिष्ट पते, पता श्रेणी और बंदरगाहों को अनुमति देने या अवरोधित करने के लिए iptables कॉन्फ़िगर कर सकते हैं। इन उदाहरणों में, हम कनेक्शन सेट करेंगे
DROP
लेकिन आप उन्हें स्विच कर सकते हैं
ACCEPT
या
REJECT
आपकी आवश्यकताओं के आधार पर और आपने अपनी नीति श्रृंखला को कैसे कॉन्फ़िगर किया है।
नोट: इन उदाहरणों में, हम उपयोग करने जा रहे हैं
iptables -A
मौजूदा श्रृंखला में नियमों को जोड़ने के लिए। iptables इसकी सूची के शीर्ष पर शुरू होता है और प्रत्येक नियम के माध्यम से जाता है जब तक कि यह मेल नहीं खाता है। यदि आपको किसी अन्य नियम को ऊपर डालने की आवश्यकता है, तो आप इसका उपयोग कर सकते हैं
iptables -I [chain] [number]
सूची में यह संख्या निर्दिष्ट करने के लिए।
एक आईपी पते से कनेक्शन
यह उदाहरण दिखाता है कि आईपी पते 10.10.10.10 से सभी कनेक्शन कैसे ब्लॉक करें।
iptables -A INPUT -s 10.10.10.10 -j DROP
आईपी पते की एक श्रृंखला से कनेक्शन
यह उदाहरण दिखाता है कि 10.10.10.0/24 नेटवर्क रेंज में सभी आईपी पते को कैसे अवरुद्ध करें। आप आईपी पते की सीमा निर्दिष्ट करने के लिए नेटमास्क या मानक स्लैश नोटेशन का उपयोग कर सकते हैं।
iptables -A INPUT -s 10.10.10.0/24 -j DROP
या
iptables -A INPUT -s 10.10.10.0/255.255.255.0 -j DROP
एक विशिष्ट बंदरगाह के लिए कनेक्शन
यह उदाहरण दिखाता है कि 10.10.10.10 से एसएसएच कनेक्शन कैसे ब्लॉक करें।
iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -j DROP
आप किसी भी प्रोटोकॉल या पोर्ट नंबर के साथ "एसएसएच" को प्रतिस्थापित कर सकते हैं।
-p tcp
कोड का हिस्सा iptables बताता है कि प्रोटोकॉल किस प्रकार का कनेक्शन उपयोग करता है। यदि आप एक प्रोटोकॉल को अवरुद्ध कर रहे थे जो तब टीसीपी के बजाय यूडीपी का उपयोग करता है
-p udp
इसके बजाय आवश्यक होगा।
यह उदाहरण दिखाता है कि एसएसएच कनेक्शन को किसी भी आईपी पते से कैसे अवरुद्ध करना है।
iptables -A INPUT -p tcp --dport ssh -j DROP
कनेक्शन राज्य
जैसा कि हमने पहले उल्लेख किया था, कई प्रोटोकॉल को दो-तरफा संचार की आवश्यकता होगी। उदाहरण के लिए, यदि आप अपने सिस्टम में एसएसएच कनेक्शन की अनुमति देना चाहते हैं, तो इनपुट और आउटपुट चेन को उनके लिए जोड़े गए नियम की आवश्यकता होगी। लेकिन, क्या होगा यदि आप केवल एसएसएच को अपने सिस्टम में आने की अनुमति दें? आउटपुट श्रृंखला में कोई नियम नहीं जोड़ना आउटगोइंग एसएसएच प्रयासों को भी अनुमति देगा?
यही वह जगह है जहां कनेक्शन राज्य आते हैं, जो आपको दो तरह के संचार की अनुमति देने की क्षमता प्रदान करते हैं, लेकिन केवल एक तरफ कनेक्शन स्थापित करने की अनुमति देते हैं। इस उदाहरण पर एक नज़र डालें, जहां 10.10.10.10 से एसएसएच कनेक्शन की अनुमति है, लेकिन 10.10.10.10 से एसएसएच कनेक्शन नहीं हैं। हालांकि, सिस्टम को एसएसएच पर वापस जानकारी भेजने की अनुमति है जब तक कि सत्र पहले ही स्थापित हो चुका है, जिससे इन दो मेजबानों के बीच एसएसएच संचार संभव हो जाता है।
iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -d 10.10.10.10 -m state --state ESTABLISHED -j ACCEPT
बचत परिवर्तन
आपके iptables नियमों में किए गए परिवर्तन अगली बार स्क्रैप किए जाएंगे जब तक कि iptables सेवा को पुनरारंभ नहीं किया जाता है जब तक कि आप परिवर्तनों को सहेजने के लिए कोई आदेश निष्पादित नहीं करते। यह आदेश आपके वितरण के आधार पर भिन्न हो सकता है:
उबंटू:
sudo /sbin/iptables-save
रेड हैट / सेंटोस:
/sbin/service iptables save
या
/etc/init.d/iptables save
अन्य आदेश
वर्तमान में कॉन्फ़िगर किए गए iptables नियमों की सूची बनाएं:
iptables -L
जोड़ना
-v
विकल्प आपको पैकेट और बाइट जानकारी देगा, और जोड़ देगा
-n
संख्यात्मक रूप से सबकुछ सूचीबद्ध करेगा। दूसरे शब्दों में - होस्टनाम, प्रोटोकॉल, और नेटवर्क संख्याओं के रूप में सूचीबद्ध हैं।
वर्तमान में सभी कॉन्फ़िगर किए गए नियमों को साफ़ करने के लिए, आप फ्लश कमांड जारी कर सकते हैं।
iptables -F