基于LoRA(Low-Rank Adaptation)技术的网络流量安全分类器,使用大语言模型进行网络攻击检测和分类。
- 🎯 精确分类:支持多种网络攻击类型识别(Web Attack、Brute Force、Infiltration等)
- 🧠 可解释性:生成分类原因说明
- 💡 参数高效:使用LoRA技术,只训练少量参数
- 🚀 灵活模型:支持Llama-3.1、Qwen2.5/3等多种基座模型
- 📊 丰富指标:详细的per-class precision/recall/f1评估
pip install -r requirements.txt对于公开模型(如Llama-3.1),不需要token。如果使用gated模型,需要设置token:
# 复制环境变量模板
cp .env.example .env
# 编辑.env文件,填入你的token
# HF_TOKEN=hf_xxxxxxxxxx
# 或直接设置环境变量
export HF_TOKEN=your_token_here创建平衡训练集(从原始数据集采样20K样本):
python3 create_12h_training_set.py \
--input_train data/processed/llm_input_enriched_train.jsonl \
--input_val data/processed/llm_input_enriched_val.jsonl \
--output_train data/processed/train_12h.jsonl \
--output_val data/processed/val_12h.jsonl创建自然分布测试集(10K样本,保持原始99% BENIGN比例):
python3 create_natural_test_set.pyCUDA_VISIBLE_DEVICES=0 python3 train_lora_netflow_refined.py \
--train_path data/processed/train_12h.jsonl \
--val_path data/processed/val_12h.jsonl \
--base_model meta-llama/Llama-3.1-8B-Instruct \
--out_dir lora-llama31-12h \
--epochs 3 \
--max_len 1536 \
--per_device_bs 2 \
--grad_accum 8 \
--load_in_4bit \
--bf16平衡测试集(100样本):
CUDA_VISIBLE_DEVICES=0 python3 train_lora_netflow_refined.py \
--eval_path data/processed/llm_input_enriched_test_sample100.jsonl \
--adapter lora-llama31-12h/checkpoint-800 \
--base_model meta-llama/Llama-3.1-8B-Instruct \
--mode eval自然分布测试集(10K样本,~99% BENIGN):
CUDA_VISIBLE_DEVICES=0 python3 train_lora_netflow_refined.py \
--eval_path data/processed/llm_input_enriched_test_natural10k.jsonl \
--adapter lora-llama31-12h/checkpoint-800 \
--base_model meta-llama/Llama-3.1-8B-Instruct \
--mode eval评估Base Model(无LoRA):
CUDA_VISIBLE_DEVICES=0 python3 train_lora_netflow_refined.py \
--eval_path data/processed/llm_input_enriched_test_sample100.jsonl \
--base_model meta-llama/Llama-3.1-8B-Instruct \
--mode eval{
"flow_id": 1,
"tuple5": ["192.168.1.1", "10.0.0.1", 45123, 80, 6],
"window": [1234567890.0, 1234567895.0],
"features": {
"packet_count": 150,
"byte_count": 75000,
"flow_dur_ms": 5000.0,
"tcp_syn_ratio": 0.02,
"payload_entropy": 6.5,
...
},
"enriched": {
"protocols": ["HTTP", "TCP"]
},
"label": "Web Attack - XSS"
}{
"label": "Web Attack - XSS",
"explanation": "HTTP traffic on port 80 with high packet count (150 packets) and large payload (75KB) showing high ASCII ratio (0.85) indicating text-based content"
}meta-llama/Llama-3.1-8B-Instruct(推荐)meta-llama/Llama-2-7b-hf
Qwen/Qwen3-8B-Instruct(最新)Qwen/Qwen2.5-7B-Instruct
mistralai/Mistral-7B-Instruct-v0.2
DeepShield/
├── train_lora_netflow_refined.py # 主训练/评估脚本
├── create_12h_training_set.py # 创建平衡训练集
├── create_natural_test_set.py # 创建自然分布测试集
├── requirements.txt # Python依赖
├── .env.example # 环境变量模板
├── .gitignore # Git忽略配置
└── data/processed/ # 数据目录
├── train_12h.jsonl # 平衡训练集(20K)
├── val_12h.jsonl # 验证集(2K)
├── llm_input_enriched_test_sample100.jsonl # 测试集(100)
└── llm_input_enriched_test_natural10k.jsonl # 自然分布测试集(10K)
--base_model: 基座模型名称--train_path: 训练数据路径--val_path: 验证数据路径--out_dir: 输出目录--adapter: LoRA adapter路径(eval时使用)
--r: LoRA rank(默认16)--alpha: LoRA alpha(默认32)--dropout: LoRA dropout(默认0.05)
--epochs: 训练轮数(默认3)--lr: 学习率(默认2e-4)--per_device_bs: 每设备batch size(默认1)--grad_accum: 梯度累积步数(默认16)--max_len: 最大序列长度(默认4096)
--remove_eos_from_training: 去掉训练序列的EOS token,鼓励模型生成explanation--disable_explanation_fallback: 禁用hard-coded explanation生成fallback
评估时会输出:
- Accuracy
- Macro Precision/Recall/F1
- Weighted Precision/Recall/F1
- 每个类别的Precision、Recall、F1、Support
示例输出:
============================================================
Overall Metrics:
============================================================
Accuracy: 0.9850
Macro Precision: 0.8234
Macro Recall: 0.7891
Macro F1: 0.8058
Weighted Precision: 0.9823
Weighted Recall: 0.9850
Weighted F1: 0.9836
Total Samples: 10000
============================================================
Per-Class Metrics:
============================================================
Class Precision Recall F1 Support
--------------------------------------------------------------------------------
BENIGN 0.9900 0.9990 0.9945 9911
Web Attack - Brute Force 0.7500 0.7500 0.7500 37
Web Attack - XSS 0.8333 0.8333 0.8333 27
...
训练数据格式:
{"label": "Web Attack - XSS", "explanation": "- Completion在引号未闭合处结束
- 不包含EOS token(使用
--remove_eos_from_training) - 鼓励模型在eval时继续生成explanation
- Target modules:
q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj - 4-bit量化(
load_in_4bit) - BF16混合精度训练
- Scheduler: Cosine with warmup
- Warmup steps: 100
- Learning rate: 2e-4
# 设置环境变量
export HF_TOKEN=your_token_here
# 或使用.env文件
cp .env.example .env
# 编辑.env填入token- 减少
--per_device_bs(尝试1) - 增加
--grad_accum(尝试16或32) - 减少
--max_len(尝试1024或512) - 使用4-bit量化(
--load_in_4bit)
- 增加
--per_device_bs(如果显存允许) - 减少
--grad_accum - 使用更少数据或更少epochs
MIT License
欢迎提交Issue和Pull Request!
本工具仅用于安全研究和教育目的。使用者需遵守当地法律法规。