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

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
🖥️ 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

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"
}
}

🔍 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ã. -
softflowdvà các agent khác sẽ:-
Gửi template mô tả cấu trúc bản ghi → Logstash lưu lại.
-
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.
-

✅ 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
ClickHouseSinkConnectorhoặ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-netflowvà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.combằngarchive.ubuntu.comtrong/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

🔧 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
