Giám sát mà không gây ảnh hưởng
Giám sát lưu lượng mạng production là một bài toán cân bằng đầy thách thức. Tôi từng thấy các quản trị viên tập sự vô tình gây ra tình trạng trễ mạng lên đến 200ms khi đặt proxy trực tiếp vào luồng dữ liệu chính. Khi bạn cần kiểm tra gói tin để kiểm định bảo mật hoặc cung cấp dữ liệu cho Hệ thống Phát hiện Xâm nhập (IDS) như Suricata 7.0, bạn không thể can thiệp trực tiếp vào luồng dữ liệu đang chạy. Bạn cần một bản sao “vô hình” của dữ liệu đó.
Trong môi trường production, đây là một kỹ năng bắt buộc. Chúng ta sử dụng Port Mirroring—thường được gọi là SPAN (Switched Port Analyzer)—để nhân bản lưu lượng từ nguồn và truyền nó tới một cổng giám sát. Mặc dù Linux cung cấp nhiều phương pháp, Open vSwitch (OVS) là lựa chọn đáng tin cậy nhất cho các hệ thống ảo hóa hiện đại. Nó xử lý tốt các môi trường băng thông cao, nơi các bridge tiêu chuẩn thường gặp khó khăn.
So sánh các phương pháp: Linux Bridge vs. Open vSwitch
Việc chọn đúng công cụ phụ thuộc vào quy mô hệ thống của bạn. Hãy cùng xem tại sao OVS thường chiếm ưu thế trong các trung tâm dữ liệu.
Linux Bridge tiêu chuẩn (brctl/ip link)
Bridge mặc định của Linux rất nhẹ và được tích hợp sẵn trong kernel. Tuy nhiên, nó thiếu lệnh “mirror” trực tiếp. Để nhân bản lưu lượng, bạn phải sử dụng tc (Traffic Control) với các quy tắc action mirred. Cách tiếp cận này khá mong manh. Việc quản lý nhiều bản sao trở thành một “cơn ác mộng” về cấu hình, và cú pháp của nó cực kỳ khó gỡ lỗi khi hệ thống gặp sự cố.
Open vSwitch (OVS)
OVS được xây dựng cho Mạng điều khiển bằng phần mềm (SDN). Nó coi việc mirroring là một tính năng cốt lõi thay vì một tính năng bổ sung. Bạn định nghĩa một đối tượng Mirror, chỉ định các cổng ingress/egress (vào/ra) và thiết lập đích đến. Nó rất tinh gọn và có khả năng mở rộng trên các nền tảng như Proxmox, OpenStack và Nutanix. Nếu bạn đang quản lý lưu lượng trên 1Gbps, OVS là tiêu chuẩn chuyên nghiệp.
Ưu và nhược điểm của OVS Port Mirroring
Ưu điểm
- Cô lập: Lưu lượng production vẫn luân chuyển bình thường ngay cả khi IDS hoặc công cụ bắt gói tin của bạn bị treo.
- Kiểm soát chi tiết: Bạn có thể mirror các VLAN tag cụ thể hoặc chỉ cô lập lưu lượng từ một VM có tải cao.
- Tính bền vững: OVS lưu trữ cấu hình trong
ovsdb. Các thiết lập mirror vẫn tồn tại sau khi khởi động lại mà không cần các script shell tùy chỉnh.
Nhược điểm
- Tốn tài nguyên: Chạy OVS daemon tiêu tốn nhiều bộ nhớ hơn so với một bridge kernel đơn giản.
- Quá tải CPU: Mirror lưu lượng trên 10Gbps có thể làm tăng 3-5% tải CPU. Bạn phải đảm bảo bus hệ thống có đủ băng thông để xử lý việc nhân đôi lưu lượng nội bộ.
Mô hình khuyến nghị
Hầu hết các quản trị viên sử dụng cấu hình “Nhiều-đến-Một”. Hãy tưởng tượng một web server trên eth1 và một database trên eth2. Bạn muốn gộp lưu lượng của chúng và gửi tới một máy chủ phân tích chuyên dụng trên eth3. Trong hướng dẫn này, chúng sẽ sử dụng một bridge tên là br-ext để nhân bản lưu lượng từ một ứng dụng production sang cổng sniffer.
Hướng dẫn triển khai: Cấu hình OVS Mirroring
1. Cài đặt Open vSwitch
Cài đặt và chạy OVS daemon trên hệ thống của bạn. Trên Ubuntu hoặc Debian, sử dụng các lệnh sau:
sudo apt update
sudo apt install openvswitch-switch -y
sudo systemctl enable --now openvswitch-switch
2. Tạo Bridge và thêm các cổng (Port)
Bắt đầu với một bridge sạch. Nếu bạn đang thao tác trên server từ xa, hãy kiểm tra kỹ interface quản lý để tránh bị mất kết nối.
# Tạo bridge logic
sudo ovs-vsctl add-br br-ext
# Thêm cổng nguồn production
sudo ovs-vsctl add-port br-ext eth1
# Thêm cổng đích giám sát
sudo ovs-vsctl add-port br-ext eth2
3. Định nghĩa quy tắc Mirroring
Lệnh này thiết lập luồng lưu lượng. Chúng ta sẽ tạo một mirror tên là span0. Nó sẽ bắt mọi gói tin đi vào và đi ra khỏi eth1, sau đó chuyển một bản sao tới eth2.
sudo ovs-vsctl -- set bridge br-ext mirrors=@m \
-- --id=@eth1 get port eth1 \
-- --id=@eth2 get port eth2 \
-- --id=@m create mirror name=span0 select_dst_port=@eth1 select_src_port=@eth1 output_port=@eth2
Giải thích logic:
select_dst_port: Bắt tất cả các gói tin đi vào.select_src_port: Bắt tất cả các gói tin đi ra.output_port: Chỉ định đích đến của lưu lượng.
4. Xác minh cấu hình
Xác nhận mirror đang hoạt động bằng cách truy vấn cơ sở dữ liệu OVS. Chạy lệnh sau:
sudo ovs-vsctl list mirror
Kết quả trả về sẽ hiển thị span0 cùng với các UUID cụ thể cho các cổng của bạn.
5. Kiểm tra với tcpdump
Chuyển sang giao diện giám sát. Vì eth2 chỉ nhận các bản sao, nó không cần địa chỉ IP. Nó chỉ cần ở trạng thái “up” về mặt quản trị. Việc sử dụng tcpdump sẽ giúp bạn xác nhận dữ liệu đang được mirror chính xác.
sudo ip link set eth2 up
sudo tcpdump -i eth2 -n -c 50
Nếu màn hình terminal tràn ngập lưu lượng từ eth1, cổng SPAN của bạn đã hoạt động.
Quản lý và xóa Mirror
Để mirror hoạt động vô thời hạn là một sai lầm phổ biến. Nó làm tăng gấp đôi tải chuyển mạch nội bộ và có thể làm giảm hiệu suất theo thời gian. Luôn xóa mirror sau khi phiên gỡ lỗi kết thúc.
Để xóa tất cả các mirror khỏi một bridge, hãy sử dụng:
sudo ovs-vsctl clear bridge br-ext mirrors
Mẹo chuyên nghiệp: Chế độ Promiscuous
Nếu công cụ sniffer không thấy gói tin nào, hãy kiểm tra chế độ của interface. Các công cụ như Wireshark thường tự động bật chế độ promiscuous. Tuy nhiên, bạn có thể bật thủ công để đảm bảo card mạng (NIC) chấp nhận các gói tin không dành cho địa chỉ MAC của chính nó:
sudo ip link set eth2 promisc on
Lời kết
Open vSwitch cung cấp một bộ công cụ chuyên nghiệp cho việc đo lường mạng (network telemetry). Nó giữ cho môi trường production của bạn ổn định trong khi cung cấp một bản sao dữ liệu chính xác 1:1. Dù bạn đang truy tìm một lỗ hổng bảo mật hay chẩn đoán kết nối database bị ngắt, OVS mirror là cách đáng tin cậy nhất để thấy chính xác những gì đang diễn ra trên đường truyền.

