fbpx Hướng dẫn xây dựng mô hình lab thu thập log từ một số isp Skip to main content
log

Hướng dẫn xây dựng mô hình lab thu thập log từ một số isp

Dưới đây là thiết kế cấu hình chi tiết từng máy ảo (VM) trong mô hình Lab VNIX thực tế, tối ưu cho việc thu thập – xử lý – phân tích – trực quan hóa dữ liệu lưu lượng mạng.


🧱 TỔNG QUAN CÁC MÁY ẢO

VM Vai trò chính Thành phần chính
VM1 Collector (log mạng) softflowd, NetFlow/sFlow agent
VM2 Xử lý và stream dữ liệu Logstash, Kafka, Kafka Connect
VM3 Lưu trữ & AI/ML ClickHouse, Elasticsearch, Python AI
VM4 Dashboard & cảnh báo Grafana, Kibana, AlertManager, Web Interface

⚙️ CẤU HÌNH TỪNG VM

🖥️ VM1: Collector (NetFlow Agent)

Thành phần Cấu hình gợi ý
OS Ubuntu Server 20.04
CPU 2 vCPU
RAM 2 GB
Disk 10–15 GB
Phần mềm chính softflowd, tcpreplay
Ghi chú Gửi log NetFlow về VM2 cổng 2055

🖥️ VM2: Xử lý dữ liệu & Streaming

Thành phần Cấu hình gợi ý
OS Ubuntu Server 22.04
CPU 4 vCPU
RAM 6–8 GB
Disk 50 GB SSD
Phần mềm chính Logstash, Kafka, Kafka Connect
Ghi chú Chứa các topic trung gian truyền dữ liệu

🖥️ VM3: AI/ML & Lưu trữ

Thành phần Cấu hình gợi ý
OS Ubuntu Server 22.04
CPU 6 vCPU
RAM 12–16 GB
Disk 100 GB SSD
Phần mềm chính ClickHouse, Elasticsearch, Python, scikit-learn, pandas, kafka-python
Ghi chú Có thể chia node ClickHouse nếu dùng HA

🖥️ VM4: Dashboard & Alert

Thành phần Cấu hình gợi ý
OS Ubuntu Server 22.04
CPU 2 vCPU
RAM 4 GB
Disk 20 GB
Phần mềm chính Grafana, Kibana, AlertManager
Ghi chú Web UI cho truy vấn, biểu đồ, cảnh báo

🔗 KẾT NỐI MẠNG

  • Chế độ mạng: Host-Only hoặc Bridged

  • Các VM cần ping và truy cập cổng nhau (UDP, HTTP, Kafka port)

Dịch vụ Port mặc định
NetFlow (VM1 → VM2) UDP 2055
Kafka TCP 9092
ClickHouse TCP 8123
Elasticsearch TCP 9200
Grafana TCP 3000

Dưới đây là hướng dẫn triển khai từng phần trong mô hình Lab VNIX thực tế đã trình bày. Mục tiêu là xây dựng một hệ thống thu thập, xử lý, lưu trữ và phân tích log mạng hiện đại phục vụ phân tích và an ninh mạng.


🧱 I. TỔNG QUAN CÁC MÁY ẢO

VM Vai trò chính Thành phần dịch vụ
VM1 Thiết bị mạng & log collector NetFlow/sFlow Agent (softflowd, nProbe)
VM2 Xử lý log và streaming Logstash/Fluentd, Kafka, Kafka Connect
VM3 AI & lưu trữ ClickHouse, Elasticsearch, AI Python
VM4 Dashboard và cảnh báo Grafana, Kibana, AlertManager

🛠️ II. TRIỂN KHAI TỪNG PHẦN


🖥️ 1. NetFlow/sFlow Agent – (VM1)

Cài đặt softflowd:

sudo apt update
sudo apt install softflowd -y

softflowd


sudo softflowd -i eth0 -n <VM2_IP>:2055 -v 9 -t maxlife=60

Gửi NetFlow v9 đến Logstash trên VM2 cổng 2055

​   softfowd

 


🖥️ 2. Logstash hoặc Fluentd – (VM2)

Cài Logstash:

wget https://artifacts.elastic.co/downloads/logstash/logstash-8.12.0-amd64.deb
sudo dpkg -i logstash-8.12.0-amd64.deb

vm2

Cấu hình /etc/logstash/conf.d/netflow.conf:

