|
翻译: rainren
版本: 00 草稿版
一个春节过完人都没精神翻译下去了, 慢慢把它做完! 请各位兄弟们多指正!
日志(Logging)
Introduction
在PF中对过渡包进行记录的工作是由pflogd监听在pflog0端口上并将这些日志用tcpdump二进制格式写进日志文件. 必须在过滤规则中加入关键字log或log-all.
Reading a File
因为pflogd将日志以二进制格式进行记录所以不能使用普通的文本阅读器进行读取! 必须使用tcpdump来读取这些日志!
查看日志文件:
# tcpdump -n -e -ttt -r /var/log/pflog
注意在使用tcpdump读取日志文件时并不能显示实时过滤情况. 想要查看实时过滤情况应将它定位在pflog0端口上:
# tcpdump -n -e -ttt -i pflog0
注意: 当查看日志时, 应特别小心的对tcpdump指定详细的协议解码器( activated via the –v command line option). Tcpdump的协议解码器并没有一个完美的安全历史. 最后理论上, 一个延时攻击可能会使用有效载荷logging device而通过部分数据包. 它会记住在防火墙机器考查这些数据包前就将这些记录删除!
还有要注意安全的访问日志文件. 缺省的, pflogd将为每个数据包记录96个字节的信息. 访问日志可以从有效数据包中查看到一些敏感信息.( 如telnet(1)或ftp(1)中的用户名和密码).
Filtering Log Output
由于pflogd记录是用tcpdump二进制记录的, 所以在查看记录时可以使用所以tcpdump中的各种特性! 例如: 只查看某一特定端口上的数据包:
# tcpdump -n -e -ttt -r /var/log/pflog port 80
这个有更多功能: 它可以对某些主机和端口的组合限制显示的数据包:
# tcpdump -n -e -ttt -r /var/log/pflog port 80 and host 192.168.1.3
同样我们可以把它改为监听在pflog0端口上:
# tcpdump -n -e -ttt -i pflog0 host 192.168.4.2
注意在这里并没有冲突: 一些数据包被pflogd记录进了日志中, 而上面的命令只是显示这些数据包将被记录在日志里!
在这里添加一些使用标准tcpdump过滤规则的文档, OpenBSD中的tcpdump filter语言被扩展为可以读取pflogd输出:
ip – address family is IPv4.
ip6 – address family is IPv6.
on int – 数据包通过的端口int.
ifname int – same as on int.
rulenum num – 数据包匹配的过滤规则中的规则编号num.
action act – 在数据包上进行的操作.可能的动作是pass 和 block..
reason res – 进行操作的原因, 可能的原因有, bad-offset, fragment, shot, normalize, and memory.
inbound – 数据包进站.
outbound – 数据包出站.
例如:
# tcpdump -n -e -ttt -i pflog0 inbound and action block and on wi0
这个是实时日志显示, 显示在wi0端口上被阻塞的进站数据包.
Packet Logging Through Syslog
在一些情况下, 将防火墙上二进制格式的日志发送到远程的日志服务器上.这些操作可以用两个小脚本完成, 对OpenBSD的日志服务器syslogd(8)的配置文件做一些小的改变. Syslogd的日志文件也是二进制格式并可以将日志记录在远程日志服务器上!
首先, 我们要创建一个用户: pflogger, 可以使用/sbin/nologin shell. 最简单的创建一个用户的方法是使用adduser(8).
当创建了pflogger用户后, 创建下面两个脚本:
/etc/pflogrotate
FILE=/home/pflogger/pflog5min.$(date "+%Y%m%d%H%M")
kill -ALRM $(cat /var/run/pflogd.pid)
if [ $(ls -l /var/log/pflog | cut -d " " -f 8) -gt 24 ]; then
mv /var/log/pflog $FILE
chown pflogger $FILE
kill -HUP $(cat /var/run/pflogd.pid)
fi
/home/pflogger/pfl2sysl
for logfile in /home/pflogger/pflog5min* ; do
tcpdump -n -e -ttt -r $logfile | logger -t pf -p local0.info
rm $logfile
done
编辑root的cron job:
# crontab -u root –e
加入下面两行:
# rotate pf log file every 5 minutes
0-59/5 * * * * /bin/sh /etc/pflogrotate
为用户pflogger创建一个cron job:
# crontab -u pflogger -e
加入下面两行:
# feed rotated pflog file(s) to syslog
0-59/5 * * * * /bin/sh /home/pflogger/pfl2sysl
将这一行加入/etc/syslog.conf:
local0.info /var/log/pflog.txt
如果你想将日志发到远程日志服务器上, 可以加入这一行:
local0.info @syslogger
确定主机syslogger已在hosts文件中定义过.
创建一个文件/var/log/pflog.txt来允许syslogd使用这个文件记录日志:
# touch /var/log/pflog.txt
重启syslogd:
# kill -HUP $(cat /var/run/syslog.pid)
现在所以的日志数据包记录都将发送到/var/log/pflog.txt中. 如果加入了第二行, 它们会很好将这些发送到远程的日志服务器syslogger上.
现在处理脚本/etc/pflogrotate, 然后删除/var/logpflog, 这样一来, 以后使用newsyslog(8)来运行pflog, 而可以不再使用它而将它关闭! 即使 /var/log/pflog.txt代替了/var/log/pflog, 还应该来使用它. 把/etc/newsyslog.conf做如下改变:
#/var/log/pflog 600 3 250 * ZB /var/run/pflogd.pid
/var/log/pflog.txt 600 7 * 24
PF现在以二进制格式将日志存放在/var/log/pflog.txt中.如果同样的配置/etc/syslog.conf, 它也可以将日志存放在一个远程日志服务器上. The logging is not immediate but can take up to about 5-6 minutes (the cron job interval) before the logged packets appear in the file. |
|