कैसे मैक और ebtables का उपयोग कर आईपी स्पूफिंग को रोकने के लिए?


10

मैं ebtables में आईपी-मैक पेयरिंग नियम बनाने की कोशिश कर रहा हूं । कुछ ट्यूटोरियल और संबंधित प्रश्न उपलब्ध हैं [1] लेकिन मेरे पास विशिष्ट प्रकार की सेटिंग है।

पर्यावरण: मेरे पास कई भौतिक मेजबान हैं । प्रत्येक मेजबान के पास कुछ ईथरनेट कार्ड होते हैं, जो बांड में शामिल होते हैं और पुल के लिए दास के रूप में उपयोग किए जाते हैं। प्रत्येक होस्ट (kvm, qemu, libvirt) पर कई वर्चुअल मशीनें हैं। प्रत्येक वर्चुअल मशीन नए पोर्ट के माध्यम से अपने भौतिक मेजबान के एक पुल से जुड़ा होता है जिसे vnet [0-9] + कहा जाता है। कोई NAT नहीं है। नेटवर्किंग ठीक काम करती है, सभी भौतिक मेजबानों को पिंग किया जा सकता है, सभी वर्चुअल मशीनें भी। प्रत्येक वर्चुअल मशीन का अपना आईपी एड्रेस और मैक एड्रेस होता है।

समस्या: एक वर्चुअल मशीन के अंदर, आईपी पते को दूसरे में बदला जा सकता है।

ध्वनि समाधान: ebtables साइट पर ज्ञात समाधान [2] है, लेकिन यह समाधान केवल एक होस्ट का उपयोग करने पर लागू होता है। यह सभी ट्रैफ़िक की अनुमति देता है और अगर IP से कोई पैकेट है, तो अनुमति के अलावा किसी अन्य मैक के साथ पैकेट को छोड़ दिया जाता है। यदि एक से अधिक होस्ट हैं, तो सभी मौजूदा आईपी-मैक जोड़े को सभी मेजबानों पर पंजीकृत होने की आवश्यकता है। रिवर्स पॉलिसी समाधान की आवश्यकता है।

छंटनी का हल: मैंने उलटे तरीके से एबटैबल्स का उपयोग करने की कोशिश की है। यहाँ एक उदाहरण है जो मैंने कोशिश की।

उदाहरण 1

Bridge table: filter
Bridge chain: INPUT, entries: 2, policy: DROP
-i bond0 -j ACCEPT 
-p IPv4 -s 54:52:0:98:d7:b6 --ip-src 192.168.11.122 -j ACCEPT 
Bridge chain: FORWARD, entries: 0, policy: ACCEPT
Bridge chain: OUTPUT, entries: 0, policy: ACCEPT

उदाहरण २

Bridge table: filter
Bridge chain: INPUT, entries: 0, policy: ACCEPT
Bridge chain: FORWARD, entries: 1, policy: DROP
-p IPv4 -s 54:52:0:98:d7:b6 --ip-src 192.168.11.122 -j ACCEPT 
Bridge chain: OUTPUT, entries: 0, policy: ACCEPT

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

प्रश्न: केवल वर्चुअल मशीन चलाने की निर्दिष्ट आईपी-मैक जोड़े के लिए पुल पर यातायात की अनुमति कैसे दें और बंदरगाहों से आने वाले सभी अज्ञात आईपी-मैक जोड़े को ड्रॉप करें [0-9] +?

किसी भी उत्तर के लिए बहुत बहुत धन्यवाद।


2
लेकिन, क्या होगा अगर कोई उनके मैक को फोर्ज करता है?
16

1
खैर, यह भी एक समस्या है। लेकिन सही आईपी-मैक जोड़ी का अनुमान लगाना बहुत कठिन है और समय पर मेरी सेवा के सुरक्षा स्तर से अधिक है।
मार्टिन

जवाबों:


12

