今天有网友对pf的in out  和后面的 a to b 范迷糊,然后举了个例子让他明白

假设防火墙是一个学校的门卫室,它是校门与学校里面的教室必经之路, 一个门通向校门外叫$ext_if,另一个门通向学校的教室 $int_if ,把自己想像成门卫, 方向是相对门卫而言的

今天,有一个外来的人员,他想从校门进来, in  表示进来, on $ext_if   表示从校门这个门口,然后 from 来自成都市公安局  to 美女班,因为这个美女班上有个美女的钱包掉了,有人捡到后交给了公安局,此人是来将钱包还给这位美女的, 你作为一个通行执法者知道他的来意后知道这个是合法的,就 pass让他通过
proto 协议看成是 { 走路过来的, 骑自行车过来, 开车过来 } 不同的方式, all 嘛任何都行
log 表记录这次的行为,就是让他在门卫室登记一下,以便以后好查询
block 禁止通行
pass 允许通行
说一下quick 关键字, 门卫发了这个证件后,你就可以直接到达你要去的地方,因为在进校园后可能会遇到班主任不让你进教室找人的情况,有了这个证件后就不用提心了。(在防火墙中直接不进行后面的规则比对,速度也加快了

规则如下 :    
pass in on  $校门   proto { 开车过来的 }  from 成都市公安局  to 美女班

举个out例子
block  out on $校门  proto { 走路 }   from  小偷班  to  any 
不放过任何小偷班的家伙走路出校门去干坏事

不过要注意,小偷如果开车出去呢?所以规则要多做假设多测试完善。


========
问题: log 表记录这次的行为,就是让他在门卫室登记一下,以便以后好查询
这句话的意思是说所有记录自动到到log表中还是要加log标注才会记录呢

答: 只是记录有 log 关键字的, 这个log 是校长订校规的时候加的,校长就是你,制定墙规则的人,
记录的log 可以用tcpdump来查看


刚开始的时候对防火墙的状态保持不是很明白,pf墙用得最多的就是keep state,这个在新版里默认集成了
状态保持可以理解为经过门卫室的时候,遇到 keep state关键字的,然后门卫就给你贴个卡片,你拿到这个卡片后,等你出校门的时候,门卫认出你后让你直接通过校门.(我这里不想用标记这个词,因为PF有专门的标签功能)
synproxy state 这个是代理,就是要外来人员要找学生的时候,先让门卫去见它,有不轨企图的人就拒之门外,典型的防 syn半连接的情况