单向ping

OpenBSD的安装、升级、更新等日常问题。

版主: chenjun天地乾坤

回复
chenjun
铁 Fe
帖子: 56
注册时间: 2010-08-31 17:38

单向ping

帖子 chenjun » 2011-04-21 17:02

今天做了一个单向ping的小测试,编辑pf规则如下:

代码: 全选

vi /etc/pf.conf
block in 
pass out
禁止所有进来的数据包,允许本机出去。一开始的理解是本机ping不通外网,也不能上网,因为规则中禁止所有进来的数据包了,测试了一下可以ping通外网,也能正常上网,上网google了一下,发现自己理解错误。对于ping命令,防火墙一般做法是将来自外部的ICMP请求报文滤掉,但它却对本机出去的ICMP请求报文,以及来自外部的ICMP应答报文不加任何限制,至于能正常上网,感觉跟这个原理一样吧,防火墙默认对应答的数据包不加任何限制。以上仅属个人愚见,请大伙指导一下:)

头像
leo
帖子: 2465
注册时间: 2010-01-21 3:27

回复: 单向ping

帖子 leo » 2011-04-21 20:08

探讨,可能是从OpenBSD 4.1开始已经把keep state作为pass规则的默认参数了,
也就是上面的pass out,相当于OpenBSD 4.1以前的:

代码: 全选

pass out keep state
这样,由内部网络发起的初始链接(无论是TCP或UDP)的通讯都在PF的状态表里保留了记录,一旦一个进站数据包匹配状态表中的某个记录,PF就理解为是对内部发起连接的一个回应而给予放行(pass)。
按照 《The book of PF》上的说法——
事实上, 默认的新参数相当于keep state flags S/SA, 确保了设置连接时只有最初的SYN数据包产生状态, 消除了一些令人迷惑的状况。
至于消除了哪些令人迷惑的状况我也不是很清楚,推测可能是原来的PF不识别一些“古怪”的应答数据包而对其block in,这样导致内部发起的查询得不到正确的回应,我记得原来的FAQ上说有的游戏的通信数据有类似的特征——PF的开发者也不是万能的,毕竟不可能熟悉所有软件采用通讯协议和方式,所以实际应用中需要根据自己的情况进行规则调整,这可能也是OpeNBSD 4.1以后的PF系统中keep state成为pass规则默认参数的原因,此外如果环境特殊,需要时也可以禁用状态(no state)。

建议9971.us里面的PF指南和《the book of pf》中文版都看看,前者说的很清晰,后者更多地描述了PF的历史以及在实际应用中的规则(OpenBSD 4.7以后nat和rdr规则有变化,如果是OpenBSD4.7以上版本,建议以《the book of pf》第二版英文原版为参考基准)。

很久没有折腾PF了,目前只有一台用了一年的PC做网络防火墙兼DHCP服务器(OpenBSD 4.7),也要升级系统了,希望上面的描述别将大家引入歧途。

chenjun
铁 Fe
帖子: 56
注册时间: 2010-08-31 17:38

回复: 单向ping

帖子 chenjun » 2011-04-22 8:39

这样,由内部网络发起的初始链接(无论是TCP或UDP)的通讯都在PF的状态表里保留了记录,一旦一个进站数据包匹配状态表中的某个记录,PF就理解为是对内部发起连接的一个回应而给予放行(pass)
这样我就明了了,谢谢指点:D

回复

在线用户

正浏览此版面之用户: 没有注册用户 和 2 访客