NetFlow và IPFIX: Cách ‘bắt mạch’ băng thông mạng bằng nfdump và nfsen trên Linux

Network tutorial - IT technology blog
Network tutorial - IT technology blog

Khi băng thông “biến mất” bí ẩn lúc nửa đêm

2 giờ sáng, chuông Zabbix réo liên hồi. Traffic cổng Uplink chạm ngưỡng 95%, latency nhảy vọt lên hàng trăm ms. Mắt nhắm mắt mở SSH vào server, mình hiểu ngay rằng dùng tcpdump lúc này là tự sát – file pcap sẽ phình lên vài GB chỉ sau 10 giây và làm treo cứng hệ thống.

Hồi đó mình quản lý một văn phòng 50 nhân sự và một cụm server nhỏ. Khi xảy ra sự cố, câu hỏi quan trọng nhất không phải là ‘nội dung gói tin là gì’, mà là: Ai đang chiếm băng thông? Đi đâu? Và dùng giao thức nào?

NetFlow và IPFIX chính là ‘cứu cánh’ trong trường hợp này. Thay vì soi từng gói tin (packet), chúng ta chỉ phân tích các luồng dữ liệu (flow). Mình sẽ hướng dẫn anh em dựng bộ đôi nfdumpnfsen để biến những dòng log khô khan thành biểu đồ trực quan, giúp xử lý sự cố trong ‘một nốt nhạc’.

Đừng nhầm lẫn giữa Packet Capture và Flow

Trước khi bắt tay vào cấu hình, anh em cần phân biệt rõ hai khái niệm này để tránh dùng sai mục đích.

NetFlow và IPFIX là gì?

Cứ tưởng tượng NetFlow như hóa đơn cước điện thoại: bạn không biết nội dung cuộc gọi, nhưng biết rõ ai gọi cho ai, lúc nào, trong bao lâu. Kỹ thuật hơn, một ‘Flow’ được định nghĩa bởi 5-tuple: IP nguồn/đích, Port nguồn/đích và Giao thức (Protocol).

  • NetFlow: Giao thức do Cisco phát triển, cực kỳ phổ biến. Phiên bản v9 hiện là tiêu chuẩn vàng trên các thiết bị doanh nghiệp.
  • IPFIX: Được coi là “truyền nhân” của NetFlow v9 nhưng là chuẩn mở (IETF). Nếu anh em dùng thiết bị Mikrotik, Juniper hoặc Ubiquiti, IPFIX thường là lựa chọn mặc định.

Điểm cộng lớn nhất là nó cực nhẹ. Router chỉ gửi metadata về Collector, không tốn tài nguyên CPU như khi chạy SPAN/Mirroring port.

Triển khai nfdump – Công cụ thu thập dữ liệu “nồi đồng cối đá”

Để thu thập flow, mình chọn nfdump. Đây là bộ công cụ dòng lệnh cực mạnh để nhận, lưu trữ và lọc dữ liệu NetFlow với hiệu năng cao.

Cài đặt nfdump

Trên Ubuntu hoặc Debian, việc cài đặt chỉ tốn vài giây:

sudo apt update
sudo apt install nfdump -y

Cài xong, hệ thống sẽ có daemon nfcapd. Nó đóng vai trò là ‘trạm thu phát’, lắng nghe trên port (mặc định 9995) để hứng dữ liệu từ router đổ về.

Cấu hình listener để hứng Flow

Giả sử router (192.168.1.1) đẩy flow về server Linux (192.168.1.10). Mình sẽ chạy lệnh sau để kiểm tra kết nối:

# Tạo thư mục lưu trữ (mỗi ngày tốn khoảng 500MB cho 50 user)
sudo mkdir -p /var/netflow/router_office

# Chạy nfcapd ở chế độ daemon
sudo nfcapd -w -D -l /var/netflow/router_office -p 9995

Giải thích các option:

  • -w: Chốt dữ liệu vào file mỗi 5 phút.
  • -D: Chạy ngầm (daemon).
  • -l: Thư mục chứa log.
  • -p: Port lắng nghe.

Đừng quên mở cổng UDP trên firewall, nếu không router có gửi mỏi tay server cũng không nhận được gì.

sudo ufw allow 9995/udp

Trực quan hóa với nfsen – Nhìn phát biết ngay ai đang “ngốn” mạng

Gõ lệnh thì nhanh, nhưng muốn trình bày với sếp hoặc theo dõi biểu đồ tăng trưởng (trend) theo tuần, bạn cần một giao diện trực quan. nfsen tuy có giao diện hơi ‘retro’ nhưng lại cực kỳ lỳ lợm và chính xác.

Việc cài đặt nfsen hơi thủ công vì dựa trên Perl. Bạn cần chuẩn bị sẵn môi trường Apache và PHP:

sudo apt install apache2 php libapache2-mod-php rrdtool librrd-dev -y

Sau khi cấu hình file nfsen.conf, bạn sẽ có một dashboard cho phép kéo thả, zoom vào từng khoảng traffic spike (đỉnh nhọn). Nhìn vào đó, mình có thể chỉ mặt đặt tên ngay: “Ông IP .25 đang upload 20GB dữ liệu lên Google Drive bằng tài khoản cá nhân đây rồi”.

Xử lý sự cố thực chiến với nfdump command line

Trở lại ca trực lúc 2 giờ sáng. Khi mạng đang ‘lắc’, mình không ngồi đợi nfsen vẽ biểu đồ mà dùng ngay nfdump để truy vấn trực tiếp. Đây là cách nhanh nhất để tìm ra thủ phạm.

Truy tìm top 10 IP ngốn băng thông nhất:

nfdump -R /var/netflow/router_office -s ip/bytes -n 10

Kết quả hiện ra bảng thống kê rõ mồn một:

Top 10 IP Addr sorted by bytes:
Date first seen          Duration Proto           IP Addr    Flows(%)     Packets(%)       Bytes(%)
2023-10-25 02:05:01.123     300.5 ANY      192.168.1.105      450(1.2)      1.2M(45.6)      1.8G(82.4)
...

Cột Bytes(%) cho thấy IP 192.168.1.105 đang chiếm tới 82.4% băng thông (tương đương 1.8GB trong 5 phút). Quá rõ ràng!

Kiểm tra xem IP đó đang dùng dịch vụ gì:

nfdump -R /var/netflow/router_office 'host 192.168.1.105' -s port/bytes

Nếu thấy port 443 (HTTPS), có thể họ đang xem 4K Youtube hoặc tải file nặng. Nếu hiện ra các port lạ từ 30000 trở lên, hãy cẩn thận với mã độc hoặc DDoS.

Lời kết từ phòng kỹ thuật

Kinh nghiệm xương máu của mình là: Đừng đợi ‘mất bò mới lo làm chuồng’. Hãy triển khai NetFlow ngay khi setup hệ thống. Nó không chỉ cứu bạn những đêm trực 2 giờ sáng mà còn là bằng chứng thép để thuyết phục sếp duyệt ngân sách nâng cấp băng thông dựa trên số liệu thực tế.

Sự kết hợp giữa nfdump (truy vấn sâu) và nfsen (theo dõi tổng quát) là combo “ngon-bổ-rẻ” mà mọi admin Linux nên có trong túi nghề. Hy vọng những chia sẻ này giúp anh em quản lý hạ tầng mạng nhàn nhã hơn.

Share: