จะทำให้กฎ iptables หมดอายุได้อย่างไร


18

มีคนบอกฉันว่านี่เป็นไปได้ แต่ฉันไม่พบอะไรเลยบนหน้า google หรือ man

ฉันต้องแบนไอพีในระยะเวลาหนึ่งจากนั้นยกเลิกการแบนโดยอัตโนมัติ

คำตอบ:


18

หากคุณต้องการให้ iptables ลบกฎโดยสมบูรณ์คุณจะไม่สามารถทำได้เท่าที่ฉันรู้ จุดประสงค์ของสิ่งนี้คืออะไร? หากคุณต้องการชนิดของชั่วคราวอัตโนมัติบางอย่างห้ามการแก้ปัญหามาตรฐานคือfail2ban

อีกทางหนึ่งคุณสามารถใช้งาน cron เพื่อลบกฎที่คุณเพิ่มหรือดีกว่าถ้าคุณต้องการทำงานแบบโต้ตอบ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สำหรับข้อมูลเพิ่มเติม.


โอ้ว้าวงาน 'at' ดูดีมาก ฉันสามารถรวมเข้ากับ nohup และ &? อย่างไร?
HappyDeveloper

ไม่จำเป็นต้องใช้ nohup - งาน at จะถูกดำเนินการอย่างเป็นอิสระจากสถานีที่คุณใช้ในการสร้างมัน ซึ่งหมายความว่ามันทำงานในเชลล์ที่ไม่ได้สืบทอดตัวแปรสภาพแวดล้อมของคุณโดยวิธีการและเป็น/bin/shค่าเริ่มต้น แต่นั่นอาจจะไม่เป็นปัญหาในกรณีนี้
Eduardo Ivanec

9

ใส่ความคิดเห็นด้วยการประทับเวลา (อาจวินาทีตั้งแต่ยุค) ในกฎ กวาดกฎที่หมดอายุเป็นระยะ

โปรดทราบว่าเคอร์เนล linux ที่ผ่านมามีการรองรับการโหลดที่อยู่ IP แบบไดนามิกในแคชที่ปรึกษาโดยกฎ iptable แทนที่จะเป็นกฎ iptables โดยตรง

ตัวอย่าง:

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แทนการพิมพ์คำสั่ง


ความคิดที่ดี. ไม่แน่ใจว่าจะทำส่วนที่กวาดแม้ว่าฉันจะเป็นความคิด ..
HappyDeveloper

+1 ความคิดที่ดีมากอาจไม่ใช่วิธีที่ง่ายที่สุด แต่ก็เรียบร้อยดี
Kyle Smith

1
@HappyDeveloper: มีตัวอย่างสำหรับการเพิ่ม / การกวาด
Seth Robertson

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 เซนต์ของฉันใน perl: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 มีวิธีการเพิ่มที่อยู่ IP ไปยังรายการโดยอัตโนมัติหากตรงตามเงื่อนไขที่ผู้ใช้กำหนด ฉันใช้สิ่งต่อไปนี้เพื่อช่วยหลีกเลี่ยงการแฮ็คอัตโนมัติไปยังพอร์ต ssh ของฉัน:

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --name ssh --seconds 60 --reap -j DROP

สิ่งนี้จะช่วย จำกัด การพยายามเข้าถึงเซิร์ฟเวอร์โดยอัตโนมัติโดย จำกัด การพยายามเชื่อมต่อจากที่อยู่ IP เดียวกันให้เป็นหนึ่งเดียวทุก ๆ 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" และ "black" และ 2 รายการ; "ตัวจับเวลา" และ "บัญชีดำ"

สั้น ๆ ; ห่วงโซ่สุดท้ายที่แสดงด้านบนคือ "ประตู" เข้าสู่ห่วงโซ่ ssh

  • กฎ 1 ในการตรวจสอบห่วงโซ่ ssh เพื่อดูว่า IP ต้นทางอยู่ในรายการ "บัญชีดำ" หรือไม่ ถ้าเป็นเช่นนั้นการเชื่อมต่อจะลดลงและตัวจับเวลาบัญชีดำ 24 ชั่วโมงเริ่มต้นใหม่ หากกฎ 1 เป็นเท็จเราจะไปที่กฎ 2
  • กฎ 2 ในการตรวจสอบห่วงโซ่ ssh เพื่อดูว่า IP ต้นทางทำการเชื่อมต่อมากกว่า 4 ครั้งใน 5 นาทีหรือไม่ ถ้าเป็นเช่นนั้นมันจะส่งแพ็คเก็ตไปที่เชน "สีดำ" ซึ่งจะถูกเพิ่มลงในรายการ "บัญชีดำ" สายโซ่ "สีดำ" จากนั้นจึงทำการเชื่อมต่อ DROP และเราเสร็จแล้ว
  • กฎ 3 ในเชน "ssh" เข้าถึงได้ก็ต่อเมื่อกฎ 1 และ 2 เป็นเท็จ ถ้าเป็นเช่นนั้นแพ็คเก็ตจะได้รับการยอมรับและเพิ่ม IP ต้นทางลงในรายการ "ตัวจับเวลา" เพื่อให้เราสามารถตรวจสอบความถี่ในการพยายามเชื่อมต่อได้

ตัวเลือก "--reap" บอกให้เคอร์เนลค้นหารายการและกำจัดรายการใด ๆ ที่เก่ากว่าเวลาที่กำหนด 5 นาทีสำหรับรายการ "จับเวลา" และ 24 ชั่วโมงสำหรับรายการ "บัญชีดำ"

หมายเหตุ: ช่องว่างเพิ่มเติมสำหรับการอ่านและเป็นตัวเลือกในเปลือกสคริปต์ของคุณ


3

IPTables มีคุณสมบัติที่สร้างขึ้นโดยเฉพาะสำหรับสิ่งนี้: ชุด IP คุณสร้างกฏหนึ่งครั้งและยังคงมีอยู่ตามปกติ แต่จะตรวจสอบในชุดของ ips (หรือพอร์ต) สำหรับการจับคู่ สิ่งที่ยอดเยี่ยมคือชุดนี้สามารถอัปเดตแบบไดนามิกและมีประสิทธิภาพโดยไม่รบกวนส่วนที่เหลือของไฟร์วอลล์

หลักเว็บไซต์ , ตัวอย่าง

ดังนั้นในการใช้งานคุณจะยังคงต้องใช้atหรือcronกำหนดเวลาการลบ



2

ตามที่มีคนกล่าวไว้แล้ว: คุณควรใช้ ipset สำหรับคุณสมบัตินี้

ipset สามารถเพิ่มที่อยู่ ip ด้วยค่าการหมดเวลา เมื่อหมดเวลาสิ้นสุดบันทึกจะถูกลบโดยอัตโนมัติจาก 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

ทั้งนี้ขึ้นอยู่กับสิ่งที่คุณต้องการที่จะบรรลุโมดูลnetfilter ล่าสุดหรือเวลาที่สามารถใช้ในการบรรลุสิ่งนี้

ทั้งสองได้รับการบันทึกไว้ในหน้า iptables คน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.