चाहे आप एक ओपन डीएनएस रिकर्सर या एक आधिकारिक डीएनएस सर्वर चला रहे हों, समस्या समान है और अधिकांश संभावित समाधान भी समान हैं।
सबसे अच्छा समाधान
DNS कुकीज़ एक प्रस्तावित मानक है जो DNS सर्वरों को क्लाइंट को कुकी भेजने के लिए आवश्यक तरीका देता है ताकि यह साबित किया जा सके कि क्लाइंट आईपी एड्रेस खराब नहीं हुआ है। यह पहले लुकअप के लिए एक अतिरिक्त राउंडट्रिप का खर्च करेगा, जो किसी भी समाधान की पेशकश कर सकता सबसे कम ओवरहेड है।
पुराने ग्राहकों के लिए वापसी
क्योंकि DNS कुकीज़ अभी तक मानकीकृत नहीं हैं, इसलिए निश्चित रूप से पुराने ग्राहकों को समर्थन देने और आने वाले वर्षों के लिए आवश्यक होगा।
आप DNS कुकी समर्थन के बिना क्लाइंट से सीमा अनुरोध अनुरोध कर सकते हैं। लेकिन दर सीमाएं एक हमलावर के लिए अपने DNS सर्वर को करना आसान बनाती हैं। सावधान रहें कि कुछ DNS सर्वरों में केवल आधिकारिक DNS सर्वरों के लिए डिज़ाइन की गई एक दर सीमा सुविधा है। चूंकि आप एक पुनरावर्ती रिज़ॉल्वर के बारे में पूछ रहे हैं, इसलिए कार्यान्वयन को सीमित करने वाली ऐसी दर आपके लिए लागू नहीं हो सकती है। डिज़ाइन द्वारा दर सीमा आपके सर्वर के लिए अड़चन बन जाएगी, और इस प्रकार एक हमलावर को आपको कम ट्रैफ़िक भेजने की आवश्यकता होगी, ताकि यदि कोई दर सीमा न हो तो वह वैध अनुरोधों को छोड़ सके।
दर सीमाओं का एक फायदा यह है कि अगर कोई हमलावर DNS अनुरोधों के साथ आपके DNS सर्वर को बाढ़ कर देता है, तो आपके पास क्षमता अधिक होने की संभावना है जो आपको सर्वर पर ssh और स्थिति की जांच करने की अनुमति देगा। इसके अतिरिक्त दर सीमा को मुख्य रूप से क्लाइंट आईपी से अनुरोध भेजने के लिए डिज़ाइन किया जा सकता है, जो कई अनुरोध भेज रहा है, जो आपको DoS के खिलाफ उन हमलावरों से बचाने के लिए पर्याप्त हो सकता है, जिनके पास ग्राहक IP को खराब करने की पहुंच नहीं है।
उन कारणों के लिए आपकी वास्तविक क्षमता के तहत दर की सीमा एक अच्छा विचार हो सकती है, भले ही यह वास्तव में प्रवर्धन के खिलाफ की रक्षा न करे।
टीसीपी का उपयोग करना
एक ग्राहक को टीसीपी का उपयोग करने के लिए मजबूर करना संभव है एक त्रुटि कोड भेजकर इंगित करता है कि उत्तर यूडीपी के लिए बहुत बड़ा है। इसमें कुछ कमियां हैं। इसकी लागत दो अतिरिक्त राउंडट्रिप्स हैं। और कुछ दोषपूर्ण ग्राहक इसका समर्थन नहीं करते हैं।
दो अतिरिक्त राउंडट्रीप की लागत इस दृष्टिकोण का उपयोग करके केवल पहले अनुरोध तक सीमित हो सकती है:
जब क्लाइंट आईपी की पुष्टि नहीं की गई है, तो DNS सर्वर क्लाइंट को टीसीपी में स्विच करने के लिए मजबूर करने के लिए एक छंटनी की प्रतिक्रिया भेज सकता है। छंटनी की गई प्रतिक्रिया अनुरोध के रूप में कम हो सकती है (या यदि ग्राहक EDNS0 का उपयोग करता है और प्रतिक्रिया नहीं करता है) जो प्रवर्धन को समाप्त करता है।
कोई भी क्लाइंट IP जो एक TCP हैंडशेक पूरा करता है और कनेक्शन पर DNS अनुरोध भेजता है, अस्थायी रूप से श्वेतसूची में हो सकता है। एक बार आईपीएल यूडीपी प्रश्नों को भेजने और 512 बाइट्स तक (यूडीएनएस का उपयोग करने पर 4096 बाइट्स) यूडीपी प्रतिक्रिया प्राप्त करने के लिए आईपी को श्वेत करता है। यदि एक UDP प्रतिक्रिया ICMP त्रुटि संदेश को ट्रिगर करती है, तो IP को फिर से श्वेतसूची से हटा दिया जाता है।
विधि को एक ब्लैकलिस्ट का उपयोग करके भी उलटा किया जा सकता है, जिसका अर्थ है कि क्लाइंट आईपी को डिफ़ॉल्ट रूप से यूडीपी पर क्वेरी करने की अनुमति है, लेकिन किसी भी आईसीएमपी त्रुटि संदेश के कारण आईपी को ब्लैकलिस्ट करने के लिए टीसीपी क्वेरी की आवश्यकता को ब्लैकलिस्ट किया जा सकता है।
सभी प्रासंगिक IPv4 पतों को कवर करने वाला बिटमैप 444MB मेमोरी में संग्रहीत किया जा सकता है। IPv6 पतों को किसी अन्य तरीके से संग्रहीत करना होगा।
मुझे नहीं पता कि किसी DNS सर्वर ने इस दृष्टिकोण को लागू किया है या नहीं।
यह भी बताया गया है कि प्रवर्धन हमलों में कुछ टीसीपी स्टैक्स का फायदा उठाया जा सकता है। हालांकि यह किसी भी टीसीपी आधारित सेवा पर लागू होता है, न कि केवल डीएनएस पर। इस तरह की कमजोरियों को एक कर्नेल संस्करण में अपग्रेड करके कम किया जाना चाहिए जहां एक स्टैक को SYN पैकेट के जवाब में एक से अधिक पैकेट नहीं भेजने के लिए तय किया गया है।