iptables: निश्चित ips की अनुमति दें और अन्य सभी कनेक्शन को ब्लॉक करें


26

मैं कुछ ips को कैसे अनुमति दूं और अन्य सभी कनेक्शन को iptables में ब्लॉक करूं?


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

जवाबों:


27

मैंने बहुत समय पहले डेस्कटॉप उपयोगकर्ता के लिए बुनियादी Iptables नियमों पर एक ब्लॉग पोस्ट लिखा था और आपको शायद इसे पढ़ना चाहिए, और स्टेटफुल फ़ायरवॉल डिज़ाइन पर इसके लिंक किए गए लेख । लेकिन पूर्व कर्नेल 2.6.39 (जिसमें शामिल है ipsetऔर आप आईपी के श्वेतसूची में उपयोग करना चाहते हैं यदि आपके पास 10 से अधिक श्वेतसूची में है (जहां 10 मनमाना है)।

पहले राज्य की संभाल लें कि हम जानते हैं कि हम स्वीकार करना चाहते हैं या छोड़ना चाहते हैं, और इंटरफेस।

iptables -P FORWARD DROP # we aren't a router
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -s 192.168.1.1 -j ACCEPT
iptables -P INPUT DROP # Drop everything we don't accept

यदि आप केवल राज्य द्वारा, केवल आईपी द्वारा एक अनुमति देना चाहते हैं

iptables -A INPUT -s 192.168.1.1 -j ACCEPT
iptables -A OUTPUT -d 192.168.1.1 -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT DROP

हालाँकि, आपको ऐसा करने में समस्याएँ होने की संभावना है, और मैं सुझाव देता हूं कि राज्य का उपयोग करके अपने जीवन को आसान बनाएं। उदाहरण के लिए, अनुमति नहीं देना -i loऔर -o loनिश्चित रूप से कुछ अनुप्रयोगों के लिए समस्याएं पैदा करेगा।


4
DROP के बजाय, आपको अवांछित पैकेटों को फिर से तैयार करना चाहिए, क्योंकि यह मुद्दों को बहुत आसान बनाता है और टाइमआउट को रोकता है। देखें एक ICMP त्रुटि के साथ IP पैकेट को अस्वीकार करें, या बस उन्हें छोड़?
गिलेस एसओ- बुराई को रोकना '

मैंने दोनों सेटअप की कोशिश की और KeePass2 शुरू नहीं होगा, कोई विचार? इसके अलावा, अगर मुझे लगता है iptables -Fकि सभी नियमों को स्पष्ट करना चाहिए, तो भी ubuntu.com को पिंग नहीं किया जा सकता
Pawel Cioch

@PawelCioch KeePass2 को वैसे भी इंटरनेट कनेक्शन की आवश्यकता क्यों होगी?
एलेक्स

@ दूरस्थ स्थान में DB फ़ाइल संग्रहीत करने के लिए, मुझे यह एकल IP चाहिए। लेकिन मैं सब कुछ पता
लगाता

10

यहाँ (अप्रयुक्त!) उदाहरण है जो केवल आने वाले कनेक्शन को रोकता है । लूपबैक इंटरफ़ेस पर कनेक्शन, 192.168.3.x, ICMP या SSH पोर्ट से आ रहे हैं। अन्य सभी कनेक्शन खारिज कर दिए गए हैं।

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -s 192.168.3.0/24 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -j REJECT

@ गिले और संबंधित राज्यों का ठीक से उपयोग करने के लिए, आपको नए राज्य के रूप में शुरुआती पैकेट से मिलान करना होगा। loउपरोक्त उदाहरण में राज्य मिलान से बाहर रखा गया है और हमेशा अनुमति दी जाती है।
पेंग्विन 359

@ penguin359: क्या आपको इस बात की विस्तृत जानकारी दी जा सकती है कि NEW की आवश्यकता क्यों है? मैं एक iptables विशेषज्ञ से बहुत दूर हूं, मैंने अपने होम राउटर से इन नियमों को आंशिक रूप से कॉपी किया है, जो नए पर मेल नहीं खाता है। जहाँ तक मैं समझता हूँ, पहला नियम नया (या UNTRACKED) पैकेट वैसे भी छोड़ दिया गया है। (यदि मैं चिह्न से बहुत दूर हूं और आप किसी टिप्पणी में व्याख्या नहीं कर सकते, तो उत्तर के रूप में स्पष्टीकरण के साथ अपने संस्करणों को पोस्ट करें और मैं अपना डिलीट कर दूंगा।)
गिल्स एसओ- बुराई को रोकें '

@ गिल्स मैं हमेशा कुछ भी स्वीकार करने से पहले INVALID स्टेट को छोड़ देता हूं ... जो कुछ भी नहीं बनाता है INVALID, RELATED, ESTABLISHED, न्यू स्टेट होना चाहिए। लेकिन मुझे कोई कारण नहीं पता है कि बाकी सब कुछ नया निर्दिष्ट करना चाहिए। सिद्धांत रूप में, यदि आप INVALID को नहीं संभालते हैं, और आप NEW को निर्दिष्ट नहीं करते हैं, तो आप INVALID को स्वीकार कर सकते हैं। लेकिन एक बार INVALID को संभालने के बाद, यह मुझे लगता है कि हर नियम पर नए राज्य के लिए जाँच करने के लिए बस पैकेट के लिए अधिक प्रसंस्करण की आवश्यकता होती है।
xenoterracide

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

@xenoterracide: अच्छी बात है। क्या कभी इस्तेमाल किया जाना चाहिए? मैंने पूछा: एक ICMP त्रुटि के साथ IP पैकेट को अस्वीकार करें, या बस उन्हें छोड़ दें?
गिल्स एसओ- बुराई को रोकना '

7

नीचे का नियम केवल आपके आईपी और पोर्ट 22 या ssh पर अन्य सभी आईपी को ब्लॉक करने की अनुमति देगा। डिस्कनेक्ट करने से पहले एक नए टर्मिनल के साथ परीक्षण करें।

iptables -I INPUT -p tcp ! -s yourIPaddress --dport 22 -j DROP

3
सक्सेस जवाब के लिए धन्यवाद। अगर मैं कुछ आईपी और आईपी रेंज की अनुमति देना चाहता हूं तो यह कैसे बदल जाएगा। के स्थान में yourIPaddressमैं कुछ IP पते और सीमाएं जोड़ने सकता है? और अगर मैं 2888 जैसे गैर-मानक पोर्ट पर SSH का उपयोग कर रहा हूं, तो कमांड 22आपके उदाहरण में बदल जाएगी 2288? इसके अलावा, क्या यह अनुमतियों को छोड़कर सभी IP से इस सर्वर पर rsync, sftp आदि को भी ब्लॉक करेगा?
PKHunter

1
ध्यान दें कि -p tcpयहां महत्वपूर्ण है क्योंकि --dportइसके बिना काम नहीं करता है। मैं -j REJECTइसके बजाय उपयोग करने का सुझाव भी दूंगा DROPक्योंकि REJECTपोर्ट बंद पोर्ट के समान है और DROPपैकेट को उस पोर्ट ब्लैक होल्ड के लिए नियत करता है। व्यवहार में, दूरस्थ हमलावर DROPवास्तव में बंद बंदरगाहों से कॉन्फ़िगर किए गए बंदरगाहों का पता लगा सकता है ।
मिकको रैंटलैनेन

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