input {
  udp {
    port => 2055
    codec => netflow { versions => [9] }
  }
}
output {
  kafka {
    bootstrap_servers => "localhost:9092"
    topic_id => "vnix-netflow"
  }
}

vm2

 

🔍 Giải thích chi tiết log cảnh báo bạn nhận được từ Logstash khi dùng codec NetFlow:


📄 Thông báo log bạn thấy:

Can't (yet) decode flowset id 1024 from source id 0,
because no template to decode it with has been received.
This message will usually go away after 1 minute.

❓ NGHĨA LÀ GÌ?

  • NetFlow version 9 (và IPFIX) là định dạng linh hoạt:
    🧱 Các bản ghi (flowset) không cố định, cần template để giải mã.

  • softflowd và các agent khác sẽ:

    1. Gửi template mô tả cấu trúc bản ghi → Logstash lưu lại.

    2. Gửi các bản ghi data flowset chứa lưu lượng → Logstash giải mã dựa trên template đã nhận.


⚠️ TẠI SAO LẠI BÁO LỖI?

  • Logstash nhận được một bản ghi NetFlow có flowset ID = 1024 / 2048 / 2049,
    nhưng chưa từng nhận được template tương ứng với ID này từ softflowd.

  • Điều này thường xảy ra:

    • Khi Logstash mới khởi động, chưa kịp nhận template.

    • Hoặc thiết bị gửi log không gửi lại template đủ thường xuyên.

vm2


✅ CÁCH XỬ LÝ

✅ 1. Chờ 1–2 phút

  • Đây là cách bình thường – nếu cấu hình đúng, template sẽ tới sau vài gói đầu.

✅ 2. Đảm bảo softflowd gửi template định kỳ

Gợi ý lệnh cấu hình:

sudo softflowd -i ens33 -n 192.168.x.x:2055 -v 9 -t maxlife=30

maxlife=30 nghĩa là template gửi lại mỗi 30 giây.


✅ 3. Kiểm tra lại log sau 1 phút

sudo journalctl -u logstash -f

Nếu bạn thấy dòng như sau, là thành công:

Successfully parsed NetFlow v9 record

✅ 4. Nếu vẫn không nhận được template

  • Đảm bảo bạn KHÔNG chặn gói UDP giữa VM1 → VM2.

  • Thử dùng tcpreplay để gửi mẫu log NetFlow từ pcap.

 


 

🖥️ 3. Kafka Cluster – (VM2)

Cài Kafka:

sudo apt install openjdk-11-jdk -y
wget https://downloads.apache.org/kafka/3.6.0/kafka_2.13-3.6.0.tgz
tar -xzf kafka_2.13-3.6.0.tgz && mv kafka_2.13-3.6.0 kafka

Chạy Zookeeper và Kafka:

bin/zookeeper-server-start.sh config/zookeeper.properties
bin/kafka-server-start.sh config/server.properties

🖥️ 4. Kafka Connect hoặc Flink – (VM2)

Kafka Connect với sink ClickHouse:

  • Dùng connector ClickHouseSinkConnector hoặc Python để đẩy log từ Kafka vào ClickHouse


🤖 5. AI/ML Node – (VM3)

Môi trường Python:

sudo apt install python3-pip -y
pip3 install kafka-python pandas scikit-learn clickhouse-connect

Mẫu Consumer AI:

from kafka import KafkaConsumer
from sklearn.ensemble import IsolationForest
import pandas as pd

consumer = KafkaConsumer('vnix-netflow', bootstrap_servers='localhost:9092')
model = IsolationForest()

for msg in consumer:
    data = parse_netflow(msg.value)  # tự định nghĩa
    score = model.fit_predict([data])
    if score[0] == -1:
        send_alert(data)

💾 6. ClickHouse Cluster – (VM3)

sudo apt install clickhouse-server clickhouse-client -y
sudo service clickhouse-server start

Dữ liệu NetFlow sẽ được đẩy từ Kafka hoặc AI node vào bảng OLAP để truy vấn hiệu quả.


🔍 7. Elasticsearch – (VM3)

Cài ES:

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.12.0-amd64.deb
sudo dpkg -i elasticsearch-8.12.0-amd64.deb
sudo systemctl start elasticsearch

Có thể dùng Kafka Connect để đồng bộ topic vnix-netflow vào Elasticsearch.


📊 8. Grafana / Kibana – (VM4)

Cài Grafana:

