79 FreeBSD连载:设置和使用ipfilter( 三 )


这两句设置用于过滤可能会带来安全问题的短数据包或具备路由信息的数据包 。
pass in on fxp0 allpass out on fxp0 allpass in on lo0 allpass out on lo0 allpass用于指定数据包可以通过,out与in相反,标识从网络界面向网络上或其他网络界面发送的数据包,而on fxp0或on lo0标识进行处理的网络界面 。这里的设置允许内部网络界面、loopback网络界面可以自由发送和接收数据包 。
block in log on fxp1 allblock out log on fxp1 all为了安全起见,除了明确指定可以发送和接收的数据包之外,屏蔽其余的外部网络界面进行数据发送和接收 。
block in log quick on fxp1 from 10.0.0.0/8 to anyblock in log quick on fxp1 from 192.168.0.0/16 to anyblock in log quick on fxp1 from 172.16.0.0/12 to anyblock in log quick on fxp1 from 127.0.0.0/8 to any上面的设置明确屏蔽具备内部网络地址的数据包被转发到外部网络去,由于ipfilter中地址转换和包过滤是在同一个系统中完成的,因此不必担心它们会发生冲突问题 。
pass out log on fxp1 proto icmp all keep statepass out log on fxp1 proto tcp/udp from any to any keep stateproto用于指定不同的协议,通常可以设置为tcp, udp和icmp 。这两行设置允许TCP, UDP, ICMP协议的数据包可以向外发送出去,keep state用于标识建立TCP连接之后的数据包,或者ICMP、UDP的回应数据包,以允许回应数据包能发送回内部网络 。
pass in quick on fxp1 proto tcp from any to any port = ftp-data keep statepass in quick on fxp1 proto tcp from any port = ftp-data to any port > 1023 keep stateftp中将打开额外的端口以进行数据传输,这两个设置允许对ftp数据端口的数据包能够进行转发 。
block return-rst in log on fxp1 proto tcp from any to any flags S/SAblock return-icmp(net-unr) in log on fxp1 proto udp from any to any对于其他tcp连接请求,防火墙回应一个RST数据包关闭连接,S/SA标识TCP数据包的标志,S为Syn,A为Ack,而S/SA表示对Syn和Ack中的Syn标志进行检查,这类数据包是用于设定连接的数据包 。对UDP请求,防火墙回应网络不可达到的ICMP包 。
上面的例子将屏蔽外部计算机发向网络内部的数据包,但允许内部向外的发起网络访问 。如果要允许外部网络对内的访问,就必须增加其他pass in规则,以使得过滤规则能适应更复杂的情况 。为了使上面的设置生效,必须将过滤规则加入到内核中去,这需要使用ipf命令 。
# ipf -Fa# ipf -f/etc/ipf.conf首先使用-Fa标志清除所有的过滤规则,然后将ipf.conf中的设置加入系统中 。此后,可以使用ipfstat来检查ipfilter进行过滤的各种统计信息 。
# ipfstat input packets:blocked 227 passed 116210 nomatch 68219 counted 0output packets:blocked 0 passed 74586 nomatch 20316 counted 0 input packets logged: blocked 227 passed 24883output packets logged: blocked 0 passed 17153 packets logged: input 0 output 0 log failures:input 25028 output 17139fragment state(in): kept 0 lost 0fragment state(out): kept 0 lost 0packet state(in): kept 1 lost 0packet state(out): kept 14 lost 8ICMP replIEs: 160 TCP RSTs sent: 9Result cache hits(in): 47523 (out): 53694IN Pullups succeeded: 0 failed: 0OUT Pullups succeeded: 0 failed: 0Fastroute successes: 0 failures: 0TCP cksum fails(in): 0 (out): 0Packet log flags set: (0x10000000) packets passed through filter虽然在规则中指定了log选项,但是缺省时候syslogd并不会记录ipfilter发送的信息 。符合规则的数据记录并没有真正被发送到系统日志记录中,必须使用ipmon打开记录功能 。
# ipmon -s -n -x由于ipmon使用的是syslog的local0通道,缺省情况下local0通道并没有打开,因此只有很少的错误信息被发送到/var/log/messages文件中 。为了打开local0通道,还需要改动syslogd.conf,增加下面的设置,以记录ipfilter的全部记录 。

推荐阅读