हमारे पास Ubuntu 12.04 सर्वर है जिसमें httpd 80 पोर्ट पर है और हम इसे सीमित करना चाहते हैं:
- http से 10 तक प्रति आईपी पते का अधिकतम कनेक्शन
- httpd से 150 तक प्रति सेकंड अधिकतम नए कनेक्शन
हम iptables के साथ यह कैसे कर सकते हैं?
हमारे पास Ubuntu 12.04 सर्वर है जिसमें httpd 80 पोर्ट पर है और हम इसे सीमित करना चाहते हैं:
हम iptables के साथ यह कैसे कर सकते हैं?
जवाबों:
iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 15 --connlimit-mask 32 -j REJECT --reject-with tcp-reset
यह एक स्रोत आईपी से 15 से ऊपर के कनेक्शन को अस्वीकार कर देगा।
iptables -A INPUT -m state --state RELATED,ESTABLISHED -m limit --limit 150/second --limit-burst 160 -j ACCEPT
इसमें 150 नए कनेक्शन (पैकेट) प्रति सेकंड लागू होने से पहले 160 नए कनेक्शन (पैकेट वास्तव में) की अनुमति है।
-m conntrack --ctstate
स्थान पर उपयोग करने पर भी विचार कर सकते हैं -m state --state
। कंवर्ट नया और बेहतर बनाम राज्य है।
NEW
कनेक्शन के लिए 2 नियम जोड़ने के लिए ऊपर टिप्पणी - ऐसा मत करो - यह प्रभावी रूप से आपकी INPUT
श्रृंखला को डिफ़ॉल्ट रूप से बदल देता है accept
!!!
आप अपने प्रश्न में दोनों आवश्यकताओं का जवाब देने के लिए अपने iptables में निम्नलिखित नियम चाहते हैं:
iptables -t filter -I INPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -I INPUT -p tcp --dport 80 -m state \
--state RELATED,ESTABLISHED -j ACCEPT
# Adjust "--connlimit-above NN" to limit the maximum connections per IP
# that you need.
iptables -t filter -I INPUT -p tcp --syn --dport 80 -m connlimit \
--connlimit-above 10 --connlimit-mask 32 -j DROP
# Adjust "--connlimit-above NNN" to the maximum total connections you
# want your web server to support
iptables -t filter -I INPUT -p tcp --syn --dport 80 -m connlimit \
--connlimit-above 150 -j DROP
क्योंकि हम उपयोग कर रहे हैं -I (ओपी अनुरोध के अनुसार) हमें उन्हें उल्टे क्रम में करना है इसलिए उन्हें नीचे से ऊपर 'पढ़ें'।
मैं यह भी विचार करने का सुझाव देता हूं - 32 से 24 तक -Nnnnitit- मास्क NN परिवर्तन। यह एक पूर्ण श्रेणी-सी नेटवर्क (एक ही सीमा में अधिकतम 256 आईपी पते) को 10 कनेक्शनों तक सीमित कर देगा। आप किसी अन्य वर्गहीन संख्या जैसे 22 या 30 का उपयोग इस आधार पर भी कर सकते हैं कि आपको लगता है कि आपकी सेवा का उपयोग कैसे किया जा सकता है।
इसके अलावा, आप कैसे ग्राहक व्यवहार करने के लिए चाहते हैं पर निर्भर करता है, तो आप कर सकते हैं इसके बाद के संस्करण दो नियमों में "-j ड्रॉप" के बजाय का उपयोग करने के लिए "-j अस्वीकार --reject-साथ टीसीपी-रीसेट" या यहाँ तक कि केवल 150 कनेक्शन अधिकतम में चाहते हैं, राज करते हैं।
यदि आप कनेक्शन को कनेक्ट करते हैं तो पोर्ट 80 का उपयोग करने वाला ब्राउज़र या सॉफ़्टवेयर तुरंत "उपलब्ध नहीं" स्थिति दिखाएगा, लेकिन DROP विकल्प ग्राहक को साइट उपलब्ध नहीं होने से पहले रिपोर्ट करने से पहले कुछ समय इंतजार करने और पुन: प्रयास करने का कारण होगा। मैं स्वयं डीआरओपी की ओर झुकाव करता हूं क्योंकि यह एक ऑफ़लाइन सर्वर की तुलना में खराब कनेक्शन की तरह व्यवहार करता है।
इसके अलावा, यदि कनेक्शन सीमा 150 से नीचे (या 10) से कम हो जाती है, जबकि यह अभी भी पुन: प्रयास कर रहा है, तो यह अंत में आपके सर्वर से मिलेगा।
REJECT विकल्प से आपकी साइट पर कुछ हद तक ट्रैफ़िक कम हो जाएगा, क्योंकि DROP के कारण अतिरिक्त पैकेट भेजना होगा जबकि यह पुन: प्रयास करता है। शायद यह सब प्रासंगिक नहीं है।
यदि दूसरी तरफ आपका पोर्ट 80 ट्रैफ़िक क्लस्टर का हिस्सा है, तो REJECT क्लस्टर कंट्रोलर को बताएगा कि यह डाउन है और इसे रिट्रीट टाइमआउट की अवधि के लिए ट्रैफ़िक भेजना बंद करना है।
संबंधित, स्थापित नियम यह है कि इस धारणा के तहत कि आपका डिफ़ॉल्ट नियम सभी ट्रैफ़िक को रोकना है (iptables -t filter -P INPUT DROP)। यह सिर्फ स्वीकार किए गए कनेक्शन से संबंधित फ्यूचर पैकेट को स्वीकार करता है।
इसके अलावा - एसएसएन इसे टीसीपी कनेक्शन स्थापित करने वाले पैकेट पर ध्यान देना (या गिनना) बताता है।
आपको उन connlimit
मॉड्यूल का उपयोग करने की आवश्यकता है जो आपको क्लाइंट आईपी पते (या एड्रेस ब्लॉक) पर सर्वर के समानांतर टीसीपी कनेक्शन की संख्या को प्रतिबंधित करने की अनुमति देता है।
/sbin/iptables -I INPUT -p tcp --syn --dport 80 -m connlimit \
--connlimit-above 10 -j DROP