IPtables का उपयोग करते समय DROP के विपरीत


जवाबों:


79

एक सामान्य नियम के रूप में, जब आप पोर्ट को जानने के लिए दूसरे छोर तक पहुंचना चाहते हैं, तो REJECT का उपयोग करें, उन होस्ट के कनेक्शन के लिए DROP का उपयोग करें जिन्हें आप नहीं देखना चाहते हैं।

आमतौर पर, आपके LAN के अंदर कनेक्शन के लिए सभी नियमों का उपयोग करना चाहिए। इंटरनेट के लिए, कुछ सर्वरों पर पहचान के अपवाद के साथ, इंटरनेट से कनेक्शन आमतौर पर DROPPED हैं।

DROP का उपयोग करने से कनेक्शन एक निर्वासित आईपी पते के रूप में प्रकट होता है। स्कैनर्स उन पते को जारी नहीं रखने का चयन कर सकते हैं जो अप्रकाशित दिखाई देते हैं। यह देखते हुए कि NAT का उपयोग फ़ायरवॉल पर एक कनेक्शन को पुनर्निर्देशित करने के लिए किया जा सकता है, एक अच्छी तरह से ज्ञात सेवा का अस्तित्व एक पते पर एक सर्वर के अस्तित्व को इंगित नहीं करता है।

SMTP सेवा प्रदान करने वाले किसी भी पते पर पहचान को पारित या अस्वीकार किया जाना चाहिए। हालाँकि, SMTP सर्व के द्वारा आइडेंट लुक-अप का उपयोग उपयोग से बाहर हो गया है। चैट प्रोटोकॉल हैं जो एक कार्यशील पहचान सेवा पर भी निर्भर करते हैं।

EDIT: DROP नियमों का उपयोग करते समय: - UDP पैकेट को गिरा दिया जाएगा और व्यवहार वैसा ही होगा जैसा कि बिना सेवा वाले किसी अपरिचित पोर्ट से जुड़ने पर। - टीसीपी पैकेट एक एसीके / आरएसटी लौटाएगा, जो एक ही प्रतिक्रिया है कि इस पर कोई सेवा नहीं के साथ एक खुला पोर्ट जवाब देगा। कुछ राउटर सर्वरों की ओर से और ACK / RST के साथ जवाब देंगे जो नीचे हैं।

REJECT नियमों का उपयोग करते समय एक ICMP पैकेट भेजा जाता है जो यह दर्शाता है कि पोर्ट अनुपलब्ध है।


5
यह सच नहीं है। यहां तक ​​कि जब नियम कहता है कि "DROP" सिस्टम अभी भी आने वाले पैकेट को TCP SYN / ACK के साथ उत्तर देगा जैसे कि यह खुला था। किसी पैकेट को सही मायने में छोड़ने के लिए, सिस्टम को एक टीसीपी आरएसटी / एसीके के साथ जवाब देना होगा - जिसके लिए कोई फ़ायरवॉल नियम नहीं है। जैसे, सबसे अच्छा फ़ायरवॉल सेटअप वह है जहाँ केवल चयनित पोर्ट अग्रेषित किए जाते हैं। आपका DROP नियम आपके फ़ायरवॉल को विज्ञापित करेगा और पोर्ट-स्कैनर्स को पता चल जाएगा कि आप कुछ फ़ायरवॉल कर रहे हैं और अपने फ़ायरवॉल को पकड़ने की उम्मीद में आपको हथौड़ा मारते रहेंगे।
दागे

2
मेरी बात यह है कि बाहर से यह पता लगाया जा सकता है कि क्या आप किसी चीज की वजह से फायरवॉल कर रहे हैं या नहीं, केवल इस तथ्य के कारण कि आपका टीसीपी स्टैक अलग-अलग व्यवहार करता है जब आप डीआरओपी की तुलना में तब करते हैं जब आपके पास पहले स्थान पर चलने वाली सेवा नहीं होती है!
दागे

2
इस तथ्य में परिवर्तन नहीं करता है कि अंतर पर बोटनेट्स पूंजीकरण कर रहे हैं और परिणामस्वरूप आपके बंदरगाहों की निगरानी कर रहे हैं।
14

1
आप जो भी करते हैं, लगातार करते हैं। यदि हमलावर एक अप्रयुक्त पोर्ट नंबर चुनता है और कनेक्ट करने का प्रयास करता है, तो उसे उसी तरह की प्रतिक्रिया मिलनी चाहिए जैसे कि उसने एक को चुना है जिसे आप उद्देश्यपूर्ण रूप से अवरुद्ध कर रहे हैं। एक अलग प्रतिक्रिया देते हुए उसे बताता है कि वहां कुछ है। उदाहरण के लिए, वह purtnumber का उपयोग कर सकता है जो यह निर्धारित करने के लिए एक अलग प्रतिक्रिया देता है कि आप किस डेटाबेस सर्वर का उपयोग कर रहे हैं वह उस सर्वर पर SQL इंजेक्शन दर्जी कर सकता है ...
user313114

