किसी ने मुझसे कहा कि यह संभव है, लेकिन मुझे Google या मैन पेजों पर कुछ भी नहीं मिल रहा है।
मुझे एक निश्चित समय के लिए आईपी पर प्रतिबंध लगाने की आवश्यकता है, और फिर स्वचालित रूप से अप्रतिबंधित है।
किसी ने मुझसे कहा कि यह संभव है, लेकिन मुझे Google या मैन पेजों पर कुछ भी नहीं मिल रहा है।
मुझे एक निश्चित समय के लिए आईपी पर प्रतिबंध लगाने की आवश्यकता है, और फिर स्वचालित रूप से अप्रतिबंधित है।
जवाबों:
यदि आप iptables का मतलब पूरी तरह से नियम को अपने आप से हटाने के लिए करते हैं तो आप इसे नहीं कर पाएंगे, जहाँ तक मुझे पता है। इसका उद्देश्य क्या है? यदि आपको किसी प्रकार की स्वचालित अस्थायी प्रतिबंध की आवश्यकता है तो मानक समाधान विफल हो जाता है ।
वैकल्पिक रूप से आप अपने द्वारा जोड़े जा रहे नियम को हटाने के लिए क्रोन जॉब का उपयोग कर सकते हैं, या, यदि आप इसे अंतःक्रियात्मक रूप से करना चाहते हैं, तो बेहतर है at
:
iptables -I INPUT -s 192.168.1.100 -j DROP
echo "iptables -D INPUT -s 192.168.1.100 -j DROP" | at @10pm
इसके अलावा recent
iptables के मॉड्यूल पर एक नज़र डालें । इसके --seconds
विकल्प के साथ यह आपकी वास्तविक जरूरतों के आधार पर मदद का हो सकता है। man iptables
अधिक जानकारी के लिए।
/bin/sh
डिफ़ॉल्ट रूप से है। लेकिन यह शायद इस मामले में एक समस्या नहीं होगी।
नियमों में टाइमस्टैम्प (संभवत: सेकंड के बाद से) के साथ एक टिप्पणी डालें। समय-समय पर समाप्त नियमों के लिए स्वीप करें।
ध्यान दें कि सबसे हाल ही में लिनक्स कर्नेल में आईपी पते के डायनेमिक लोडिंग के लिए समर्थन है, जो प्रत्यक्ष आईपीएलटेबल्स नियमों के बजाय आईपीटेबल नियमों द्वारा परामर्शित कैश में है।
उदाहरण:
iptables -A INPUT -s 192.168.200.100/32 -m comment --comment "expire=`date -d '+ 5 min' +%s`" -j DROP
iptables -L INPUT -n --line-numbers | tac | perl -ne 'next unless /(^\d+).*expire=(\d+)/; if ($2 < time) { print "iptables -D INPUT $1\n"; }'
आप निश्चित रूप iptables -D INPUT $1
से कमांड को प्रिंट करने के बजाय कर सकते हैं ।
iptables -L FORWARD --line-numbers | sort -r | awk 'substr($8,1,4) == "exp@" && substr($8,5) < systime() { systems("iptables -D FORWARD " $1) }'
जहाँ नियम बनाये जाते हैं:iptables -A FORWARD -j DROP -m comment --comment "exp@EPOCH"
iptables -L FORWARD --line-numbers | tac | perl -walne 'system "iptables -D FORWARD $F[0]" if $F[-2] =~ /^expire=(\d+)$/ and $1<time()'
यदि उपयोगकर्ता परिभाषित शर्तों को पूरा कर रहे हैं तो iptables की सूची में स्वचालित रूप से आईपी पते जोड़ने की एक विधि है। मैं अपने ssh पोर्ट पर स्वचालित हैक प्रयासों से बचने में मदद के लिए निम्नलिखित का उपयोग करता हूं:
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --name ssh --seconds 60 --reap -j DROP
यह एक ही आईपी पते से हर 60 सेकंड में कनेक्शन प्रयासों को सीमित करके सर्वर तक पहुंच प्राप्त करने के लिए स्वचालित प्रयासों को सीमित करने में मदद करता है।
यदि आप समय सीमा में प्रयासों की एक निर्धारित संख्या, जैसे कि 4 से 5 मिनट में, और असफल होने पर उन्हें लंबी अवधि के लिए ब्लैकलिस्ट करना चाहते हैं, जैसे कि 24 घंटे, आप कुछ ऐसा कर सकते हैं:
iptables -X black
iptables -N black
iptables -A black -m recent --set --name blacklist -j DROP
iptables -X ssh
iptables -N ssh
iptables -I ssh 1 -m recent --update --name blacklist --reap --seconds 86400 -j DROP
iptables -I ssh 2 -m recent --update --name timer --reap --seconds 600 --hitcount 4 -j black
iptables -I ssh 3 -m recent --set --name timer -j ACCEPT
iptables -A INPUT -p TCP --dport ssh -m state --state NEW -j ssh
उपरोक्त में, हम 2 श्रृंखला बनाते हैं; "ssh" और "ब्लैक", और 2 सूचियां; "टाइमर", और "ब्लैकलिस्ट"।
संक्षेप में, ऊपर दिखाई गई अंतिम श्रृंखला ssh श्रृंखला में "द्वार" है।
"--Reap" विकल्प कर्नेल को सूची के माध्यम से खोज करने और निर्धारित समय सीमा से अधिक पुरानी किसी भी वस्तु को शुद्ध करने के लिए कहता है; सूची "टाइमर" के लिए 5 मिनट, और सूची "ब्लैक लिस्ट" के लिए 24 घंटे।
नोट: अतिरिक्त रिक्त स्थान पठनीयता के लिए हैं, और आपके शेल स्क्रिप्ट में वैकल्पिक हैं।
IPTables में इसके लिए स्पष्ट रूप से बनाया गया एक फ़ीचर है: IP सेट। आप एक बार नियम बनाते हैं और यह हमेशा की तरह जारी रहता है लेकिन यह मैचों के लिए ips (या पोर्ट) के एक सेट में जांच करता है। अच्छी बात यह है कि यह सेट बाकी फ़ायरवॉल को परेशान किए बिना गतिशील और कुशलतापूर्वक अद्यतन किया जा सकता है।
इसलिए, इसका उपयोग करने के लिए, आपको अभी भी उपयोग करना होगा at
या cron
हटाने का शेड्यूल करना होगा।
आप IP पतों पर प्रतिबंध लगाने और एक पते पर प्रतिबंध लगाने के समय की लंबाई को कॉन्फ़िगर करने के लिए fail2ban का उपयोग कर सकते हैं ।
जैसा कि किसी ने पहले ही कहा था: आपको इस सुविधा के लिए ipset का उपयोग करना चाहिए।
ipset टाइमआउट मान के साथ आईपी एड्रेस जोड़ सकते हैं। जब समय समाप्त होता है, तो रिकॉर्ड स्वचालित रूप से ipset से हटा दिया जाएगा।
timeout
All set types supports the optional timeout parameter when creating a set and adding entries. The value of the timeout parameter for the create command means the default timeout value (in seconds) for new entries. If a set is created with timeout support, then the same timeout option can be used to specify non-default timeout values when adding entries. Zero timeout value means the entry is added permanent to the set. The timeout value of already added elements can be changed by readding the element using the -exist option. Example:
ipset create test hash:ip timeout 300
ipset add test 192.168.0.1 timeout 60
ipset -exist add test 192.168.0.1 timeout 600
http://ipset.netfilter.org/ipset.man.html
इस व्यवहार को नियंत्रित करने के लिए यह बेहतर तरीका है।
इस बात पर निर्भर करता है कि आप नेटफिल्टर को हाल ही में पूरा करना चाहते हैं या इसे पूरा करने के लिए टाइम मॉड्यूल का इस्तेमाल किया जा सकता है।
दोनों iptables मैन पेज में प्रलेखित हैं ।