分页: 1 / 1

《9. OpenBSD PF用户指南之高级配置——净化(包的标准化)》

发表于 : 2010-01-21 10:25
leo
PF: 净化(数据包标准化)

--------------------------------------------------------------------------------

目录
介绍
选项

--------------------------------------------------------------------------------

介绍
"净化"是数据包标准化, 这样最终接收方可以确切知道此数据包的含义。净化命令也可以重组破碎的数据包, 使一些操作系统避免某些形式的攻击, 和丢弃带有无效标志组合的TCP数据包。 净化命令的一个简单的形式是:

代码: 全选

scrub in all 
这将在净化所有的接口上进入数据包。

一个不在某接口上进行净化的原因是用户想通过PF访问NFS, 某些非OpenBSD平台发送(和期待)奇怪的数据包——设置了"do not fragment"位的分片数据包, 这些数据包被净化规则(完全地)拒绝。另一个原因是某些多人游戏在PF启用scrub后会出现连接问题。除了这些有点极端的案例, 这里强烈推荐净化所有的数据包。

scrub命令的语法与filtering语法很相似, 这使它可以准确地选择数据包进行净化。scrub前面没有关键字可以用来指定哪些数据包不被净化, 就像nat规则, 第一条匹配的规则是胜者。

更多净化的原则和概念可以在 Network Intrusion Detection: Evasion, Traffic Normalization, and End-to-End Protocol Semantics 找到。


选项
Scrub有下列选项:
no-df
清除IP数据包头里的 don't fragment 位。大家知道一些操作系统会产生设定了don't fragment 位的分片数据包, 特别是NFS。除非指定了 no-df选项, 否则Scrub会丢弃这些数据包。因为某些操作系统产生的 don't fragment 数据包的IP头标识区域是0, 推荐 no-df 和 random-id 选项一同使用。
random-id
用随机值替换数据包的IP标识区域以调整操作系统的预设值。这个规则仅应用于自由重组后不分片的数据包。
min-ttl num
强制将IP数据包头部的生存时间(TTL)设置为一个最小值。
max-mss num
强制将TCP数据包头部的最大数据片长度(MSS)设置成一个最大值。
fragment reassemble
缓存进入的数据包碎片, 并在通过过滤引擎前将这些碎片重组成一个完整的数据包。优点是过滤引擎只处理完整的数据包而忽略碎片;缺点是缓存数据包碎片增大了内存占用。当没有指定frament选项时这是默认行为。这也与NAT一同工作时唯一的fragment选项。
fragment crop
丢弃重复的碎片并修剪重叠的碎片。不像fragment reassemble, 使用这个选项时不缓存碎片, 而是处理后直接传递。(译者注:原文这里是一到达就直接传送。)
fragment drop-ovl
与fragment crop相似, 除了所有重复、重叠的碎片同其它更多的通信碎片一样会被丢弃。
reassemble tcp
TCP连接状态标准化。当使用scrub reassemble tcp 时, 不需要指定一个方向(入/出)。可执行下列标准化:
连接双方全不允许减少它们的IP TTL值。这样做是为了抵御攻击者发送一个数据包到达防火墙后影响为连接保持的状态信息, 以至于数据包未到达目的地前就过期了。这个连接的所有数据包的TTL值全升到了最高值。
将TCP数据包头里的RFC1323时间戳调整为一个随机值。这可以防止一个偷窥者推断出主机运行时间或猜出NAT网关后有多少台主机。
例子:

代码: 全选

 
scrub in on fxp0 all fragment reassemble min-ttl 15 max-mss 1400
scrub in on fxp0 all no-df
scrub on fxp0 all reassemble tcp