Khả năng giám sát mà không đánh đổi hiệu suất
Vận hành một máy chủ production có lưu lượng truy cập cao thường giống như đang bay trong mù. Bạn cần kiểm tra các gói tin để phát hiện mối đe dọa hoặc khắc phục sự cố về độ trễ, nhưng việc thêm một proxy trung gian có thể làm chậm ứng dụng. Trong một trung tâm dữ liệu vật lý, bạn chỉ cần sử dụng cổng SPAN trên switch Cisco hoặc Juniper. Nhưng nếu bạn đang chạy trên AWS, DigitalOcean hoặc một cụm Proxmox riêng, bạn có thể không có quyền truy cập vào switch phần cứng.
Traffic mirroring dựa trên máy chủ (host-based) sẽ giải quyết vấn đề này. Bằng cách sử dụng kernel Linux để clone gói tin, bạn có thể gửi bản sao lưu lượng truy cập đến một node bảo mật riêng biệt—như IDS Suricata hoặc sensor Zeek—mà không gây cản trở dữ liệu gốc. Đây là giải pháp gần nhất với một thiết bị tap vật lý trong thế giới ảo hóa.
Tại sao Iptables TEE là công cụ phù hợp
Linux cung cấp nhiều cách để di chuyển gói tin, nhưng target TEE trong iptables có hiệu suất cực kỳ hiệu quả. Khác với bridge (cầu nối) nằm ở giữa đường truyền, TEE tạo ra một bản sao theo kiểu “clone và quên”. Nó trả gói tin gốc về stack mạng gần như ngay lập tức. Trong các thử nghiệm của tôi trên liên kết 1Gbps tiêu chuẩn, độ trễ thêm vào gói tin gốc thường dưới 5 micro giây—thấp hơn nhiều so với mức mà hầu hết các ứng dụng có thể đo lường được.
Cách tiếp cận này giúp máy chủ production luôn nhẹ nhàng. Vì việc phân tích gói tin nặng nề diễn ra trên một máy khác, web server hoặc database của bạn không bị mất chu kỳ CPU cho các tác vụ so khớp pattern phức tạp hay kiểm tra gói tin sâu (DPI).
Cơ chế clone gói tin hoạt động như thế nào
Target TEE nằm trong bảng mangle. Bảng này được thiết kế riêng cho các thay đổi gói tin đặc biệt. Khi một gói tin khớp với quy tắc TEE, kernel sẽ thực hiện quy trình bốn bước nhanh chóng:
- Nó tạo ra một bản sao chính xác từng bit của gói tin.
- Nó điều chỉnh MAC hoặc IP đích để hướng về gateway giám sát của bạn.
- Nó đẩy bản sao ra khỏi interface mạng.
- Nó lập tức giải phóng gói tin gốc để tiếp tục hành trình.
Chu chuẩn bị môi trường
Hầu hết các bản phân phối hiện đại như Ubuntu 22.04, Debian 12 hoặc Rocky Linux đều đi kèm với module TEE đã được biên dịch sẵn. Bạn chỉ cần đảm bảo nó đang hoạt động.
# Kiểm tra module
lsmod | grep xt_TEE
# Tải module nếu còn thiếu
sudo modprobe xt_TEE
Kịch bản Lab
- Máy chủ Production: 192.168.1.10 (eth0) – Đây là nguồn.
- Node giám sát: 192.168.1.50 – Đây là nơi chúng ta gửi các bản sao.
Các bước triển khai
1. Clone lưu lượng truy cập vào (Inbound)
Để xem các yêu cầu đến từ thế giới bên ngoài, chúng ta sử dụng chain PREROUTING. Chain này bắt các gói tin ngay khi chúng vừa đến card mạng.
sudo iptables -t mangle -A PREROUTING -i eth0 -j TEE --gateway 192.168.1.50
2. Clone lưu lượng truy cập ra (Outbound)
Việc giám sát những gì máy chủ gửi đi cũng quan trọng không kém. Nó giúp bạn phát hiện hành vi trích xuất dữ liệu trái phép hoặc hành vi “gọi về nhà” đáng ngờ từ các phần mềm bị xâm nhập. Hãy sử dụng chain POSTROUTING cho việc này.
sudo iptables -t mangle -A POSTROUTING -o eth0 -j TEE --gateway 192.168.1.50
3. Mirroring có chọn lọc
Mirroring toàn bộ đường truyền 10Gbps có khả năng làm nghẽn liên kết giám sát và làm quá tải I/O đĩa cứng. Thay vào đó, hãy tập trung vào các cổng có rủi ro cao. Tôi thường chỉ mirror lưu lượng web (80, 443) và DNS (53) để giữ cho lượng dữ liệu ở mức có thể quản lý được.
# Chỉ mirror lưu lượng web
sudo iptables -t mangle -A PREROUTING -i eth0 -p tcp -m multiport --dports 80,443 -j TEE --gateway 192.168.1.50
Cấu hình máy nhận
Máy chủ giám sát tại 192.168.1.50 sắp sửa nhận được hàng ngàn gói tin vốn không thực sự gửi cho nó. Thông thường, kernel Linux sẽ thấy đích đến không khớp và hủy chúng ngay lập tức. Bạn phải yêu cầu interface lắng nghe tất cả mọi thứ.
Thiết lập interface sang chế độ promiscuous (hỗn tạp) để IDS có thể “nhìn thấy” lưu lượng được mirror:
sudo ip link set eth0 promisc on
Kiểm tra xem luồng dữ liệu có hoạt động không bằng cách chạy tcpdump. Bạn sẽ thấy lưu lượng có IP nguồn và đích không thuộc về máy giám sát:
sudo tcpdump -i eth0 -n "not host 192.168.1.50"
Kinh nghiệm thực tế
Bẫy MTU
Các môi trường đám mây như OpenStack hoặc AWS VPC thường sử dụng MTU giới hạn ở mức 1450 hoặc 1400 byte để tính đến phần overhead của VXLAN. Khi TEE clone một gói tin, khung dữ liệu kết quả có thể vượt quá các giới hạn này nếu việc định tuyến của bạn thêm các header bổ sung. Nếu bạn thấy việc mirror hoạt động với các gói ping nhỏ nhưng thất bại với các tệp tải về lớn, hãy kiểm tra cài đặt MTU.
Tải CPU
Mặc dù TEE nhanh, nhưng nó không miễn phí. Việc clone làm tăng gấp đôi khối lượng công việc cho driver mạng. Hãy theo dõi tiến trình ksoftirqd bằng lệnh top. Nếu bạn thấy một lõi CPU duy nhất đạt mức sử dụng 80% hoặc 90%, có lẽ các quy tắc của bạn quá rộng để tối ưu cho đường truyền 10Gbps. Hãy sử dụng các bộ lọc Iptables để thu hẹp lưu lượng, chỉ giữ lại những gì thực sự cần thiết cho việc kiểm tra bảo mật.
Cấu hình vĩnh viễn
Các quy tắc Iptables tiêu chuẩn sẽ biến mất sau khi khởi động lại. Đừng quên lưu cấu hình của bạn. Trên Ubuntu, gói iptables-persistent là cách tiêu chuẩn để xử lý việc này.
sudo apt-get install iptables-persistent
sudo netfilter-persistent save
Lời kết
Iptables TEE là một giải pháp cấp kernel mạnh mẽ cho bất kỳ ai cần khả năng giám sát mạng chuyên sâu mà không tốn chi phí cao cho các thiết bị tap phần cứng. Nó hoạt động hoàn hảo trong môi trường ảo hóa nơi các cổng SPAN truyền thống không khả dụng. Bằng cách clone có chọn lọc các lưu lượng quan trọng nhất, bạn có thể cung cấp cho hệ thống bảo mật dữ liệu cần thiết trong khi vẫn giữ cho các dịch vụ production nhanh và nhạy.

