Đồ án Tốt nghiệp — Học viện Công nghệ Bưu chính Viễn thông (PTIT)
Sinh viên thực hiện: Dương Công Sáng
Giảng viên hướng dẫn: TS. Huỳnh Trọng Thưa
MSSV: N25CHHT006
Chuyên ngành: Hệ thống Thông tin
Bối cảnh, thách thức bảo mật và mục tiêu xây dựng hệ thống
Blockchain, Cơ chế đồng thuận, Chữ ký số, Smart Contract
Kiến trúc hệ thống, Công nghệ, Luồng dữ liệu, Agent, Dashboard
Demo thực tế, Kết quả đạt được, Hạn chế & Hướng phát triển
Trong môi trường đám mây, máy chủ liên tục phát sinh các sự kiện bảo mật: đăng nhập SSH bất thường, thay đổi file cấu hình, tài nguyên vượt ngưỡng. Vấn đề cốt lõi nằm ở chỗ log thường chỉ được lưu tập trung trên một server — khi server đó bị tấn công, toàn bộ bằng chứng có thể bị xóa hoặc giả mạo.
Xây dựng mạng Ethereum Private (Geth, Clique PoA) trên 3 máy ảo với Chain ID 1337, đảm bảo đồng bộ sổ cái chung.
Triển khai Agent Node.js trên từng VM, tự động phát hiện sự kiện bảo mật: SSH login, thay đổi file, tài nguyên bất thường.
Lưu log vào Smart Contract SecurityLog dưới dạng transaction bất biến — không ai có thể chỉnh sửa sau khi xác nhận.
Xây dựng Dashboard Web (Next.js) hiển thị biểu đồ phân bố sự kiện, line chart tài nguyên và bảng log chi tiết.
Mỗi VM có writer account độc lập. Mọi log đều được ký số bởi Private Key của VM đó — đảm bảo xác thực nguồn gốc.
Blockchain là một chuỗi các khối (block) được liên kết bằng hàm băm mật mã. Mỗi block chứa: danh sách transaction, hash của block trước, timestamp và nonce. Khi một block đã được thêm vào chuỗi, dữ liệu bên trong không thể sửa đổi vì sẽ làm thay đổi hash → phá vỡ toàn bộ liên kết chuỗi.
Ai cũng có thể tham gia mạng. Ví dụ: Bitcoin, Ethereum Mainnet. Phù hợp ứng dụng phi tập trung toàn cầu.
Chỉ các node được cấp phép mới tham gia. Phù hợp doanh nghiệp, môi trường kiểm soát. Đề tài này sử dụng loại này.
Cơ chế đồng thuận quyết định cách các node trong mạng blockchain thống nhất về trạng thái sổ cái. Đề tài lựa chọn Proof of Authority (PoA) Clique vì mạng riêng 3 node đã biết danh tính, không cần tiêu tốn năng lượng tính toán.
Sinh ngẫu nhiên, bí mật. Lưu trong keystore mã hóa AES-128, bảo vệ bằng password.
Được tạo từ Private Key qua thuật toán đường cong elliptic. Dùng để xác minh chữ ký.
Bắt đầu bằng 0x... — là định danh duy nhất của mỗi tài khoản trên mạng.
MasterNode: 0x873d...07fd
WorkerNode1: 0x3f1b...110e
WorkerNode2: 0x4a49...10b8
addLog()struct LogEntry {
string nodeId; // ID của VM gửi log
string eventType; // SSH_LOGIN | FILE_INTEGRITY
// | RESOURCE_WARNING
string eventData; // JSON payload chi tiết
uint256 timestamp; // Unix timestamp
string sourceIP; // IP nguồn của sự kiện
}
modifier onlyAuthorized() {
require(authorizedNodes[msg.sender],
"Not authorized");
_;
}
function addLog(...) public onlyAuthorized {
// Chỉ account được authorize mới ghi được
}Danh sách các account được phép ghi log. Chỉ địa chỉ trong whitelist mới có quyền gọi addLog().
Kiểm tra msg.sender trước mỗi lần ghi. Nếu chưa được authorize → transaction bị revert ngay lập tức.
Chỉ người deploy contract mới có quyền gọi authorizeNode() để thêm node mới vào mạng.
Địa chỉ contract: 0xa0c3...c40 — dùng chung toàn mạng. Code không thể sửa sau khi deploy.

Mạng Ethereum riêng được thiết lập với Geth client, sử dụng thuật toán đồng thuận Clique PoA (Proof of Authority) để đảm bảo hiệu suất và kiểm soát trong môi trường nội bộ.
GethClique PoA13375 giây192.168.10.0/24IP: 192.168.10.50
Node chính, khởi tạo genesis block và quản lý mạng.
IP: 192.168.10.51
Node validator thứ nhất, tham gia đồng thuận và lưu trữ blockchain.
IP: 192.168.10.52
Node validator thứ hai, đảm bảo tính dự phòng và phân tán dữ liệu.
Danh sách account được phép ghi log
Kiểm tra msg.sender trước mỗi lần ghi, nếu chưa authorize → transaction bị revert
Chỉ người deploy contract mới gọi được authorizeNode() để thêm node mới