5
@ आप कहां से जानकारी प्राप्त कर रहे हैं कि DROP एक प्रतिक्रिया भेजता है? यह बड़ी खबर है और मैंने जो कुछ भी देखा है और बताया गया है, उस पर सब कुछ चलाता है। क्या आपके पास इस व्यवहार का वर्णन करने वाले दस्तावेज़ का लिंक है?
स्कोर_उंडर

27

अंतर यह है कि REJECT लक्ष्य स्रोत को अस्वीकार प्रतिक्रिया भेजता है, जबकि DROP लक्ष्य कुछ भी नहीं भेजता है।

यह पहचान सेवा के लिए उपयोगी हो सकता है। यदि आप REJECT का उपयोग करते हैं तो ग्राहकों को टाइमआउट की प्रतीक्षा करने की आवश्यकता नहीं है।

इसके बारे में और अधिक: http://www.linuxtopia.org/Linux_Firewall_iptables/x4550.html


2
DROP लक्ष्य कुछ भी नहीं भेजता है। यदि आप विवरण में रुचि रखते हैं, तो स्वीकृत उत्तर पर मेरी टिप्पणी की जाँच करें और विषय पर स्वयं शोध करें!
दागे

8

आमतौर पर, आप हमलावरों से कुछ बंदरगाहों तक जांच को अनदेखा करना चाहते हैं , जिसका मतलब है कि आप 'कनेक्शन मना कर दिया' वापस नहीं भेजना चाहते हैं। 'कनेक्शन मना कर दिया' का अर्थ है: 'यहाँ एक सर्वर है', और संभवतः अधिक जानकारी देता है, जबकि एक पैकेट छोड़ने से सॉफ़्टवेयर संस्करणों, संभावित कमजोरियों या यहां तक ​​कि इस तथ्य के बारे में सुराग नहीं मिलता है कि एक सर्वर आपको आईपी सुन रहा है।

ऊपर REJECT के बजाय DROP का उपयोग करने के मुख्य कारणों में से एक है।


6
Iptables नियमों के बिना, एक बंद पोर्ट REJECT को डिफॉल्ट करता है। यदि आप हर पोर्ट को DROP करते हैं, तो यह एक अच्छा विकल्प है (आपका होस्ट नीचे दिखाई देता है) लेकिन यदि आप केवल विशिष्ट पोर्ट को ही DROP करते हैं, तो आप वास्तव में REJECT की तुलना में उन्हें अधिक जानकारी दे रहे हैं। यदि कोई व्यक्ति कंबल जांच का उपयोग करता है जैसे कि नैमप, विशिष्ट पोर्ट जो ड्रॉप पैकेट "फ़िल्टर्ड" के रूप में दिखाई देंगे, जिसका अर्थ है कि वे जानते हैं कि आपके पास एक सेवा है जिसे आप छिपा रहे हैं।
Raptor007

7

मुझे यहाँ बहुत सारे परस्पर विरोधी उत्तर मिलते हैं और यह सही कीवर्ड के साथ Google में पहला लेख है; यहाँ सही व्याख्या है।
यह सरल है:

DROP पैकेट के साथ कुछ भी नहीं करता है। यह एक मेजबान को अग्रेषित नहीं किया जाता है, इसका जवाब नहीं मिलता है। IPtables का मैनपेज कहता है कि यह पैकेट को फर्श पर गिराता है, यानी यह पैकेट के साथ कुछ भी नहीं करता है।

REJECT DROP में भिन्न होता है कि वह एक पैकेट वापस भेजता है, लेकिन इसका उत्तर ऐसा है जैसे कि कोई सर्वर IP पर स्थित है, लेकिन सुनने की स्थिति में पोर्ट नहीं है। IPtables टीसीपी के मामले में या यूडीपी के साथ एक आईसीएमपी गंतव्य पोर्ट अनुपलब्ध होने पर एक आरएसटी / एसीके भेजेगा।


2
मेरे से +1, लेकिन जवाब वास्तव में असहमत नहीं हैं। वे सभी सहमत हैं, जहां तक ​​मैं देख सकता हूं, डाग्ल्फ को छोड़कर - जो गलत है।
मध्याह्न

ठीक है, यहाँ आपके लिए एक छोटी सी चाल है: एक "नैम्प लोकलहोस्ट" करें। अब कोई भी पोर्ट चुनें जो "ओपन" नहीं है ... और एक नियम जोड़ें जो "कुछ नहीं करता है", जैसे: "iptables -I INPUT -p tcp --dport 888 -j DROP"। अब "नैम्प लोकलहोस्ट" फिर से। क्या देखती है? ...
दागे

