分类: BSD
2008-04-17 09:46:27
对于其他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 0
output packets: blocked 0 passed 74586 nomatch 20316 counted 0
input packets logged: blocked 227 passed 24883
output packets logged: blocked 0 passed 17153
packets logged: input 0 output 0
log failures: input 25028 output 17139
fragment state(in): kept 0 lost 0
fragment state(out): kept 0 lost 0
packet state(in): kept 1 lost 0
packet state(out): kept 14 lost 8
ICMP replies: 160 TCP RSTs sent: 9
Result cache hits(in): 47523 (out): 53694
IN Pullups succeeded: 0 failed: 0
OUT Pullups succeeded: 0 failed: 0
Fastroute successes: 0 failures: 0
TCP cksum fails(in): 0 (out): 0
Packet 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的全部记录。
local0.* /var/log/ipfilter.log
为了不让ipfilter的记录发送到/var/log/messages等其他日志文件中,可以在/var/log/messags设置行中添加一个记录local.none。
此后,使用touch创建ipfilter.log文件,并重新启动syslogd,就能在/var/log/ipfilter.log中正确记录过滤记录了。当一切都设置完毕之后,就能将ipf和ipnat这两个设置命令放入系统启动文件rc.local,以便每次系统自动启动都能执行防火墙设置。