Cloudflare đã xuất bản xdpcap, một công cụ phân tích lưu lượng truy cập dựa trên hệ thống con XDP

Công ty Cloudflare trình bày Chủ đề mở xdpcap, trong đó một bộ phân tích gói mạng tương tự như tcpdump đang được phát triển, được xây dựng trên cơ sở hệ thống con XDP (Đường dẫn dữ liệu eXpress). Mã dự án được viết bằng Go và phân phối bởi theo giấy phép BSD. Dự án cũng chuẩn bị thư viện để liên kết các trình xử lý lưu lượng eBPF từ các ứng dụng Go.

Tiện ích xdpcap tương thích với các biểu thức lọc tcpdump/libpcap và cho phép bạn xử lý khối lượng lưu lượng truy cập lớn hơn đáng kể trên cùng một phần cứng. Xdpcap cũng có thể được sử dụng để gỡ lỗi trong các môi trường không áp dụng tcpdump thông thường, chẳng hạn như hệ thống lọc, bảo vệ DoS và cân bằng tải sử dụng hệ thống con XDP nhân Linux, xử lý các gói trước khi chúng được xử lý bởi ngăn xếp mạng nhân Linux (tcpdump không thấy các gói bị loại bỏ bởi trình xử lý XDP).

Hiệu suất cao đạt được thông qua việc sử dụng các hệ thống con eBPF và XDP. eBPF là trình thông dịch mã byte được tích hợp trong nhân Linux cho phép bạn tạo các trình xử lý hiệu suất cao cho các gói đến/đi với các quyết định về việc chuyển tiếp hoặc loại bỏ chúng. Bằng cách sử dụng trình biên dịch JIT, mã byte eBPF được dịch nhanh chóng thành các lệnh máy và được thực thi với hiệu suất của mã gốc. Hệ thống con XDP (eXpress Data Path) bổ sung cho eBPF khả năng chạy các chương trình BPF ở cấp trình điều khiển mạng, hỗ trợ truy cập trực tiếp vào bộ đệm gói DMA và hoạt động ở giai đoạn trước khi bộ đệm skbuff được phân bổ bởi ngăn xếp mạng.

Giống như tcpdump, tiện ích xdpcap trước tiên chuyển các quy tắc lọc lưu lượng cấp cao thành biểu diễn BPF cổ điển (cBPF) bằng thư viện libpcap tiêu chuẩn, sau đó chuyển đổi chúng thành dạng quy trình eBPF bằng trình biên dịch cbpfc, sử dụng sự phát triển LLVM/Clang. Ở đầu ra, thông tin lưu lượng truy cập được lưu ở định dạng pcap tiêu chuẩn, cho phép bạn sử dụng kết xuất lưu lượng được chuẩn bị trong xdpcap cho nghiên cứu tiếp theo trong tcpdump và các công cụ phân tích lưu lượng hiện có khác. Ví dụ: để nắm bắt thông tin lưu lượng DNS, thay vì sử dụng lệnh "tcpdump ip và udp port 53", bạn có thể chạy "xdpcap /path/to/hook capture.pcap 'ip and udp port 53'" rồi sử dụng tính năng chụp tệp .pcap, ví dụ: bằng lệnh "tcpdump -r" hoặc trong Wireshark.

Nguồn: opennet.ru

Thêm một lời nhận xét