4

यदि आप अपनी मशीन के अस्तित्व को पूरी तरह से छिपाने की कोशिश कर रहे हैं, -j DROPतो उचित है। उदाहरण के लिए, आप ब्लैकलिस्ट को लागू करने के लिए इसका उपयोग कर सकते हैं।

यदि आप इस तथ्य को छिपाने की कोशिश कर रहे हैं कि एक पोर्ट खुला है, तो आपको उस व्यवहार की नकल करनी चाहिए जो पोर्ट नहीं खुला था।

  • टीसीपी: -p tcp -j REJECT --reject-with tcp-reset
  • यूडीपी: -p udp -j REJECT --reject-with icmp-port-unreachable

यदि एक पोर्ट स्कैनर देखता है कि कुछ पोर्ट पैकेट गिरा रहे हैं जबकि अधिकांश उन्हें अस्वीकार कर रहे हैं, तो यह मान सकते हैं कि गिराए गए पोर्ट उन पोर्ट पर हैं जो खुले हैं लेकिन छिपे हुए हैं।


क्या होगा यदि आप कुछ पोर्ट खोलते हैं (यानी 22, 25, 53, 80, 443) और फिर डीआरओपी बाकी सब कुछ? अब क्या मेरे पास MySQL, PostgreSQL, SQLite, या Cassandra चल रहा है ... स्कैनर बता नहीं सकता है, है ना?
एलेक्सिस विल्के

@AlexisWilke उस स्थिति में, केवल अतिरिक्त जानकारी जो आप पोर्ट स्कैनर दे रहे हैं, वह यह है कि आपके पास डिफ़ॉल्ट DROP नीति के साथ किसी प्रकार का फ़ायरवॉल है।
Raptor007

0

बहुत सारे सही उत्तरों के बावजूद, मेरे दो सेंट:

यहाँ एक संक्षिप्त PoC FW.IDS-DROP-vs-REJECT टू सब्जेक्ट है जो प्रतिबंध-प्रणाली (फ़ायरवॉल, आईडीएस, आदि) के नियमों के संबंध में है।

कुछ ही समय:

  • DROP यदि सभी बंदरगाहों पर प्रतिबंध लगा दिया जाए, तो यह आवर्ती घुसपैठियों के लिए इस्तेमाल किया जा सकता है (इसलिए ऐसा लगता है कि सर्वर घुसपैठिए की तरफ नीचे है)
  • REJECT --reject-with tcp-reset बहु-बंदरगाह प्रतिबंध के लिए सबसे अच्छा विकल्प है, क्योंकि यह वास्तविक बंद बंदरगाह के रूप में व्यवहार करता है
  • यदि कुछ पोर्ट जवाब दे रहे हैं (घुसपैठिया जानता है कि मेजबान जीवित है), DROPऔर REJECT(बिना tcp-reset) घुसपैठिए को एक "सिग्नल" देगा कि कुछ अवरुद्ध है (ताकि उसे आवश्यक डेटा प्रदान करने के लिए "हमले" को जारी रखने के लिए उत्तेजित कर सके। किन्हीं बिंदुओं पर)

-5

हां, DROP का उपयोग करना व्यर्थ है। REJECT का उपयोग करें।

यहां तक ​​कि जब नियम कहता है कि "DROP" सिस्टम अभी भी एक आने वाले SYN को एक TCP RST / ACK के साथ देता है - जो कि बिना सेवाओं के चलने वाले बंदरगाहों के लिए डिफ़ॉल्ट व्यवहार है। (tcpdump et al यह लॉग नहीं करता है।)

यदि कोई सेवा चल रही है, तो SYN की मुलाकात TCP SYN / ACK से होती है।

क्योंकि DROP टीसीपी SYN / ACK के साथ सामान्य रूप से प्रतिक्रिया नहीं देता है, लेकिन इसके बजाय RST / ACK के साथ, आपका DROP नियम आपके फ़ायरवॉल को विज्ञापित करेगा और पोर्ट-स्कैनर को पता चल जाएगा कि आप कुछ फ़ायरवॉल कर रहे हैं और आपको आशाओं में बाधा उत्पन्न हो सकती है। अपने फ़ायरवॉल को पकड़ने के नीचे।

यह अब उदाहरण के लिए "बंद" के बजाय "फ़िल्टर किए गए" रिपोर्ट कर सकता है:

$ nmap localhost

