Làm thế nào để làm cho các quy tắc iptables hết hạn?


18

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:


18

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 atcô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 recentmô-đun của iptables. Điều này với --secondstù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.


oh wow công việc 'tại' trông tuyệt vời. Tôi có thể kết hợp nó với nohup và &? Làm sao?
HappyDeveloper

Không cần sử dụng nohup - công việc tại được thực hiện độc lập với thiết bị đầu cuối bạn đã sử dụng để tạo nó. Điều này có nghĩa là nó chạy trong một vỏ không kế thừa các biến môi trường của bạn, và /bin/shtheo 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.
Eduardo Ivanec

9

Đặ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 $1thay vì in lệnh.


ý tưởng tuyệt vời. Không chắc chắn làm thế nào để thực hiện phần quét, tôi sẽ suy nghĩ ..
HappyDeveloper

+1 Ý tưởng rất hay, có thể không đơn giản nhất nhưng chắc chắn gọn gàng.
Kyle Smith

1
@HappyDeveloper: Cung cấp ví dụ cho thêm / quét
Seth Robertson

1
Haha Tôi cũng phải làm điều này, tôi đã sử dụng awk cho việc dọn dẹp của mì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"
Kyle Smith

2 xu của tôi trong 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 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.

  • Quy tắc 1 trong chuỗi ssh kiểm tra xem IP nguồn có trong danh sách "danh sách đen" không. Nếu vậy, kết nối bị ngắt và hẹn giờ trong danh sách đen 24 giờ được khởi động lại. Nếu quy tắc 1 là sai, thì chúng ta chuyển sang quy tắc 2.
  • Quy tắc 2 trong chuỗi ssh kiểm tra xem IP nguồn có thực hiện hơn 4 lần thử kết nối trong 5 phút không. Nếu vậy, nó sẽ gửi gói đến chuỗi "đen" nơi nó được thêm vào danh sách "danh sách đen". Chuỗi "đen" sau đó DROPs kết nối, và chúng ta đã hoàn thành.
  • Quy tắc 3 trong chuỗi "ssh" chỉ đạt được nếu quy tắc 1 và 2 sai. Nếu vậy, gói được CHẤP NHẬN và IP nguồn được thêm vào danh sách "bộ đếm thời gian" để chúng tôi có thể theo dõi tần suất thử kết nối.

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.


3

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.

Trang web chính , ví dụ .

Vì vậy, để sử dụng nó, bạn vẫn sẽ phải sử dụng athoặc cronlên lịch gỡ bỏ.



2

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.


0

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.

Bạn có thể thử cái sau

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.