sudo apt install grafana -y
sudo systemctl start grafana-server

Cấu hình Data Source:

  • ClickHouse → OLAP analytics

  • Elasticsearch → Real-time search

Dashboard mẫu:

  • Top IP nguồn

  • Lưu lượng theo thời gian

  • Heatmap theo thời điểm tấn công


🚨 9. AlertManager / Cảnh báo – (VM4)

  • Tích hợp cảnh báo từ AI (hoặc Grafana Alert) vào:

    • Zalo OA API

    • Slack webhook

    • Email SMTP


🧭 III. Gợi ý mở rộng

Tính năng nâng cao Mô tả
Dự đoán lưu lượng LSTM hoặc ARIMA model AI
Tích hợp Grafana Alert Tự động gửi cảnh báo khi vượt ngưỡng
Bảo mật Kafka & ES TLS + Authentication
Xây dựng hệ thống HA Kafka, ES, ClickHouse multi-node

Dưới đây là bảng tổng hợp các lỗi và cách khắc phục trong quá trình bạn cài đặt hệ thống phân tích lưu lượng mạng VNIX trên nhiều máy ảo, bao gồm Kafka, Logstash, Kibana, ClickHouse, Softflowd, và môi trường AI.


📋 1. Lỗi không truy cập được mirror Ubuntu

Lỗi:

Could not connect to vn.archive.ubuntu.com:80

Nguyên nhân: mirror tại Việt Nam bị lỗi hoặc chặn.

Khắc phục:

  • Thay vn.archive.ubuntu.com bằng archive.ubuntu.com trong /etc/apt/sources.list

  • Cập nhật lại:

sudo apt update --fix-missing

🧠 2. pip không cài được Python packages

Lỗi:

error: externally-managed-environment

Nguyên nhân: Ubuntu chặn cài pip trực tiếp vào môi trường hệ thống để bảo vệ hệ thống.

Khắc phục:

  • Dùng virtual environment:

sudo apt install python3-venv -y
python3 -m venv venv-ai
source venv-ai/bin/activate
pip install kafka-python pandas scikit-learn

python


🔧 3. Không cài được Grafana

Lỗi:

E: Unable to locate package grafana

Nguyên nhân: Grafana không có trong repo mặc định của Ubuntu.

Khắc phục:

  • Thêm repo chính thức:

curl -fsSL https://packages.grafana.com/gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/grafana.gpg
echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://packages.grafana.com/oss/deb stable main" | sudo tee /etc/apt/sources.list.d/grafana.list
sudo apt update
sudo apt install grafana -y

🧱 4. Kibana không truy cập được từ ngoài

Lỗi: Kibana chạy nhưng không truy cập được từ máy khác.

Nguyên nhân: Kibana mặc định chỉ lắng nghe trên localhost.

Khắc phục:

  • Sửa /etc/kibana/kibana.yml:

server.host: "0.0.0.0"
  • Khởi động lại:

sudo systemctl restart kibana

🛰️ 5. Logstash không decode được NetFlow

Lỗi:

Can't decode flowset id 1024... because no template...

Nguyên nhân: Softflowd chưa gửi đủ mẫu để Logstash hiểu định dạng gói.

Khắc phục: Đợi thêm 1–2 phút hoặc chắc chắn rằng softflowd đã cấu hình đúng:

sudo softflowd -i ens33 -n <ip-vm-logstash>:2055 -v 9 -t maxlife=30

📦 6. Kafka không khởi động

Lỗi phổ biến:

bin/zookeeper-server-start.sh: No such file...

Nguyên nhân: Không chạy đúng thư mục hoặc chưa giải nén đúng Kafka.

Khắc phục:

  • Đảm bảo bạn đang trong thư mục Kafka:

cd ~/kafka
bin/zookeeper-server-start.sh config/zookeeper.properties

💡 7. Dữ liệu không hiện lên Grafana/Kibana

Nguyên nhân: Chưa có dữ liệu hoặc sai định dạng datasource.

Khắc phục:

  • Kiểm tra Logstash đã ghi vào Kafka chưa

  • Kiểm tra consumer có nhận đúng topic

  • Với Grafana: kiểm tra datasource đúng (ClickHouse / Elasticsearch)

  • Với Kibana: tạo index pattern trùng với tên index


 

About

Công ty thiết kế web app chuyên thiết kế web và các dịch vụ maketing digital, seo, google adword...