iptables: mô-đun gần đây


8

Tôi đang sử dụng mô-đun "gần đây" để ngăn quét cổng, chẳng hạn như:

-A INPUT -i eth0 -m recent --name PORTSCAN --update --seconds 60 -j DROP
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT         -m recent --name PORTSCAN --set -j DROP

Các --updatetùy chọn, trái với tên gọi của nó (ví dụ, cập nhật giá trị cũ với cái mới), không cập nhật entry cuối cùng nhìn thấy, nhưng thay vì bổ sung lẫn nhau. Trong thiết lập đơn giản của tôi, tôi chỉ quan tâm đến mục cuối cùng. Tôi không cần toàn bộ lịch sử của các gói được xem (nghĩa là để thống kê).

Có cách nào, tôi chỉ có thể giữ gói được nhìn thấy lần cuối? Đã từng có một tùy chọn --reap, nhưng AFAIK đã bị xóa.

Mối quan tâm của tôi là, trên một máy chủ bận rộn, danh sách PORTSCAN có thể nhanh chóng phát triển khá lớn. Tôi không biết giới hạn là gì, nhưng tôi chắc chắn phải có giới hạn nào đó.

Câu trả lời:


10

Nếu bạn xem trang man cho iptables, cụ thể là recentphần mô-đun, có một vài tham số trông giống như chúng sẽ cung cấp cho bạn quyền kiểm soát mà bạn đang tìm kiếm:

đoạn trích từ recentphần mô-đun iptables

Bản thân mô-đun chấp nhận các tham số, mặc định hiển thị:

   ip_list_tot=100
          Number of addresses remembered per table.

   ip_pkt_list_tot=20
          Number of packets per address remembered.

Vì vậy, theo hai tham số này, bạn có thể kiểm soát số lượng địa chỉ IP và số gói mà recentmô-đun sẽ "ghi nhớ".

Hãy nhớ rằng đây là mô-đun hạt nhân vì vậy để áp dụng các cài đặt này, bạn cần phải đặt chúng ở thời gian tải mô-đun như sau:

/sbin/modprobe ipt_recent ip_list_tot=2000 ip_pkt_list_tot=255

Trên hệ thống Fedora 14 của tôi, mô-đun thực sự được gọi xt_recent, bạn có thể xem loại tham số nào có thể sử dụng modinfo:

$ modinfo xt_recent
filename:       /lib/modules/2.6.35.14-106.fc14.x86_64/kernel/net/netfilter/xt_recent.ko
alias:          ip6t_recent
alias:          ipt_recent
license:        GPL
description:    Xtables: "recently-seen" host matching
author:         Jan Engelhardt <jengelh@medozas.de>
author:         Patrick McHardy <kaber@trash.net>
srcversion:     00B9A3AB999488BFEB4FA6A
depends:        
vermagic:       2.6.35.14-106.fc14.x86_64 SMP mod_unload 
parm:           ip_list_tot:number of IPs to remember per list (uint)
parm:           ip_pkt_list_tot:number of packets per IP address to remember (max. 255) (uint)
parm:           ip_list_hash_size:size of hash table used to look up IPs (uint)
parm:           ip_list_perms:permissions on /proc/net/xt_recent/* files (uint)
parm:           ip_list_uid:default owner of /proc/net/xt_recent/* files (uint)
parm:           ip_list_gid:default owning group of /proc/net/xt_recent/* files (uint)

Kiểm tra cài đặt xt_recent

Tất cả các cài đặt cho mô-đun này được giữ dưới /sys/module/xt_recent. Cụ thể các tham số bạn truyền vào nó được lưu ở đây:

$ ls -1 /sys/module/xt_recent/parameters/
ip_list_gid
ip_list_hash_size
ip_list_perms
ip_list_tot
ip_list_uid
ip_pkt_list_tot

Bất kỳ tham số nào cũng có thể được kiểm tra bằng cách đơn giản hóa các tệp trong thư mục này, ví dụ:

cat /sys/module/xt_recent/parameters/ip_pkt_list_tot

Vì vậy, điều này cho chúng ta biết rằng giá trị mặc định của tham số ip_pkt_list_totlà 20.


Điều đó làm việc tuyệt vời. Cảm ơn. Bây giờ tôi có thể chỉ định ip_pkt_list_tot = 1 trong khi tải mô-đun. Về tùy chọn khác, ip_list_tot, có cách nào để tìm ra giá trị mặc định / hiện tại là gì không?
dùng1968963

OK, tôi thấy tôi có thể tìm thấy các giá trị hiện tại của các tham số trong: / sys / module / xt_recent / tham số / *
user1968963

Xin lỗi tôi bước ra ngoài, chỉ cần nhìn thấy câu hỏi của bạn, vâng, bạn có thể thấy mọi thứ trong / sys / module / xt_recent / *. Tôi cũng sẽ cập nhật câu trả lời với thông tin này.
slm

1
Một cách đẹp hơn để liệt kê thông tin trong các tệp đó:head /sys/module/xt_recent/parameters/*
Hvisage

1

Ngoài câu trả lời được đưa ra ở trên, tôi khuyên bạn nên nhét bảng BADGUYS bổ sung trước bẫy PORTSCAN của bạn và sử dụng nó để ngăn chặn tràn ra sau.

Sau đó, khi PORTSCAN được kích hoạt, hãy thêm một bản ghi vào bảng BADGUYS.

Một cái gì đó như thế này:

-A INPUT --name PORTSCAN --rcheck --seconds 60 --reap --hits 20 -j set_bad
-A INPUT --name BADGUYS --rcheck --seconds 3600 --reap -j noway
-A INPUT <trap case> --name PORTSCAN --set
-A set_bad --name BADGUYS --set
-A noway -p tcp -j REJECT --reject-with tcp-reset
-A noway -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.