Iptables नियमों को कैसे समाप्त करें?


18

किसी ने मुझसे कहा कि यह संभव है, लेकिन मुझे Google या मैन पेजों पर कुछ भी नहीं मिल रहा है।

मुझे एक निश्चित समय के लिए आईपी पर प्रतिबंध लगाने की आवश्यकता है, और फिर स्वचालित रूप से अप्रतिबंधित है।

जवाबों:


18

यदि आप 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 

इसके अलावा recentiptables के मॉड्यूल पर एक नज़र डालें । इसके --secondsविकल्प के साथ यह आपकी वास्तविक जरूरतों के आधार पर मदद का हो सकता है। man iptablesअधिक जानकारी के लिए।


ओह वाह 'एट' की नौकरी बहुत अच्छी लगती है। क्या मैं इसे नोह और & से जोड़ सकता हूं? कैसे?
HappyDeveloper

Nohup का उपयोग करने की कोई आवश्यकता नहीं है - जिस काम को आप इसे बनाने के लिए उपयोग करते हैं उस टर्मिनल से स्वतंत्र रूप से निष्पादित किया जाता है। इसका मतलब यह है कि यह एक शेल में चलाया जाता है जो आपके पर्यावरण चर को विरासत में नहीं लेता है, और यह /bin/shडिफ़ॉल्ट रूप से है। लेकिन यह शायद इस मामले में एक समस्या नहीं होगी।
एडुआर्डो इवानेक

9

नियमों में टाइमस्टैम्प (संभवत: सेकंड के बाद से) के साथ एक टिप्पणी डालें। समय-समय पर समाप्त नियमों के लिए स्वीप करें।

ध्यान दें कि सबसे हाल ही में लिनक्स कर्नेल में आईपी पते के डायनेमिक लोडिंग के लिए समर्थन है, जो प्रत्यक्ष आईपीएलटेबल्स नियमों के बजाय आईपीटेबल नियमों द्वारा परामर्शित कैश में है।

उदाहरण:

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से कमांड को प्रिंट करने के बजाय कर सकते हैं ।


महान विचार। यकीन नहीं है कि
स्वीपिंग

+1 बहुत अच्छा विचार, शायद सबसे सरल नहीं, लेकिन निश्चित रूप से साफ-सुथरा है।
काइल स्मिथ

1
@ हेप्पीड्यूपर: ऐड / स्वीप के लिए उदाहरण दिया गया है
सेठ रॉबर्टसन

1
हाहा मुझे ऐसा ही करना था, मैंने अपनी सफाई के लिए awk का इस्तेमाल किया: 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"
काइल स्मिथ

पर्ल में मेरे 2 सेंट:iptables -L FORWARD --line-numbers | tac | perl -walne 'system "iptables -D FORWARD $F[0]" if $F[-2] =~ /^expire=(\d+)$/ and $1<time()'
tuomassalo

5

यदि उपयोगकर्ता परिभाषित शर्तों को पूरा कर रहे हैं तो 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 श्रृंखला में "द्वार" है।

  • Ssh श्रृंखला में नियम 1 यह देखने के लिए जाँचता है कि क्या स्रोत आईपी "ब्लैकलिस्ट" सूची में है। यदि ऐसा है, तो कनेक्शन को हटा दिया जाता है और 24 घंटे के ब्लैकलिस्ट टाइमर को फिर से शुरू किया जाता है। यदि नियम 1 गलत है, तो हम नियम 2 पर जाते हैं।
  • स्रोत श्रृंखला में नियम 2 यह देखने के लिए कि क्या IP ने 5 मिनट में 4 से अधिक कनेक्शन के प्रयास किए हैं। यदि हां, तो यह पैकेट को "ब्लैक" श्रृंखला में भेजता है जहां इसे "ब्लैक लिस्ट" सूची में जोड़ा जाता है। श्रृंखला "काला" तब कनेक्शन को ड्रॉप करता है, और हम कर रहे हैं।
  • नियम 1 में ssh 3 केवल "ssh" तक पहुँचता है यदि नियम 1 और 2 गलत हैं। यदि ऐसा है, तो पैकेट को स्वीकार किया जाता है और स्रोत आईपी को "टाइमर" सूची में जोड़ा जाता है, ताकि हम कनेक्शन के प्रयास की आवृत्ति की निगरानी कर सकें।

"--Reap" विकल्प कर्नेल को सूची के माध्यम से खोज करने और निर्धारित समय सीमा से अधिक पुरानी किसी भी वस्तु को शुद्ध करने के लिए कहता है; सूची "टाइमर" के लिए 5 मिनट, और सूची "ब्लैक लिस्ट" के लिए 24 घंटे।

नोट: अतिरिक्त रिक्त स्थान पठनीयता के लिए हैं, और आपके शेल स्क्रिप्ट में वैकल्पिक हैं।


3

IPTables में इसके लिए स्पष्ट रूप से बनाया गया एक फ़ीचर है: IP सेट। आप एक बार नियम बनाते हैं और यह हमेशा की तरह जारी रहता है लेकिन यह मैचों के लिए ips (या पोर्ट) के एक सेट में जांच करता है। अच्छी बात यह है कि यह सेट बाकी फ़ायरवॉल को परेशान किए बिना गतिशील और कुशलतापूर्वक अद्यतन किया जा सकता है।

मुख्य वेबसाइट , उदाहरण

इसलिए, इसका उपयोग करने के लिए, आपको अभी भी उपयोग करना होगा atया cronहटाने का शेड्यूल करना होगा।


2

आप IP पतों पर प्रतिबंध लगाने और एक पते पर प्रतिबंध लगाने के समय की लंबाई को कॉन्फ़िगर करने के लिए fail2ban का उपयोग कर सकते हैं ।


2

जैसा कि किसी ने पहले ही कहा था: आपको इस सुविधा के लिए 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

इस व्यवहार को नियंत्रित करने के लिए यह बेहतर तरीका है।


0

मुझे एक निश्चित समय के लिए आईपी पर प्रतिबंध लगाने की आवश्यकता है, और फिर स्वचालित रूप से अप्रतिबंधित है।

आप निम्नलिखित कोशिश कर सकते हैं

# iptables -I INTPUT -s xxx.xxx.xxx.xxx -m time --utc --datestart 2013-09-09T15:00 --datestop 2013-09-09T15:30 -j DROP

0

इस बात पर निर्भर करता है कि आप नेटफिल्टर को हाल ही में पूरा करना चाहते हैं या इसे पूरा करने के लिए टाइम मॉड्यूल का इस्तेमाल किया जा सकता है।

दोनों iptables मैन पेज में प्रलेखित हैं ।

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