拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

C-Proxy-WAF 网络安全实验报告

C-Proxy-WAF 网络安全实验报告

安装地址: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 防护综合实训。
返回列表