मैं आखिरकार एक काम करने वाले समाधान को तैयार करने में कामयाब रहा हूं।

  1. समाधान ebtables और IP-MAC जोड़े का उपयोग करता है।
  2. केवल आवश्यक तालिका डिफ़ॉल्ट 'फ़िल्टर' तालिका है।
  3. INPUT श्रृंखला में कोई नियम या नीति जोड़ने की आवश्यकता नहीं है, क्योंकि INPUT श्रृंखला आभासी मशीनों को चलाने से संबंधित नहीं है। फिल्टर टेबल में INPUT, OUTPUT और FORWARD चेन के अर्थ की व्याख्या ebtables मैनपेज में है।
  4. चूंकि ईबेबलेट्स ईथरनेट स्तर पर काम करता है और आईपी-मैक पेयरिंग केवल आईपी पैकेट के लिए उपयुक्त है, इसलिए एआरपी फ्रेम और अन्य महत्वपूर्ण ट्रैफ़िक को अवरुद्ध नहीं करने के लिए नियमों में इसे लागू करना आवश्यक है।

इसलिए, भीख मांगने में, कोई नियम नहीं हैं और सभी नीतियां ACCEPT तक निर्धारित हैं। कोई उपयोगकर्ता परिभाषित चेन नहीं हैं। फ़िल्टर तालिका इस तरह दिखती है:

Bridge table: filter
Bridge chain: INPUT, entries: 0, policy: ACCEPT
Bridge chain: FORWARD, entries: 0, policy: ACCEPT
Bridge chain: OUTPUT, entries: 0, policy: ACCEPT

एक नई श्रृंखला जोड़ दी जाती है। इस श्रृंखला में सभी अनुमत आईपी-मैक जोड़े शामिल हैं। इसे वीएमएस कहा जाता है।

# ebtables -N VMS

अब, महत्वपूर्ण हिस्सा। IP पैकेट (या उसके हिस्से) वाले प्रत्येक फ्रेम के लिए जो पोर्ट vnet [0-9] + से पुल बन रहा है, चेन पॉलिसी और चेन VMS के नियम लागू करें। दूसरे शब्दों में, किसी भी वर्चुअल मशीन से आने वाले हर आईपी पैकेट के लिए, वीएमएस चेन लागू करें।

# ebtables -A FORWARD -p ip -i vnet+ -j VMS

श्रृंखला VMS की डिफ़ॉल्ट नीति को DROP होना चाहिए। इस तरह, किसी भी वर्चुअल मशीन से आने वाले हर आईपी पैकेट को डिफ़ॉल्ट रूप से छोड़ दिया जाता है। बाद में, अनुमत आईपी-मैक जोड़े अपवाद जोड़े जाते हैं। डिफ़ॉल्ट नीति DROP का कारण बनता है, कि किसी भी वर्चुअल मशीन से अज्ञात IP-MAC जोड़ी के साथ एक बार में सभी ट्रैफ़िक को छोड़ दिया जाता है, जिससे IP स्पूफिंग असंभव हो जाती है।

# ebtables -P VMS DROP

टेबल फ़िल्टर अब इस तरह दिखता है। इसके अलावा, यह इस तरह दिखता है जब कोई वर्चुअल मशीन चल रही हो (अनुमति दी गई हो)।

Bridge table: filter
Bridge chain: INPUT, entries: 0, policy: ACCEPT
Bridge chain: FORWARD, entries: 1, policy: ACCEPT
-p IPv4 -i vnet+ -j VMS
Bridge chain: OUTPUT, entries: 0, policy: ACCEPT
Bridge chain: VMS, entries: 0, policy: DROP

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

# ebtables -A VMS -p ip --ip-src 192.168.11.125 -s 54:52:00:cc:35:fa -j ACCEPT
# ebtables -A VMS -p ip --ip-src 192.168.11.122 -s 54:52:00:98:d7:b6 -j ACCEPT

अब, अनुमत आभासी मशीनों से यातायात ठीक से बह रहा है और आईपी स्पूफिंग को रोका गया है।

यह समाधान अप्रभावी हो सकता है और यदि आपके पास कोई टिप्पणी या सुधार है, तो मैं उन्हें खुशी से सुनूंगा।

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