本书是一本全面介绍Nginx及其相关模块的技术书籍,是国内首本深入介绍Web防火墙原理和架构的书籍。本书的编写版本为Nginx 1.11和Naxsi 0.56。本书共13章。第1章介绍了iptables的基本知识;第2章介绍了IP标头和TCP段结构,以及网络层的攻击与防御;第3章介绍了传输层的攻击与防御;第4章介绍了应用层的攻击与防御;第5章介绍了Web防火墙的发展史及WAF种类;第6章介绍了Naxsi模块;第7章介绍了动态限流模块ngx_dynamic_limit_req_module的原理及具体应用;第8章介绍了RedisPushIptables模块;第9章构建自己定制的Web防火墙;第10章介绍了Nginx的开发;第11章介绍了Nginx模块config文件的编写及调试;第12章介绍了Redis模块的开发及RedisPushIptables的代码拆解;第13章介绍了逆向分析的思路及Rootkit攻击示范。
市面上介绍网络安全技术的图书很多,有些过于基础,有些又过于理论化,实操价值不高。本书理论结合实践,从Nginx生态的整体视角阐述和解决问题,很实用,也非常有价值,填补了国内构建WAF类图书市场的空白。贤弟长期在一线参与实际项目,其作品是他多年实战经验的总结,强烈推荐网络安全行业的从业者阅读。
——昆明天问科技CEO 杨家宝
本书是一部由浅入深地讲述如何构建Web防火墙的佳作。书中循序渐进地介绍了TCP/IP和OSI模型中的网络层、传输层和应用层的安全和防御知识。书中讲解的关于Nginx的实战案例,符合大多数安全人员的需要,非常值得阅读。
——同盾科技高级数据开发工程师 程万胜
本书由资深运维安全专家打造,系统地介绍了网络安全的相关知识。本书特别注重对读者的动手能力和学习能力的培养,讲解时不但剖析了相关的理论知识,而且还给出了多个实践案例,真正做到了“授人以渔”,非常值得安全技术爱好者阅读。
——杭州九狮科技CEO 周宗章
本书结合作者多年的网络安全和系统安全从业经验,深入浅出地讲述了WAF的理论基础与实践流程,相信会对读者在Web防火墙构建方面有所启发和帮助。
——阿里前开发工程师/昆明雷脉科技CEO 雷加洪
互联网时代,数据安全是所有企业都要面临的一个巨大挑战。如果企业不能适应这个挑战,不能保障企业用户数据的安全,那么用户又如何相信企业呢?本书从Web防火墙构建的角度,全方位地解决企业的网络安全问题,值得每一位网络安全从业者阅读。
——全球时刻CTO/IBM前Java资深专家 喻立久
封面图
目录
- 赞誉
- 前言
- 第1章 iptables使用简介1
- 1.1 iptables防火墙1
- 1.2 基本概念1
- 1.2.1 iptables包含表3
- 1.2.2 iptables包含链3
- 1.2.3 连接状态4
- 1.2.4 iptables规则4
- 1.2.5 具体目标5
- 1.2.6 iptables扩展模块5
- 1.3 安装iptables5
- 1.3.1 内核设置5
- 1.3.2 iptables安装方式6
- 1.4 配置和使用8
- 1.4.1 nftables防火墙8
- 1.4.2 iptables的缺点8
- 1.4.3 nftables与iptables的主要区别9
- 1.4.4 从iptables迁移到nftables10
- 1.4.5 iptables语法11
- 1.4.6 显示当前规则16
- 1.4.7 重置规则16
- 1.4.8 编辑规则16
- 1.4.9 保存和恢复规则17
- 1.4.10 实例应用17
- 第2章 网络层的安全与防御20
- 2.1 IP标头和TCP段结构20
- 2.1.1 IPv4标头结构20
- 2.1.2 IPv6标头结构24
- 2.1.3 TCP段结构25
- 2.1.4 TCP协议操作27
- 2.1.5 TCP连接建立28
- 2.1.6 TCP连接终止28
- 2.1.7 TCP资源使用29
- 2.1.8 TCP数据传输29
- 2.2 记录IP标头信息34
- 2.2.1 使用tshark记录标头信息34
- 2.2.2 使用iptables记录标头信息35
- 2.3 网络层攻击定义36
- 2.4 网络层攻击37
- 2.5 网络层防御41
- 第3章 传输层的安全与防御42
- 3.1 记录传输层标头信息42
- 3.1.1 使用iptables记录TCP标头42
- 3.1.2 使用tshark记录TCP标头43
- 3.1.3 使用iptables记录UDP标头43
- 3.1.4 使用tshark记录UDP标头44
- 3.1.5 UDP属性44
- 3.2 传输层攻击定义45
- 3.3 传输层攻击类型45
- 3.3.1 TCP攻击45
- 3.3.2 UDP攻击48
- 3.3.3 信息收集50
- 3.4 传输层防御手段52
- 第4章 应用层的安全与防御55
- 4.1 iptables字符串匹配模块55
- 4.2 应用层攻击定义56
- 4.3 应用层攻击类型56
- 4.3.1 缓冲区溢出攻击57
- 4.3.2 钓鱼式攻击57
- 4.3.3 后门攻击57
- 4.3.4 Web攻击58
- 4.3.5 应用层DDoS61
- 4.3.6 嗅探攻击61
- 4.4 应用层防御手段62
- 4.4.1 缓冲区溢出63
- 4.4.2 钓鱼式63
- 4.4.3 后门63
- 4.4.4 Web攻击64
- 4.4.5 应用层DDoS64
- 4.4.6 网络嗅探65
- 第5章 Web防火墙类型66
- 5.1 Web防火墙简介66
- 5.2 Web防火墙历史67
- 5.3 WAF与常规防火墙的区别68
- 5.4 部署方式68
- 5.5 Web防火墙的类型71
- 5.6 各类防火墙的优缺点72
- 第6章 Naxsi Web防火墙73
- 6.1 Naxsi简介73
- 6.2 Naxsi安装73
- 6.2.1 编译Naxsi73
- 6.2.2 基本配置74
- 6.3 Naxsi配置指令76
- 6.3.1 白名单76
- 6.3.2 规则77
- 6.3.3 CheckRule79
- 6.3.4 请求拒绝80
- 6.3.5 指令索引80
- 6.3.6 匹配规则82
- 6.4 Naxsi基础使用84
- 6.5 Naxsi格式解析91
- 6.5.1 Raw_body91
- 6.5.2 libinjection92
- 6.5.3 JSON格式93
- 6.5.4 运行时修饰符94
- 6.6 示例95
- 6.6.1 白名单示例95
- 6.6.2 规则示例97
- 6.7 Naxsi深入探索98
- 6.7.1 Naxsi日志98
- 6.7.2 内部规则100
- 6.7.3 与Fail2Ban整合102
- 第7章 ngx_dynamic_limit_req_module动态限流104
- 7.1 实现原理104
- 7.1.1 限流算法104
- 7.1.2 应用场景106
- 7.1.3 安装107
- 7.2 功能108
- 7.2.1 CC防卸108
- 7.2.2 暴力破解108
- 7.2.3 恶意刷接口108
- 7.2.4 分布式代理恶意请求109
- 7.2.5 动态定时拦截109
- 7.2.6 黑名单和白名单110
- 7.3 配置指令110
- 7.3.1 dynamic_limit_req_zone 设置区域参数111
- 7.3.2 dynamic_limit_req设置队列114
- 7.3.3 dynamic_limit_req_log_level设置日志级别114
- 7.3.4 dynamic_limit_req_status设置响应状态115
- 7.3.5 black-and-white-list设置黑名单和白名单115
- 7.4 扩展功能115
- 7.4.1 API实时计数、PV、UV统计115
- 7.4.2 API阈值通知116
- 第8章 RedisPushIptables模块120
- 8.1 RedisPushIptables简介120
- 8.2 RedisPushIptables与Fail2Ban比较120
- 8.2.1 Fail2Ban的特征120
- 8.2.2 RedisPushIptables的特征121
- 8.3 安装RedisPushIptables122
- 8.4 动态删除配置124
- 8.5 RedisPushIptables指令125
- 8.6 客户端API示例125
- 8.6.1 C语言编程125
- 8.6.2 Python语言编程126
- 8.6.3 Bash语言编程128
- 8.6.4 Lua语言编程128
- 第9章 构建自己的WAF130
- 9.1 安装所需软件130
- 9.2 参数配置131
- 9.3 白名单生成133
- 9.4 白名单自动化生成138
- 9.5 整合Fail2ban144
- 9.6 定制开发Naxsi146
- 9.7 Naxsi已知漏洞151
- 9.8 多层防御整合后对比156
- 9.9 可能存在的瓶颈157
- 9.10 恶意IP库157
- 第10章 Nginx开发指南158
- 10.1 基本概念158
- 10.1.1 源码目录158
- 10.1.2 引用头文件159
- 10.1.3 整型封装160
- 10.1.4 函数返回值160
- 10.1.5 错误处理161
- 10.2 字符串161
- 10.2.1 字符串操作162
- 10.2.2 格式化字符串163
- 10.2.3 数字转换函数164
- 10.2.4 正则表达式165
- 10.3 日志时间格式166
- 10.4 数据结构167
- 10.4.1 数组167
- 10.4.2 单向链表168
- 10.4.3 双向链表170
- 10.4.4 红黑树171
- 10.4.5 散列表171
- 10.5 内存管理173
- 10.5.1 堆173
- 10.5.2 池174
- 10.5.3 共享内存175
- 10.6 日志记录177
- 10.7 结构体178
- 10.7.1 ngx_cycle_t循环结构体178
- 10.7.2 ngx_buf_t缓冲区结构体179
- 10.7.3 ngx_connection_t连接结构体180
- 10.7.4 ngx_event_t结构体182
- 10.8 事件183
- 10.8.1 I/O事件183
- 10.8.2 定时器事件184
- 10.8.3 发布事件184
- 10.8.4 事件循环186
- 10.9 进程186
- 10.10 线程188
- 10.11 模块189
- 10.11.1 添加模块189
- 10.11.2 核心模块190
- 10.11.3 配置指令193
- 10.12 HTTP框架195
- 10.12.1 连接195
- 10.12.2 请求196
- 10.12.3 配置200
- 10.12.4 请求阶段202
- 10.13 HTTP框架执行流程203
- 10.13.1 请求重定向203
- 10.13.2 子请求204
- 10.13.3 请求最终确定206
- 10.13.4 请求的主体208
- 10.13.5 响应210
- 10.13.6 响应头210
- 10.13.7 响应的主体211
- 10.14 变量212
- 10.14.1 简单变量212
- 10.14.2 复杂变量215
- 10.15 负载均衡216
- 第11章 Nginx高级主题220
- 11.1 模块转换220
- 11.1.1 先决条件220
- 11.1.2 编译动态模块220
- 11.1.3 加载动态模块221
- 11.1.4 转换config文件221
- 11.2 模块编译222
- 11.3 config文件222
- 11.3.1 新的config文件222
- 11.3.2 旧的config文件223
- 11.4 Nginx调试224
- 11.4.1 调试日志224
- 11.4.2 核心转储225
- 11.4.3 套接字泄露225
- 11.5 示例226
- 第12章 Redis模块编写231
- 12.1 模块简介231
- 12.1.1 加载模块231
- 12.1.2 最简单的模块232
- 12.1.3 模块初始化232
- 12.2 模块API233
- 12.3 RedisPushIptables代码拆解235
- 第13章 后门分析与监测244
- 13.1 溯源步骤和攻击示例244
- 13.1.1 溯源思路244
- 13.1.2 后门类型245
- 13.1.3 逆向分析245
- 13.1.4 网络监测245
- 13.1.5 用户空间Rootkit示例246
- 13.1.6 内核空间Rootkit示例249
- 13.2 修补漏洞253
- 13.2.1 虚拟补丁253
- 13.2.2 补丁253
- 13.3 监测主机异常253
- 13.3.1 静态编译检测工具254
- 13.3.2 流量异常254
- 13.3.3 磁盘I/O异常、CPU异常和MEM异常255
- 13.3.4 主动连接监视256