第1部分 数据包过滤以及基本安全措施 1
第1章 数据包过滤防火墙的预备知识 3
1.1 OSI网络模型 5
1.1.1 面向连接和无连接的协议 6
1.1.2 下一步 7
1.2 IP协议 7
1.2.1 IP编址和子网划分 7
1.2.2 IP分片 10
1.2.3 广播与组播 10
1.2.4 ICMP 11
1.3 传输层机制 13
1.3.1 UDP 13
1.3.2 TCP 14
1.4 地址解析协议(ARP) 16
1.5 主机名和IP地址 16
1.6 路由:将数据包从这里传输到那里 17
1.7 服务端口:通向您系统中程序的大门 17
1.8 小结 22
第2章 数据包过滤防火墙概念 23
2.1 一个数据包过滤防火墙 24
2.2 选择一个默认的数据包过滤策略 26
2.3 对一个数据包的驳回(Rejecting) VS拒绝(Denying) 28
2.4 过滤传入的数据包 28
2.4.1 远程源地址过滤 28
2.4.2 本地目的地址过滤 31
2.4.3 远程源端口过滤 31
2.4.4 本地目的端口过滤 32
2.4.5 传入TCP的连接状态过滤 32
2.4.6 探测和扫描 32
2.4.7 拒绝服务攻击 36
2.4.8 源路由数据包 42
2.5 过滤传出数据包 42
2.5.1 本地源地址过滤 42
2.5.2 远程目的地址过滤 43
2.5.3 本地源端口过滤 43
2.5.4 远程目的端口过滤 44
2.5.5 传出TCP连接状态过滤 44
2.6 私有网络服务VS公有网络服务 44
2.6.1 保护不安全的本地服务 45
2.6.2 选择运行的服务 45
2.7 小结 46
第3章 iptables:传统的Linux防火墙管理程序 47
3.1 IP防火墙( IPFW)和Netfilter防火墙机制的不同 47
3.1.1 IPFW数据包传输 48
3.1.2 Netfilter数据包传输 49
3.2 iptables基本语法 50
3.3 iptables特性 51
3.3.1 NAT表特性 53
3.3.2 mangle表特性 55
3.4 iptables语法 55
3.4.1 filter表命令 57
3.4.2 filter表目标扩展 60
3.4.3 filter表匹配扩展 62
3.4.4 nat表目标扩展 71
3.4.5 mangle表命令 73
3.5 小结 74
第4章 nftables:(新)Linux防火墙管理程序 75
4.1 iptables和nftables的差别 75
4.2 nftables基本语法 75
4.3 nftables特性 75
4.4 nftables语法 76
4.4.1 表语法 77
4.4.2 规则链语法 78
4.4.3 规则语法 78
4.4.4 nftables的基础操作 82
4.4.5 nftables文件语法 83
4.5 小结 83
第5章 构建和安装独立的防火墙 85
5.1 Linux防火墙管理程序 86
5.1.1 定制与购买:Linux内核 87
5.1.2 源地址和目的地址的选项 88
5.2 初始化防火墙 89
5.2.1 符号常量在防火墙示例中的使用 90
5.2.2 启用内核对监控的支持 90
5.2.3 移除所有预先存在的规则 92
5.2.4 重置默认策略及停止防火墙 93
5.2.5 启用回环接 口 94
5.2.6 定义默认策略 95
5.2.7 利用连接状态绕过规则检测 96
5.2.8 源地址欺骗及其他不合法地址 97
5.3 保护被分配在非特权端口上的服务 101
5.3.1 分配在非特权端口上的常用本地TCP服务 102
5.3.2 分配在非特权端口上的常用本地UDP服务 104
5.4 启用基本的、必需的互联网服务 106
5.5 启用常用TCP服务 111
5.5.1 Email (TCP SMTP端口 25, POP端口110, IMAP端口143) 111
5.5.2 SSH (TCP 端口 22) 117
5.5.3 FTP (TCP 端口 20、21) 118
5.5.4 通用的TCP服务 121
5.6 启用常用UDP服务 122
5.6.1 访问您ISP的DHCP服务器(UDP端口67、68) 122
5.6.2 访问远程网络时间服务器(UDP端口123) 124
5.7 记录被丢弃的传入数据包 125
5.8 记录被丢弃的传出数据包 126
5.9 安装防火墙 126
5.9.1 调试防火墙脚本的小窍门 127
5.9.2 在启动Red Hat和SUSE时启动防火墙 128
5.9.3 在启动Debian时启动防火墙 128
5.9.4 安装使用动态IP地址的防火墙 128
5.10 小结 129
第2部分 高级议题、多个防火墙和网络防护带 131
第6章 防火墙的优化 133
6.1 规则组织 133
6.1.1 从阻止高位端口流量的规则开始 133
6.1.2 使用状态模块进行ESTABLISHED和RELATED匹配 134
6.1.3 考虑传输层协议 134
6.1.4 尽早为常用的服务设置防火墙规则 135
6.1.5 使用网络数据流来决定在哪里为多个网络接口设置规则 135
6.2 用户自定义规则链 136
6.3 优化的示例 139
6.3.1 优化的iptables脚本 139
6.3.2 防火墙初始化 140
6.3.3 安装规则链 142
6.3.4 构建用户自定义的EXT-input和EXT-output规则链 144
6.3.5 tcp-state-flags 152
6.3.6 connection-tracking 153
6.3.7 local-dhcp-client-query和remote-dhcp-server- response 153
6.3.8 source-address-check 155
6.3.9 destination-address-check 155
6.3.10 在iptables中记录丢弃的数据包 156
6.3.11 优化的nftables脚本 157
6.3.12 防火墙初始化 158
6.3.13 构建规则文件 159
6.3.14 在nftables中记录丢弃的数据包 163
6.4 优化带来了什么 163
6.4.1 iptables的优化 163
6.4.2 nftables的优化 164
6.5 小结 164
第7章 数据包转发 165
7.1 独立防火墙的局限性 165
7.2 基本的网关防火墙的设置 166
7.3 局域网安全问题 168
7.4 可信家庭局域网的配置选项 169
7.4.1 对网关防火墙的局域网访问 170
7.4.2 对其他局域网的访问:在多个局域网间转发本地流量 171
7.5 较大型或不可信局域网的配置选项 173
7.5.1 划分地址空间来创建多个网络 173
7.5.2 通过主机、地址或端口范围限制内部访问 175
7.6 小结 180
第8章 网络地址转换 181
8.1 NAT的概念背景 181
8.2 iptables和nftables中的NAT语义 184
8.2.1 源地址NAT 186
8.2.2 目的地址NAT 187
8.3 SNAT和私有局域网的例子 189
8.3.1 伪装发往互联网的局域网流量 189
8.3.2 对发往互联网的局域网流量应用标准的NAT 190
8.4 DNAT、局域网和代理的例子 191
8.5 小结 192
第9章 调试防火墙规则 193
9.1 常用防火墙开发技巧 193
9.2 列出防火墙规则 194
9.2.1 iptables中列出表的例子 195
9.2.2 nftables中列出表的例子 198
9.3 解释系统日志 199
9.3.1 syslog配置 199
9.3.2 防火墙日志消息:它们意味着什么 202
9.4 检查开放端口 205
9.4.1 netstat -a[-n -p -A inet ] 205
9.4.2 使用fuser检查一个绑定在特定端口的进程 207
9.4.3 Nmap 208
9.5 小结 208
第10章 虚拟专用网络 209
10.1 虚拟专用网络概述 209
10.2 VPN协议 209
10.2.1 PPTP和L2TP 209
10.2.2 IPSec 210
10.3 Linux和VPN产品 212
10.3.1 Openswan/Libreswan 213
10.3.2 OpenVPN 213
10.3.3 PPTP 213
10.4 VPN和防火墙 213
10.5 小结 214
第3部分 iptables和nftables之外的事 215
第11章 入侵检测和响应 217
11.1 检测入侵 217
11.2 系统可能遭受入侵时的症状 218
11.2.1 体现在系统日志中的迹象 218
11.2.2 体现在系统配置中的迹象 219
11.2.3 体现在文件系统中的迹象 219
11.2.4 体现在用户账户中的迹象 220
11.2.5 体现在安全审计工具中的迹象 220
11.2.6 体现在系统性能方面的迹象 220
11.3 系统被入侵后应采取的措施 221
11.4 事故报告 222
11.4.1 为什么要报告事故 222
11.4.2 报告哪些类型的事故 223
11.4.3 向谁报告事故 224
11.4.4 报告事故时应提供哪些信息 225
11.5 小结 226
第12章 入侵检测工具 227
12.1 入侵检测工具包:网络工具 227
12.1.1 交换机和集线器以及您为什么应该关心它 228
12.1.2 ARPWatch 228
12.2 Rootkit检测器 229
12.2.1 运行Chkrootkit 229
12.2.2 当Chkrootkit报告计算机已被感染时应如何处理 230
12.2.3 Chkrootkit和同类工具的局限性 231
12.2.4 安全地使用Chkrootkit 231
12.2.5 什么时候需要运行Chkrootkit 232
12.3 文件系统完整性 232
12.4 日志监控 233
12.5 如何防止入侵 234
12.5.1 勤安防 234
12.5.2 勤更新 235
12.5.3 勤测试 236
12.6 小结 237
第13章 网络监控和攻击检测 239
13.1 监听以太网 239
13.2 TCPDump:简单介绍 241
13.2.1 获得并安装TCPDump 242
13.2.2 TCPDump的选项 242
13.2.3 TCPDump表达式 244
13.2.4 TCPDump高级功能 247
13.3 使用TCPDump捕获特定的协议 247
13.3.1 在现实中使用TCPDump 247
13.3.2 通过TCPDump检测攻击 254
13.3.3 使用TCPDump记录流量 258
13.4 使用Snort进行自动入侵检测 260
13.4.1 获取和安装Snort 261
13.4.2 配置Snort 262
13.4.3 测试Snort 263
13.4.4 接收警报 264
13.4.5 关于Snort的最后思考 265
13.5 使用ARP Watch进行监控 265
13.6 小结 267
第14章 文件系统完整性 269
14.1 文件系统完整性的定义 269
14.2 安装AIDE 270
14.3 配置AIDE 270
14.3.1 创建AIDE配置文件 271
14.3.2 AIDE配置文件的示例 273
14.3.3 初始化AIDE数据库 273
14.3.4 调度AIDE自动地运行 274
14.4 用AIDE监控一些坏事 274
14.5 清除AIDE数据库 276
14.6 更改AIDE报告的输出 277
14.7 在AIDE中定义宏 279
14.8 AIDE的检测类型 280
14.9 小结 283
第4部分 附录 285
附录A 安全资源 287
附录B 防火墙示例与支持脚本 289
附录C 词汇表 325
附录D GNU自由文档许可证 335