Mlauncher6/CMLF
GitHub: Mlauncher6/CMLF
一款具备 AI 威胁检测和自动学习能力的可定制化 Linux 状态防火墙。
Stars: 0 | Forks: 0
# CMLF
🔥 CMLF - 可定制化 MLuncher 防火墙 | 企业级状态防火墙,具备 AI 驱动的威胁检测、TUI 仪表板和自动学习模式
# 🔥 CMLF - 可定制化模块化 Linux 防火墙
### *具备 AI 驱动威胁检测的企业级状态防火墙*
[](https://golang.org)
[](https://www.linux.org)
[](LICENSE)
**🌐 [英语](README.md) | [波斯语](README-fa.md)**
## 🎯 **为什么选择 CMLF?**
CMLF 不仅仅是一个防火墙——它是一个能够实时**学习**、**适应**和**保护**的智能安全系统。
| 传统防火墙 | CMLF |
|----------------------|------|
| ❌ 仅基于静态规则 | ✅ **动态异常检测** |
| ❌ 无学习能力 | ✅ **自动流量分析** |
| ❌ 基础终端界面 | ✅ **现代化 TUI 仪表板** |
| ❌ 手动黑名单管理 | ✅ **带过期时间的自动拦截** |
| ❌ 无 API | ✅ **REST + Prometheus 指标** |
## ✨ **独具匠心的功能**
### 🛡️ **智能威胁检测**
- **端口扫描检测** - 超过阈值后自动拦截扫描器
- **SSH 暴力破解防护** - 动态 IP 黑名单
- **数据泄露检测** - 监控大型数据包传输
- **速率限制** - 基于客户端的令牌桶算法
### 🎨 **现代化界面**
- **实时 TUI** - 实时连接追踪和统计
- **HTTP API** - JSON 状态和 Prometheus 指标 endpoint
- **颜色编码仪表板** - 易于阅读的视觉反馈
### 🧠 **智能特性**
- **学习模式** - 分析并建立正常流量模型
- **状态检测** - 完整的 TCP 连接追踪
- **持久化黑名单** - 通过 JSON 保存,重启后依然有效
- **试运行模式** - 在强制执行前测试规则
### 🔧 **生产就绪**
- **iptables 集成** - 内核级数据包过滤
- **Systemd 支持** - 作为后台服务运行
- **零依赖** - 单一静态二进制文件
- **低资源占用** - 通常仅需约 50MB RAM
## 📋 **快速入门指南**
### **步骤 1:安装依赖**
```
# Ubuntu/Debian
sudo apt-get update && sudo apt-get install -y \
libpcap-dev \
iptables \
build-essential
# RHEL/CentOS/Fedora
sudo yum install -y \
libpcap-devel \
iptables \
gcc
# Arch Linux
sudo pacman -S \
libpcap \
iptables \
base-devel
### **步骤 2:安装 Go(如果未安装)**
```bash
# 下载并安装 Go 1.21+
wget https://go.dev/dl/go1.21.5.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.21.5.linux-amd64.tar.gz
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
source ~/.bashrc
```
### **步骤 3:获取 CMLF**
```
# 克隆仓库
git clone https://github.com/Mlauncher6/cmlf.git
cd cmlf
# 下载 Go 依赖
go mod init cmlf
go get github.com/google/gopacket
go get github.com/charmbracelet/bubbletea
go get github.com/charmbracelet/lipgloss
# 构建二进制文件
go build -ldflags="-s -w" -o cmlf CMLF.go
```
### **步骤 4:设置配置**
```
# 创建配置目录
sudo mkdir -p /etc/cmlf
# 创建默认规则文件
sudo tee /etc/cmlf/rules.conf << 'EOF'
# ============================================
# CMLF 防火墙规则配置
# ============================================
# 格式:ACTION [conditions]
# 动作:allow, deny, ratelimit, whitelist, blacklist
# ============================================
# 允许本地网络流量
allow src 192.168.0.0/16
allow src 10.0.0.0/8
allow src 172.16.0.0/12
# 限制 Web 流量速率(50 请求/秒,突发 100)
ratelimit dst port 80 rate 50/sec burst 100
ratelimit dst port 443 rate 50/sec burst 100
# 阻止已知的恶意子网
deny src 185.130.5.0/24
deny src 45.155.205.0/24
# 将关键服务加入白名单(覆盖所有其他规则)
whitelist ip 8.8.8.8
whitelist ip 1.1.1.1
# 保护 SSH
deny dst port 22 src 0.0.0.0/0
# 允许 ICMP (ping)
allow proto icmp
# 默认:允许其他所有流量(隐式)
EOF
# 设置适当的权限
sudo chmod 644 /etc/cmlf/rules.conf
```
### **步骤 5:运行 CMLF**
```
# 使用 TUI 运行(推荐用于监控)
sudo ./cmlf --tui
# 作为 daemon 运行(生产环境)
sudo ./cmlf --daemon
# 学习模式 - 首先分析您的网络配置!
sudo ./cmlf --learn --duration=3600
```
## 🎮 **完整使用指南**
### **命令行选项**
```
CMLF v1.0.0 - Customizable Modular Linux Firewall
Usage:
sudo ./cmlf [OPTIONS]
Options:
--tui Launch interactive terminal UI
--daemon Run as background service
--learn Enable learning mode
--duration=3600 Learning duration in seconds
--interface=eth0 Network interface to monitor
--config=/etc/cmlf/rules.conf
--dry-run Test without blocking
--disable-http Disable HTTP metrics server
Blacklist Management:
--block-add=1.2.3.4 Add IP to blacklist
--reason="Port scan" Block reason
--block-remove=1.2.3.4 Remove IP from blacklist
--block-list Show all blocked IPs
--status Show firewall status
Examples:
sudo ./cmlf --tui --interface=ens33
sudo ./cmlf --learn --duration=1800
sudo ./cmlf --block-add=192.168.1.100 --reason="SSH brute force"
```
### **TUI 键盘快捷键**
| 按键 | 操作 |
|-----|--------|
| `q` / `Ctrl+C` | 退出 CMLF |
| `b` | 查看黑名单 IP |
| `r` | 从文件重新加载规则 |
| `l` | 激活学习模式 |
| `↑` `↓` | 滚动列表 |
## 📊 **监控与指标**
### **HTTP API 端点**
```
# 获取 JSON 状态
curl http://localhost:9090/status
# 查看黑名单
curl http://localhost:9090/blacklist
# Prometheus 指标
curl http://localhost:9090/metrics
```
### **响应示例**
```
{
"uptime": 86400.5,
"packets_processed": 15234567,
"packets_dropped": 1234,
"active_connections": 42,
"blacklisted_ips": 8
}
```
### **Prometheus 集成**
```
# prometheus.yml
scrape_configs:
- job_name: 'cmlf'
static_configs:
- targets: ['localhost:9090']
metrics_path: '/metrics'
```
### **Grafana 仪表板**
导入以下查询以获取数据包速率:
```
rate(cmlf_packets_processed[1m])
```
## 🧪 **测试你的防火墙**
### **测试端口扫描检测**
```
# 从另一台机器(注意:这将阻止您的 IP!)
nmap -p 1-1000 YOUR_FIREWALL_IP
# 检查是否被阻止
sudo ./cmlf --block-list
```
### **测试 SSH 暴力破解防护**
```
# 使用 hydra(仅用于测试!)
hydra -l root -p /usr/share/wordlists/rockyou.txt ssh://YOUR_FIREWALL_IP
# 验证阻止
sudo iptables -L INPUT -n -v | grep DROP
```
### **测试速率限制**
```
# 发送快速的 HTTP 请求
for i in {1..200}; do
curl -s http://YOUR_SERVER > /dev/null &
done
# 在 TUI 中检查丢弃的数据包
```
### **验证学习模式**
```
# 步骤 1:开始学习
sudo ./cmlf --learn --duration=300
# 步骤 2:生成正常流量
curl -s http://google.com
ping -c 10 google.com
# 步骤 3:检查配置概况
cat profile.json | jq '.top_dest_ports'
```
## 🏗️ **生产环境部署**
### **选项 1:Systemd 服务**
```
# 创建服务文件
sudo tee /etc/systemd/system/cmlf.service << 'EOF'
[Unit]
Description=CMLF Enterprise Firewall
Documentation=https://github.com/yourusername/cmlf
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/local/bin/cmlf --daemon --interface=eth0
Restart=always
RestartSec=10
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
EOF
# 安装二进制文件
sudo cp cmlf /usr/local/bin/
sudo chmod 755 /usr/local/bin/cmlf
# 启用并启动
sudo systemctl daemon-reload
sudo systemctl enable cmlf
sudo systemctl start cmlf
# 检查状态
sudo systemctl status cmlf
sudo journalctl -u cmlf -f
```
### **选项 2:Docker 容器**
```
# Dockerfile
FROM ubuntu:22.04
RUN apt-get update && apt-get install -y \
libpcap-dev \
iptables \
ca-certificates
COPY cmlf /usr/local/bin/cmlf
COPY rules.conf /etc/cmlf/rules.conf
ENTRYPOINT ["/usr/local/bin/cmlf"]
CMD ["--daemon", "--interface=eth0"]
```
```
# 构建并运行
docker build -t cmlf:latest .
docker run --cap-add=NET_ADMIN --cap-add=NET_RAW \
--network host \
-v /etc/cmlf:/etc/cmlf \
cmlf:latest
```
## 🔧 **高级配置**
### **调优异常检测**
编辑 `CMLF.go` 并重新编译:
```
// Port scan detection
PortScanThreshold: 10, // Ports to trigger block (10)
PortScanWindow: 5, // Time window in seconds
PortScanBlockTime: 10, // Block duration in minutes
// SSH brute force
SSHBruteThreshold: 5, // Failed attempts to trigger (5)
SSHBruteWindow: 30, // Time window in seconds
SSHBruteBlockTime: 30, // Block duration in minutes
// Data exfiltration
ExfilThreshold: 50, // Large packets to trigger
ExfilWindow: 10, // Time window in seconds
ExfilPacketSize: 1400, // "Large" packet definition (bytes)
```
### **自定义速率限制**
在 `rules.conf` 中:
```
# API 速率限制
ratelimit dst port 8080 rate 100/sec burst 200
# DNS 速率限制
ratelimit dst port 53 rate 20/sec burst 50
# SMTP 速率限制
ratelimit dst port 25 rate 10/sec burst 30
```
### **地理拦截 (CIDR 列表)**
```
# 下载中国 IP 范围
wget https://raw.githubusercontent.com/ipverse/asn-ip/master/data/country/cn.ipv4
# 添加到 rules.conf
while read ip; do
echo "deny src $ip" >> /etc/cmlf/rules.conf
done < cn.ipv4
```
## 📁 **文件结构与自动创建**
CMLF 会自动创建必要的文件:
| 路径 | 自动创建? | 何时创建? |
|------|--------------|-------|
| `/etc/cmlf/` | ❌ 手动 | 创建一次 |
| `/etc/cmlf/rules.conf` | ❌ 手动 | 自定义规则时必需 |
| `./blacklist.json` | ✅ 自动 | 首次拦截后 |
| `./profile.json` | ✅ 自动 | 学习模式结束后 |
| `/var/log/cmlf.log` | ⚠️ 可选 | 使用 `-log` 标志启用 |
**快速设置:**
```
# 一次性设置
sudo mkdir -p /etc/cmlf
sudo tee /etc/cmlf/rules.conf << 'EOF'
allow src 0.0.0.0/0
EOF
# 运行 CMLF - blacklist.json 将自动创建
sudo ./cmlf --tui
# 学习模式 - profile.json 将自动创建
sudo ./cmlf --learn --duration=3600
```
## 🚨 **故障排除指南**
### **“Permission denied” 错误**
```
# 解决方案 1:始终使用 sudo
sudo ./cmlf --tui
# 解决方案 2:设置 capabilities(高级)
sudo setcap cap_net_raw,cap_net_admin+eip ./cmlf
./cmlf --tui # Now works without sudo
```
### **未捕获到数据包**
```
# 列出可用接口
ip link show
# 启用 promiscuous mode
sudo ip link set eth0 promisc on
# 使用特定接口测试
sudo ./cmlf --tui --interface=ens33
```
### **iptables 规则未生效**
```
# 检查 iptables 是否已安装
which iptables
# 验证 kernel modules
lsmod | grep iptable
# 检查 dry-run 模式
./cmlf --dry-run # Remove this flag!
# 手动测试
sudo iptables -I INPUT -s 1.2.3.4 -j DROP
sudo iptables -L INPUT -n
```
### **TUI 显示异常**
```
# 设置正确的终端
export TERM=xterm-256color
# 增加缓冲区大小
stty rows 50 cols 120
# 使用不同的终端模拟器
# (gnome-terminal, konsole, tmux 均可)
```
### **内存占用过高**
```
# 减少 connection tracking 超时
# 编辑 CMLF.go 大约第 180 行:
Established: 600 * time.Second # Reduced from 3600
# 定期清理连接表
sudo conntrack -F
```
## 📈 **性能基准测试**
| 指标 | 数值 |
|--------|-------|
| **数据包吞吐量** | ~150,000 pps (单核) |
| **内存占用** | 50-100 MB |
| **CPU 占用 (空闲)** | <1% |
| **CPU 占用 (10k pps)** | ~15% |
| **连接追踪** | 最多 65,535 个并发连接 |
| **黑名单容量** | 无限制 (由磁盘存储) |
## 🔐 **安全最佳实践**
1. **务必先使用学习模式**
sudo ./cmlf --learn --duration=86400 # 24 小时
2. **在生产环境中启用试运行**
sudo ./cmlf --daemon --dry-run
# 在强制执行前监控误报情况
3. **定期审查黑名单**
# 日常 cron 任务
0 0 * * * /usr/local/bin/cmlf --block-list > /var/log/cmlf-blacklist.log
4. **监控指标 endpoint**
# 在高丢弃率时发出警报
watch -n 5 'curl -s http://localhost:9090/metrics | grep dropped'
5. **备份配置**
tar czf cmlf-backup-$(date +%Y%m%d).tar.gz /etc/cmlf/ blacklist.json
## 🤝 **贡献**
欢迎您的贡献!请参阅我们的[贡献指南](CONTRIBUTING.md)。
**需要帮助的领域:**
- IPv6 实现
- Web UI (React/Vue)
- 更多协议解析器 (SCTP, GRE)
- 使用 eBPF 进行性能优化
- 补充文档翻译
## 📚 **常见问题**
**问:CMLF 可以完全替代 iptables 吗?**
答:不能——CMLF 与 iptables 协同工作,利用它进行内核级过滤,同时为其增加智能特性。
**问:支持 IPv6 吗?**
答:部分支持——可以捕获数据包,但异常检测目前专注于 IPv4。计划在未来提供完整支持。
**问:如何解除对某个 IP 的拦截?**
答:执行 `sudo ./cmlf --block-remove=1.2.3.4`,或者通过 `sudo iptables -D INPUT -s 1.2.3.4 -j DROP` 手动解除。
**问:我可以在路由器上使用 CMLF 吗?**
答:可以!适用于任何 Linux 设备(Raspberry Pi、VPS、专用服务器)。
**问:在 DDoS 攻击下的性能表现如何?**
答:速率限制会有所帮助,但对于大规模 DDoS,建议使用 Cloudflare 或专用的 DDoS 防护服务。
## 📄 **许可证**
**MIT 许可证** - 个人和商业使用均免费。详情请参阅 [LICENSE](LICENSE)。
## ⚖️ **法律免责声明**
本软件仅供合法的安全目的使用。用户有责任遵守当地的法律法规。对于因滥用本软件或本软件造成的损害,作者不承担任何责任。
## ⭐ **展示您的支持**
如果 CMLF 帮助保护了您的基础设施:
- ⭐ 为本仓库点亮 Star
- 🐛 报告问题
- 🔧 提交 pull request
- 📝 撰写博客文章
- 🎤 在技术交流会上分享
**用 💜 和 Go 构建**
标签:EVTX分析, Go语言, Linux防火墙, TUI, 异常检测, 插件系统, 日志审计, 程序破解, 系统运维, 网络安全, 网络测绘, 自定义请求头, 请求拦截, 隐私保护