安装地址:git clone https://gitee.com/yyongs/waf.git
C-Proxy-WAF 网络安全实验报告(完整版)
一、实验概述
1.1 实验目的
本次实验基于纯 C 语言、epoll-ET 高并发模型手动开发一款轻量级反向代理 WAF(Web 应用防火墙)。通过从零实现 HTTP 代理、报文解析、攻击特征检测、日志审计、CC 防护、IP 黑白名单、蜜罐封禁、热重载、守护进程等功能,深入理解 Web 攻击原理、WAF 防护机制、Linux 高并发网络编程架构。
同时结合 Apache2 搭建后端 Web 服务,实现 客户端 → C-Proxy-WAF → Apache2 业务服务 的完整防护链路,完成 Web 安全防护实验验证。
1.2 项目特性
- 基于 Linux epoll-ET 边缘触发非阻塞 IO,高并发、高性能
- 完整 HTTP1.1 代理链路(GET/POST/Cookie 全解析)
- SQL 注入、XSS、路径遍历攻击检测
- 外部规则文件热加载,无需重新编译
- 可开关告警/阻断双模式(waf_block)
- 单IP CC 并发防护、报文长度防溢出
- IP 白名单、IP 临时蜜罐封禁系统
- 完整日志落盘:访问日志、攻击日志、原始报文日志
- Systemd 守护进程、后台运行、SIGHUP 热重载、SIGUSR1 状态统计
- 优雅退出、内存防泄漏、SIGPIPE 容错、超时回收 FD
二、整体实验架构
用户访问链路:
客户端浏览器/攻击脚本 → C-Proxy-WAF(80端口) → Apache2 后端服务(8000端口)
WAF 作为反向代理网关,对所有 HTTP 流量进行解析、检测、日志记录、拦截防护,保护后端 Apache2 服务不直接暴露公网。
三、环境部署
3.1 实验环境 - 操作系统:Ubuntu 20.04 / 22.04
- 编译环境:GCC、Make
- 后端服务:Apache2
- 开发语言:标准 C(POSIX 无第三方库)
3.2 Apache2 后端部署
安装并配置后端 Web 服务,用于 WAF 代理转发:
sudo apt update
sudo apt install apache2 -y
sudo systemctl start apache2
sudo systemctl enable apache2
修改 Apache 监听端口为 8000(避免与 WAF 80 端口冲突):
sudo vim /etc/apache2/ports.conf
修改 Listen 80 -> Listen 8000
sudo vim /etc/apache2/sites-available/000-default.conf
修改 <VirtualHost *:80> -> <VirtualHost *:8000>
sudo systemctl restart apache2
验证:访问 127.0.0.1:8000 出现 Apache 默认页面。
3.3 C-Proxy-WAF 源码部署
克隆项目并编译:
git clone https://gitee.com/yyongs/waf.git
cd waf
mkdir -p logs rules
touch rules/sqli.rule rules/xss.rule rules/path.rule rules/ip_black.list
touch rules/ip_white.list rules/honeypot.path
make
3.4 Systemd 生产部署(守护进程)
新建 systemd 服务文件:
sudo vim /etc/systemd/system/c-proxy-waf.service
写入内容:
[Unit]
Description=C-Proxy-WAF Epoll Web Application Firewall
After=network.target
[Service]
Type=simple
WorkingDirectory=/home/bj/waf
ExecStart=/home/bj/waf/c-proxy-waf
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=3
LimitNOFILE=8192
[Install]
WantedBy=multi-user.target
启动并开机自启:
sudo systemctl daemon-reload
sudo systemctl start c-proxy-waf
sudo systemctl enable c-proxy-waf
常用运维命令:
- 热重载配置/规则:kill -HUP $(pidof c-proxy-waf)
- 查看运行统计:kill -USR1 $(pidof c-proxy-waf)
- 查看日志:journalctl -u c-proxy-waf -f
四、完整配置文件说明(proxy.conf)
以下为最终优化版全量配置,含全部参数释义:
C-Proxy-WAF 完整配置文件
注释:# 开头,支持 key = value 空格格式
-------- 基础代理配置 --------
listen_port = 80
backend_ip = 127.0.0.1
backend_port = 8000
-------- WAF 总开关与工作模式 --------
waf_enable=0 完全关闭WAF,纯透明代理
waf_enable=1 开启全部防护规则
waf_enable = 1
waf_block=0 仅告警、全部放行(调试模式)
waf_block=1 告警 + 403 阻断攻击流量
waf_block = 0
-------- 日志系统配置 --------
log_access_path = logs/access.log
log_waf_path = logs/waf_alert.log
-------- IO 缓冲区配置 --------
recv_buf_size = 4096
-------- 连接超时防护(防挂死、FD泄露) --------
conn_idle_timeout = 60
backend_connect_timeout = 10
-------- 外部规则文件路径 --------
sqli_rule_file = rules/sqli.rule
xss_rule_file = rules/xss.rule
path_rule_file = rules/path.rule
ip_black_file = rules/ip_black.list
-------- P5 健壮性 & 防CC配置 --------
max_http_request_line = 1024
max_http_header_total = 16384
max_post_body = 16384
cc_enable = 1
cc_max_conn_per_ip = 50
-------- P6 运维守护进程配置 --------
daemon_enable = 0
pidfile_path = ./c-proxy-waf.pid
-------- P7 高级扩展配置 --------
ip_white_file = rules/ip_white.list
honeypot_file = rules/honeypot.path
honeypot_ban_seconds = 300
raw_log_enable = 0
raw_log_path = logs/raw_request.log
4.1 参数详细释义
- listen_port:WAF 对外监听端口,默认 80 替代 Apache 直接对外
- backend_ip / backend_port:后端 Apache2 真实业务地址
- waf_enable:总开关,关闭后所有防护失效,仅做代理
- waf_block:工作模式切换,0=仅日志告警,1=拦截403
- log_access_path:正常访问日志
- log_waf_path:攻击告警日志
- conn_idle_timeout:空闲连接超时回收,防御 Slowloris
- max_http_xxx:报文长度限制,防 OOM、畸形攻击包
- cc_max_conn_per_ip:单IP最大并发,防御简易CC泛洪
- daemon_enable:后台守护进程运行
- ip_white_file:白名单IP,绕过所有检测与CC限制
- honeypot_ban_seconds:访问蜜罐路径后临时封禁时长
- raw_log_enable:原始 HTTP 报文dump,用于攻击样本分析
五、核心功能测试结果
5.1 Web 攻击检测测试
可识别并日志告警(开启阻断可拦截): - SQL 注入:?id=union select
- XSS 跨站:
- 路径遍历:…/etc/passwd
- Cookie 携带恶意载荷
- POST 表单恶意内容
5.2 CC 泛洪防御
单IP并发连接超过阈值自动告警/拦截,防御慢速攻击、短连接洪水。
5.3 蜜罐封禁
扫描器、爬虫访问诱饵路径后自动临时封禁IP,有效防御探测扫描。
5.4 热重载能力
修改规则/配置后 kill -HUP 即时生效,不重启、不中断业务。
六、安全边界分析(重点)
6.1 可防御攻击(有效能力) - 明文特征 SQL 注入、XSS、路径遍历攻击
- 常规 Web 扫描、目录爆破、主动探测行为
- Slowloris 慢速连接耗尽攻击
- 单IP高频 CC 并发泛洪
- 恶意 IP 黑名单拦截、蜜罐主动封禁
- 畸形超大 HTTP 报文、异常请求防崩溃
6.2 无法防御/能力有限场景(真实安全边界) - 编码变形绕过:双重URL编码、注释拆分、大小写变形可绕过(无语法解析,仅字符串匹配)
- 分布式CC:多IP低并发请求无法防御(无速率限流、滑动窗口)
- TCP层SYN洪水:用户态程序无法拦截内核SYN半连接攻击
- 劫持类攻击全部无效:无HTTPS,无法防御中间人劫持、DNS劫持、Cookie会话劫持
- 无特征正常业务洪水:正常请求高频访问无法识别
6.3 项目定位总结
本项目属于教学实验型 WAF,可用于学习网络编程、HTTP 解析、Web 攻防原理,不适合直接公网高强度生产防护,与商业 WAF(雷池、阿里云WAF)存在明显差距。
七、项目优缺点总结
7.1 优点 - 纯手写 epoll-ET,IO 模型标准、高性能
- 完整 HTTP 代理链路,可真实防护后端 Apache 服务
- 规则与代码分离,支持热重载,工程化程度高
- 日志完整、可审计、可溯源攻击行为
- 自带 CC 防护、超时回收、内存安全、优雅退出
- 支持白名单、黑名单、蜜罐封禁多层防护
7.2 不足 - 仅字符串匹配,无语义解析,容易被变形绕过
- 无 HTTPS,无法防御中间人劫持
- 无高级限流、无正则匹配、无智能风控
八、实验总结
本次实验成功基于 C 语言 epoll 模型开发完成一款功能完整的轻量 Web 应用防火墙。通过搭建 Apache2 后端服务,实现了反向代理架构、HTTP 流量全解析、攻击检测、日志审计、抗扫描、抗泛洪、IP 管控、系统守护部署全套能力。
实验清晰验证了 WAF 的防护原理、工作模式与安全边界,深刻理解了 Web 攻击绕过思路、用户态网络程序的优缺点,完成了网络安全高阶编程与 Web 防护综合实训。