Agent Node.js chạy 24/7 trên mỗi VM. Tự động phát hiện sự kiện bảo mật, ký transaction và gửi lên blockchain.
Đọc realtime /var/log/auth.log bằng tail -f. Phát hiện đăng nhập thành công/thất bại. Parse thông tin: user, IP nguồn, timestamp. Gửi log lên blockchain ngay khi phát hiện.
Dùng thư viện chokidar theo dõi thư mục cấu hình. Phát hiện thay đổi, tạo mới, xóa file. Tính hash SHA-256 trước/sau để so sánh. Cảnh báo ngay khi file bị sửa đổi bất thường.
Kiểm tra CPU, RAM, Disk mỗi 60 giây. Ngưỡng cảnh báo: CPU > 80%, RAM > 85%, Disk > 90%. Ghi log RESOURCE_WARNING khi vượt ngưỡng.

đọc blockchain qua JSON-RPC, cung cấp REST API cho frontend
giao diện hiện đại, responsive, cập nhật realtime
biểu đồ thống kê sự kiện theo thời gian
public domain, HTTPS

7 bước xử lý tự động — từ sự kiện bảo mật đến Dashboard
SSH login / file thay đổi / CPU vượt ngưỡng trên VM
Đọc auth.log / chokidar / systeminformation
nodeId, eventType, eventData, sourceIP, timestamp
Agent gọi addLog() → Geth ký bằng writer account
Validator đóng block mỗi 5 giây, đồng bộ toàn mạng
Express.js gọi getLogs() qua JSON-RPC
Frontend polling 30s, render bảng log + biểu đồ
Đọc realtime file /var/log/auth.log bằng tail stream. Dùng regex phát hiện đăng nhập thành công hoặc thất bại.
SSH_LOGINDùng thư viện chokidar giám sát realtime thư mục nhạy cảm (/etc hoặc thư mục demo được cấu hình).
Kiểm tra CPU, RAM, Disk định kỳ mỗi 15 giây. Cảnh báo khi vượt ngưỡng cấu hình qua biến RESOURCE_THRESHOLD.
RESOURCE_WARNING
Giao diện Glassmorphism hiện đại, xác thực admin trước khi truy cập hệ thống.
4 card thống kê (Total Events, SSH Anomalies, File Integrity, Resource Warnings). Donut chart phân bố sự kiện. Line chart CPU/RAM/Disk theo thời gian.
Bảng log có phân trang, click vào từng dòng để xem modal JSON payload gốc từ blockchain. Truy vết đến tận transaction.
Quản lý metadata các VM: IP, role, trạng thái kết nối. Tab Ledger Connection hiển thị chainId, blockNumber, địa chỉ contract.
🌐 Truy cập trực tiếp tại: https://monitor.duongcongsang.com — Deploy bằng PM2 + Traefik + Let's Encrypt SSL
SSH vào WorkerNode1 từ máy ngoài. Agent phát hiện ngay lập tức → ký transaction → Dashboard hiển thị log SSH_LOGIN mới có IP nguồn chính xác.
Sửa file cấu hình trong thư mục giám sát trên MasterNode. Agent phát hiện MODIFIED → ký transaction → Dashboard hiển thị đường dẫn file bị thay đổi.
Chạy lệnh stress --cpu trong 20 giây. CPU lên 100% → Agent ghi snapshot → Dashboard hiển thị RESOURCE_WARNING với thông số cpu%, ram%, disk% chính xác.
Click vào transaction cũ đã ghi từ trước — payload JSON vẫn còn nguyên vẹn 100%. Minh chứng: không ai có thể sửa hoặc xóa log đã ghi vào blockchain.
Mạng Geth PoA Clique hoạt động ổn định 24/7 với Chain ID 1337
Bất biến trên sổ cái blockchain, không thể sửa đổi hay xóa bỏ
SSH, File Integrity, Resource — hoạt động đồng thời trên cả 3 VM
Transaction được xác nhận trong 5 giây theo Clique PoA
✅ Smart Contract SecurityLog hoạt động ổn định, phân quyền ghi log qua authorizedNodes
✅ Dashboard chuyên nghiệp: donut chart, line chart CPU/RAM/Disk, bảng log phân trang, modal JSON
✅ Deploy production tại monitor.duongcongsang.com với PM2, Traefik reverse proxy và Let's Encrypt SSL
JSON lưu trực tiếp trên blockchain tốn gas. Phù hợp quy mô demo nhưng chưa tối ưu cho production lớn.
Login hiện đang hardcode, chưa có user database và phân quyền theo vai trò người dùng.
Chưa tích hợp WebSocket, Email hay Telegram để thông báo ngay khi phát hiện sự kiện nghiêm trọng.
Khi mất kết nối RPC, Agent cần khởi động lại thủ công, chưa có cơ chế retry tự động.
Lưu hash payload on-chain, dữ liệu chi tiết trên IPFS hoặc MongoDB để tiết kiệm gas và tăng khả năng mở rộng.
Thêm hệ thống xác thực JWT và database người dùng với phân quyền admin/viewer cho dashboard.
Thông báo realtime qua Telegram bot hoặc Email khi phát hiện sự kiện bảo mật nghiêm trọng.
Kết hợp Snort hoặc Suricata làm nguồn sự kiện bổ sung. Export báo cáo PDF/CSV cho kiểm toán.
Kính mời Hội đồng đặt câu hỏi
https://monitor.duongcongsang.com
Dashboard trực quan hóa toàn bộ hệ thống giám sát theo thời gian thực
Dương Công Sáng
Học viện Công nghệ Bưu chính Viễn thông (PTIT) — 2026
Hệ thống Giám sát Bảo mật Máy chủ Đám mây dựa trên Công nghệ Blockchain
Hệ thống Giám sát Bảo mật Máy chủ Đám mây dựa trên Công nghệ Blockchain