Starting Nmap 6.40 ( http://nmap.org ) at 2018-03-14 00:21 SAST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000060s latency).
Not shown: 986 closed ports
PORT     STATE SERVICE
21/tcp   open  ftp
53/tcp   open  domain
80/tcp   open  http

Nmap done: 1 IP address (1 host up) scanned in 1.60 seconds

$ iptables -I INPUT -p tcp --dport 1111 -j DROP
$ nmap localhost

Starting Nmap 6.40 ( http://nmap.org ) at 2018-03-14 00:21 SAST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000060s latency).
Not shown: 986 closed ports
PORT     STATE SERVICE
21/tcp   open  ftp
53/tcp   open  domain
80/tcp   open  http
1111/tcp filtered lmsocialserver

Nmap done: 1 IP address (1 host up) scanned in 1.60 seconds

$ iptables -D INPUT 1

जैसे, एकमात्र "अदृश्य" फायरवॉलिंग सेटअप वह है जहां एक समर्पित डिवाइस आपके उपकरणों के बीच बैठता है और केवल चुनिंदा फॉरवर्ड बंदरगाहों के बीच होता है।

यदि आप वास्तव में बुनियादी स्कैनर के साथ गड़बड़ करना चाहते हैं, तो आप टीसीपी कनेक्शन को टीसीपी कर सकते हैं, जो टीसीपी विंडो को 0 पर सेट करता है ताकि कनेक्शन के खुलने के बाद कोई डेटा स्थानांतरित न हो सके, कनेक्शन को बंद करने के अनुरोध की अनदेखी करते हुए, जिसका अर्थ है कि स्कैनर को इंतजार करना होगा कनेक्शन टाइमआउट होने के लिए, यदि वह सुनिश्चित होना चाहता है। लेकिन यह एक हमलावर के लिए यह पता लगाने और उसके समय बहुत कम करने के लिए तुच्छ है।

जिन सभी बातों पर विचार किया गया है, आप शायद सबसे बेहतर हैं कि केवल REJECT का उपयोग करें - या अपने सर्वर और इंटरनेट के बीच एक समर्पित पोर्ट अग्रेषण उपकरण डालें।

या बस अपने इंटरनेट का सामना करने वाली मशीनों पर सेवाओं को चलाने के लिए जिन्हें फ़ायरवॉल की आवश्यकता नहीं है।

आमतौर पर REJECT वेब सर्वरों के लिए सबसे अच्छा है, क्योंकि जो भी सेवा इसे एक्सेस करने की कोशिश कर रही है (शायद अधिक बार नहीं, आप) जल्दी से एक प्रतिक्रिया मिलेगी और अगर नेटवर्क आउटेज है तो उपयोगकर्ताओं या अन्य सेवाओं को इंतजार करते हुए नहीं रखा जाएगा।


5
यह उत्तर गलत है। इसे आसानी से tcpdump के साथ दिखाया जा सकता है कि DROP नियम के परिणामस्वरूप सिस्टम को कोई जवाब नहीं भेजा जाएगा - जैसा कि कोई अपेक्षा करेगा। और आपका कथन "सही मायने में एक पैकेट को छोड़ने के लिए, सिस्टम को एक टीसीपी आरएसटी / एसीके के साथ जवाब देने की जरूरत है" इसका कोई मतलब नहीं है क्योंकि किसी भी चीज का जवाब देना जाहिर है "वास्तव में एक पैकेट को गिराना" नहीं है। यदि आप पैकेट को वास्तव में "ड्रॉप" करते हैं, तो आप जवाब नहीं देते हैं और यह डीआरआरपी नियम का प्रभाव है।
जूलियन होल्स्टर

3
क्या आप आरोप के लिए कोई स्रोत प्रदान कर सकते हैं जो DROPजारी करेगा SYN/ACK? मैंने अपनी मशीनों पर ऐसा कभी नहीं देखा।
motobói

2
@Dagelf आपका लेख कहता है "DROP (उर्फ DENY, BLACKHOLE) पास से आने वाले पैकेट को प्रतिबंधित करें। कोई प्रतिक्रिया न भेजें।"
जीन्ट

यह सामान्य प्रतिक्रिया नहीं भेजता है, लेकिन यह किसी को भी समझाए बिना भेजता है।
Dagelf

3
दस्तावेज़ जिसे आप कहते हैं " DROP ... कोई प्रतिक्रिया नहीं भेजें ", और जहां तक ​​मैं देख सकता हूं, अपने दावे का समर्थन करता है, जो आपको DROPरिटर्न नहीं देता है SYN/ACK। मैंने भी, किसी भी संस्करण के तहत इस व्यवहार को कभी नहीं देखा है iptables। यदि आपके पास कोई ऐसा स्रोत है जो आपके दावे का समर्थन करता है, तो इसे देखना सबसे उपयोगी होगा; निश्चित रूप से, पैकेट डंप जो मैंने अभी किया है वह आपके दावे का समर्थन नहीं करता है।
मध्याह्न
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.