Điểm:14

Chặn 1,4 triệu địa chỉ IP trên VPS

lá cờ be

Làm cách nào tôi có thể chặn danh sách khoảng 1,4 triệu địa chỉ IP? Tôi đã thử làm điều đó với iptables PREROUTING, như:

-A PREROUTING -d IP_HERE/32 -j DROP

Nhưng với nhiều bản ghi này, băng thông của tôi giảm như điên khi tôi thực hiện kiểm tra tốc độ.

Không có IP bị chặn trong iptables:

1Gb/giây

Với các IP bị chặn trong iptables:

3 Mb / giây ở mức cao nhất.

Tôi muốn sử dụng XDP_DROP như ở đây (bước cuối cùng): https://blog.cloudflare.com/how-to-drop-10-million-packets/

Nhưng tôi không có ý tưởng làm thế nào để sử dụng này. :/ (Tôi thực sự rất tệ trong việc lập trình)

Có những lựa chọn thay thế cho phương pháp này?

lá cờ pk
Chúng tôi có thể hỏi tại sao bạn muốn chặn 1,4 triệu IP không? Đó là rất nhiều IP. Thay vào đó, có thể dễ dàng hơn để đảm bảo máy chủ của bạn an toàn.
peterh avatar
lá cờ vn
Có một thứ mới tên là **ipset**. Tôi không biết điều đó, nhưng nó có thể đáng để thử. Nó là framework tường lửa mới trong linux, thực ra iptables ngày nay chỉ là lớp compat trên ipset.
lá cờ aq
Nếu bạn đang cố chặn IP dựa trên vị trí/quốc gia, vui lòng cho biết như vậy, có những giải pháp cho việc này không liên quan đến hàng triệu mục iptable.
lá cờ pk
đồng thời vui lòng không chặn IP dựa trên vị trí/quốc gia mà không có lý do chính đáng. Không chỉ "ồ có tin tặc ở đất nước đó"
ilkkachu avatar
lá cờ co
@peterh, ý bạn là nftables phải không? Tôi nghĩ rằng ipset đã tồn tại được một thời gian và AFAIK chỉ là về các quy tắc liên quan đến một bộ địa chỉ
TooTea avatar
lá cờ cn
@peterh ipsets được bao gồm trong kernel kể từ [2.6.39](https://kernelnewbies.org/Linux_2_6_39#IPset), được phát hành mười năm trước. Chúng đã tồn tại trước đó như một bản vá bên ngoài.
user26742873 avatar
lá cờ cn
@ user253751 Có lẽ op đang chặn toàn bộ EU vì luật cookie? :P
peterh avatar
lá cờ vn
@TooTea Được rồi, cảm ơn. Điều thú vị đối với tôi là cách ipset khớp một ip với một ipset (có khả năng là một tập hợp các ip có mặt nạ). Nó có sử dụng cây hoặc hàm băm bên trong không? Nếu có sẽ rất nhanh. Với iptables, cách duy nhất để khớp một ip với một bộ quy tắc là tìm kiếm tuyến tính vì Turing.
jcaron avatar
lá cờ me
Địa chỉ IP có thực sự là địa chỉ IP riêng lẻ hay chúng là một phần của một số phạm vi giới hạn?
lá cờ be
IP là cá nhân và hầu hết là proxy
mckenzm avatar
lá cờ in
Tất nhiên, nó phải là một chỉ mục được băm (hoặc nếu không nó sẽ khá mất cân bằng). "tốc độ cực nhanh" theo tài liệu tham khảo trong câu trả lời của @Cyrbil.
Điểm:32
lá cờ in

Bạn nên có một cái nhìn vào ipset.

Từ trang web chính thức:

Ipset có thể là công cụ thích hợp để bạn [...] lưu trữ nhiều địa chỉ IP hoặc số cổng và khớp với bộ sưu tập của iptables.

[...] (Ipset) có thể lưu trữ địa chỉ IP, mạng, số cổng (TCP/UDP), địa chỉ MAC, tên giao diện hoặc sự kết hợp của chúng theo cách đảm bảo tốc độ cực nhanh khi khớp một mục nhập với một tập hợp.

Để sử dụng nó, bạn cần tạo một ipset, thêm IP và tạo một iptables quy tắc phù hợp với ipset:

ipset tạo danh sách đen băm: ip hashsize 1400000
ipset thêm danh sách đen <ĐỊA CHỈ IP>
iptables -I INPUT -m set --match-set danh sách đen src -j DROP

Một ví dụ thực tế về việc sử dụng có thể được tìm thấy đây. Lưu ý rằng nó sử dụng khôi phục ipset thay vì đi qua từng địa chỉ IP trong một vòng lặp vì nó nhanh hơn nhiều.

Nếu danh sách của bạn IP có chồng chéo, bạn có thể muốn xử lý trước nó để chuyển thành dải IP có thể ở đâu. Đây là một ví dụ về một công cụ để làm điều đó. Nó sẽ không giúp bạn có màn trình diễn tốt hơn với ipset nhưng nó sẽ làm giảm kích thước danh sách của bạn.


Bên cạnh đó, về mặt biểu diễn, nó rất nhanh và quy mô mà không bị phạt. Như đám mâyblog của đề cập đến, có những cách tiếp cận cấp thấp nhanh hơn; nhưng nó phức tạp hơn nhiều và chỉ thêm vài byte mỗi giây, điều này, trừ khi bạn có quy mô và tham vọng của nhà cung cấp đám mây, nếu không thì không đáng để bỏ công sức.

iBug avatar
lá cờ tr
Việc xử lý các IP đơn lẻ thành các dải là điều bắt buộc. Sau đó, bạn có thể sử dụng `hash:net` cho bộ này và thậm chí còn có hiệu suất tốt hơn.
Điểm:20
lá cờ za

Thử thách khung - danh sách ngắn hơn, địa chỉ được ủy quyền hoặc bị chặn là gì?

Thay vì từ chối 1,4 triệu, chỉ cần cho phép ~ tá IP mà bạn muốn cho phép và mặc định từ chối mọi thứ.

lá cờ fr
Điều này nghe có vẻ giống như anh ấy muốn chặn một nhóm "IP xấu" được xác định trước. Đối với hầu hết các ứng dụng, hệ thống danh sách trắng có thể sẽ không hữu ích
Điểm:15
lá cờ in

Nếu các địa chỉ IP hoạt động trong một phạm vi được xác định rõ, thì bạn có thể sử dụng uww như thế này để chặn lưu lượng:

sudo ufw từ chối từ 192.0.0.0/8 đến bất kỳ

Ví dụ trên chặn tất cả lưu lượng truy cập từ 192.0.0.1 đến 192.255.255.254, có tới 16.777.214 địa chỉ và điều này không ảnh hưởng (đáng chú ý) đến thông lượng mạng.

Miễn là danh sách IP của bạn ở dạng khả thi để tạo dải IP, điều này có thể phù hợp với bạn.

lá cờ mx
Tất cả chúng ta hãy giả sử rằng OP muốn chặn các địa chỉ không nằm trong một phạm vi.
iBug avatar
lá cờ tr
UFW, như chính nó mô tả, là giao diện người dùng cho iptables. Điều này làm cho hiệu suất của nó thậm chí còn tệ hơn so với việc duy trì chuỗi iptables theo cách thủ công.
lá cờ in
Tại sao _tệ hơn_? Nó không giống như các quy tắc iptables đang kêu gọi ufw, nó chỉ là giao diện người dùng để định cấu hình chúng ngay từ đầu. Rõ ràng là nó cũng sẽ không _better_ nữa.
iBug avatar
lá cờ tr
@Useless UFW tạo ra nhiều chuỗi hơn cho mọi gói đi qua, trong khi các quy tắc được duy trì thủ công có thể * đơn giản hơn nhiều * và do đó hiệu quả hơn.
lá cờ in
Vì vậy, hãy nói "ufw tạo các quy tắc quá đơn giản và bạn có thể tạo thủ công những quy tắc tốt hơn" hoặc đại loại như vậy. Hiệu suất riêng của UFW không phải là một vấn đề và thực tế rằng đó là giao diện người dùng không tự động làm cho các quy tắc của nó trở nên tồi tệ. Không tệ hơn các quy tắc viết tay _không_ sử dụng dây chuyền một cách thông minh.
Nate T avatar
lá cờ it
@useless vì nó là giao diện người dùng, mỗi khi có yêu cầu xuất hiện. nó được xử lý bởi `ufw`, sau đó gọi `iptables` phía sau hậu trường. Khi `iptables` khớp ip với các quy tắc được liệt kê, Nó phải chuyển thông tin này trở lại `ufw` để cho phép hoặc từ chối. Đây là dòng chảy fe / be điển hình. Việc cắt bỏ `ufw` giúp loại bỏ một nửa các bước. Điều đó nói rằng, hiệu suất inc / dec sẽ không phụ thuộc vào số lượng ip đang bị chặn, mà phụ thuộc vào số lượng yêu cầu thực sự đến.
lá cờ in
@NateT Tôi đã chỉ ra rằng điều đó hoàn toàn không đúng. `ufw` chỉ cung cấp giao diện người dùng đơn giản cho `iptables`, bản thân giao diện này chỉ định cấu hình các quy tắc trong mô-đun bộ lọc mạng `ip_tables`. Hoạt động lọc gói không bao giờ chuyển từ mô-đun hạt nhân `ip_tables` ra thành phần không gian người dùng `iptables`, ít hơn nhiều so với giao diện người dùng `ufw` cho điều đó.
Nate T avatar
lá cờ it
Sau đó, nó KHÔNG PHẢI LÀ FRONTEND. Ứng dụng 1 cập nhật kho dữ liệu của ứng dụng 2 không biến ứng dụng 1 thành "giao diện người dùng" cho ứng dụng 2. Nếu cả hai ứng dụng không được gọi theo thứ tự tôi đã mô tả, bạn có thể gọi nó bằng bất kỳ tên nào khác mà bạn muốn (gọi nó là "Nancy in chiếc váy màu đỏ của cô ấy" đối với tất cả những gì tôi quan tâm), nhưng gọi nó là giao diện người dùng trong một cuộc thảo luận về tốc độ của thuật toán không bao giờ là một ý tưởng hay. Người dùng của mạng này luôn bị chỉ trích vì quá kén chọn các thuật ngữ, nhưng ^đây^ là điều mà một thuật ngữ hơi bị lạm dụng có thể gây ra. @vô dụng
Nate T avatar
lá cờ it
Nếu tôi hiểu lầm, xin vui lòng mô tả dòng sự kiện. Nếu cả hai ứng dụng đang được sử dụng, thì cả hai ứng dụng đều chiếm bộ nhớ và tài nguyên tạm thời, ngay cả khi chúng chỉ in hello world ra bảng điều khiển. Bạn biết gì? Tôi sẽ tìm kiếm nó để bạn không phải gõ nó. Tôi tò mò dù sao bây giờ. Ngoại lệ duy nhất tôi có thể nghĩ đến là trường hợp iptables hoàn toàn không được gọi và chỉ dữ liệu của nó được sử dụng/cập nhật. Trong trường hợp đó, ^^^
Điểm:13
lá cờ jp

Bạn có thể giảm thiểu tra cứu để đạt được tốc độ cao hơn bằng cách cấu trúc cây Quy tắc của bạn. Ví dụ, bạn có thể làm điều đó dựa trên phần đầu tiên của IP tức là /8 như vậy:

iptables -N quy tắc8_192_0_0_0
iptables -N quy tắc8_172_0_0_0
iptables -N quy tắc8_10_0_0_0

iptables -A INPUT -s 192.0.0.0/8 -j rule8_192_0_0_0
iptables -A INPUT -s 172.0.0.0/8 -j rule8_172_0_0_0
iptables -A INPUT -s 10.0.0.0/8 -j rule8_10_0_0_0

iptables -A rule8_192_0_0_0 -s 192.168.2.3 -j DROP
iptables -A rule8_172_0_0_0 -s 172.16.2.3 -j DROP
iptables -A rule8_10_0_0_0 -s 10.10.2.3 -j DROP
Điểm:4
lá cờ tr

Có một cải tiến khác trực tiếp giải quyết vấn đề 3 Mb/giây của bạn:

iptables -I INPUT -m conntrack --ctstate ĐÃ THÀNH LẬP, LIÊN QUAN -j CHẤP NHẬN

Điều này cho phép các kết nối được thiết lập duyệt qua càng ít quy tắc iptables càng tốt, mặc dù việc sử dụng ipset để cải thiện tốc độ tra cứu địa chỉ IP vẫn cần thiết cho kết nối mới để thành lập nhanh hơn.

Cho dù bạn có bao nhiêu quy tắc khác, đây là một quy tắc tốt để triển khai làm quy tắc đầu tiên.

Điểm:1
lá cờ fr

XDP_DROP có thể là quá mức cần thiết trừ khi bạn có kế hoạch chạy các danh sách chặn này ở tốc độ gói cực cao (Hãy nghĩ đến >1mpps). Vì vậy, tôi muốn giới thiệu Cyrbil's anwser nếu bạn chưa có kinh nghiệm về mã.

Tuy nhiên, nếu bạn muốn thử với XDP, bạn đang tìm kiếm thứ gọi là bộ lọc nở hoa có thể nhanh chóng kiểm tra xem một ip là "có thể được đặt" hay "chắc chắn không được đặt"

Một ví dụ về bộ lọc nở hoa trong C: bài đăng trên blog này

Điểm:1
lá cờ us

Điều này không sử dụng iptables nhưng bảng định tuyến nhân ip, có thể đáng để thử và kiểm tra hiệu suất:

tuyến ip thêm lỗ đen IPv4/32

IIRC được cho là nhanh hơn lọc bằng iptables, nhưng tôi chưa bao giờ thực hiện điểm chuẩn với 1,4 triệu IP :)

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.