Ai đó nói với tôi điều này là có thể, nhưng tôi không thể tìm thấy bất cứ điều gì trên google hoặc trang man.
Tôi cần cấm IP trong một khoảng thời gian nhất định, và sau đó tự động không có người điều khiển.
Ai đó nói với tôi điều này là có thể, nhưng tôi không thể tìm thấy bất cứ điều gì trên google hoặc trang man.
Tôi cần cấm IP trong một khoảng thời gian nhất định, và sau đó tự động không có người điều khiển.
Câu trả lời:
Nếu bạn muốn iptables loại bỏ hoàn toàn quy tắc thì bạn sẽ không thể làm điều đó, theo như tôi biết. Mục đích của việc này là gì? Nếu bạn cần một số loại tự động tạm thời cấm giải pháp tiêu chuẩn là fail2ban .
Ngoài ra, bạn có thể sử dụng một công việc định kỳ để loại bỏ quy tắc bạn đang thêm hoặc tốt hơn nếu bạn muốn thực hiện at
công việc đó một cách tương tác, một công việc:
iptables -I INPUT -s 192.168.1.100 -j DROP
echo "iptables -D INPUT -s 192.168.1.100 -j DROP" | at @10pm
Ngoài ra hãy xem recent
mô-đun của iptables. Điều này với --seconds
tùy chọn của nó có thể giúp đỡ, tùy thuộc vào nhu cầu thực tế của bạn. man iptables
để biết thêm thông tin.
/bin/sh
theo mặc định , nó là mặc định. Nhưng điều đó có lẽ sẽ không phải là một vấn đề trong trường hợp này.
Đặt một nhận xét với dấu thời gian (có thể là vài giây kể từ kỷ nguyên) trong các quy tắc. Định kỳ quét cho các quy tắc hết hạn.
Lưu ý rằng kernel linux gần đây nhất có hỗ trợ tải động các địa chỉ IP vào bộ đệm được tư vấn bởi các quy tắc iptable thay vì như các quy tắc iptables trực tiếp.
Thí dụ:
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"; }'
Tất nhiên bạn có thể iptables -D INPUT $1
thay vì in lệnh.
iptables -L FORWARD --line-numbers | sort -r | awk 'substr($8,1,4) == "exp@" && substr($8,5) < systime() { systems("iptables -D FORWARD " $1) }'
nơi các quy tắc được thực hiện như sau: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 có một phương thức để tự động thêm địa chỉ IP vào danh sách nếu đáp ứng các điều kiện do người dùng xác định. Tôi sử dụng cách sau để giúp tránh các nỗ lực hack tự động vào cổng ssh của mình:
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --name ssh --seconds 60 --reap -j DROP
Điều này giúp hạn chế các nỗ lực tự động để có quyền truy cập vào máy chủ bằng cách giới hạn các lần thử kết nối từ cùng một địa chỉ IP sau mỗi 60 giây.
Nếu bạn muốn cho phép số lần thử được đặt trong khung thời gian, chẳng hạn như 4 trong 5 phút và khi thất bại, hãy đưa chúng vào danh sách đen trong một khoảng thời gian dài hơn, chẳng hạn như 24 giờ, bạn có thể thực hiện một số việc như:
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
Ở trên, chúng tôi tạo ra 2 chuỗi; "Ssh" và "đen" và 2 danh sách; "hẹn giờ" và "danh sách đen".
Ngắn gọn; chuỗi cuối cùng được hiển thị ở trên là "ô cửa" vào chuỗi ssh.
Tùy chọn "--reap" yêu cầu kernel tìm kiếm trong danh sách và lọc bất kỳ mục nào cũ hơn giới hạn thời gian đã đặt; 5 phút cho danh sách "hẹn giờ" và 24 giờ cho danh sách "danh sách đen".
lưu ý: các khoảng trắng thừa dành cho khả năng đọc và là tùy chọn trong tập lệnh shell của bạn.
IPTables có một tính năng được thực hiện rõ ràng cho việc này: IP Set. Bạn thực hiện quy tắc một lần và nó vẫn tồn tại như bình thường nhưng nó sẽ kiểm tra một tập hợp các ips (hoặc cổng) cho phù hợp. Điều thú vị là bộ này có thể được cập nhật linh hoạt và hiệu quả mà không làm ảnh hưởng đến phần còn lại của tường lửa.
Vì vậy, để sử dụng nó, bạn vẫn sẽ phải sử dụng at
hoặc cron
lên lịch gỡ bỏ.
Bạn có thể sử dụng fail2ban để cấm địa chỉ IP và định cấu hình thời gian địa chỉ sẽ bị cấm.
Như ai đó đã nói: Bạn nên sử dụng ipset cho tính năng này.
ipset có thể thêm địa chỉ IP với giá trị thời gian chờ. Khi hết thời gian, bản ghi sẽ tự động bị xóa khỏi 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
Đây là cách tốt hơn để kiểm soát hành vi này.
Tùy thuộc vào chính xác những gì bạn muốn thực hiện các mô-đun netfilter gần đây hoặc thời gian có thể được sử dụng để thực hiện điều này.
Cả hai đều được ghi lại trong trang người đàn ông iptables .