PF Îĵµ·ÒëLogging
·Òë: rainren°æ±¾: 00 ²Ý¸å°æ
Ò»¸ö´º½Ú¹ýÍêÈ˶¼Ã»¾«Éñ·ÒëÏÂÈ¥ÁË, ÂýÂý°ÑËü×öÍê! Çë¸÷λÐÖµÜÃǶàÖ¸Õý!
[color=bule][size=6]ÈÕÖ¾(Logging)[/size][/color]
[color=blue][size=4]Introduction[/size][/color]
ÔÚPFÖжԹý¶É°ü½øÐмǼµÄ¹¤×÷ÊÇÓÉpflogd¼àÌýÔÚpflog0¶Ë¿ÚÉϲ¢½«ÕâЩÈÕÖ¾ÓÃtcpdump¶þ½øÖƸñʽд½øÈÕÖ¾Îļþ£® ±ØÐëÔÚ¹ýÂ˹æÔòÖмÓÈë¹Ø¼ü×Ölog»òlog-all£®
[color=blue][size=4]Reading a File[/size][/color]
ÒòΪpflogd½«ÈÕÖ¾ÒÔ¶þ½øÖƸñʽ½øÐмǼËùÒÔ²»ÄÜʹÓÃÆÕͨµÄÎı¾ÔĶÁÆ÷½øÐжÁÈ¡! ±ØÐëʹÓÃtcpdumpÀ´¶ÁÈ¡ÕâЩÈÕÖ¾!
²é¿´ÈÕÖ¾Îļþ:
[color=red] # tcpdump -n -e -ttt -r /var/log/pflog[/color]
×¢ÒâÔÚʹÓÃtcpdump¶ÁÈ¡ÈÕÖ¾Îļþʱ²¢²»ÄÜÏÔʾʵʱ¹ýÂËÇé¿ö. ÏëÒª²é¿´ÊµÊ±¹ýÂËÇé¿öÓ¦½«Ëü¶¨Î»ÔÚpflog0¶Ë¿ÚÉÏ:
[color=red] # tcpdump -n -e -ttt -i pflog0[/color]
[size=3]×¢Òâ:[/size] µ±²é¿´ÈÕ־ʱ, Ó¦ÌØ±ðСÐĵĶÔtcpdumpÖ¸¶¨ÏêϸµÄÐÒé½âÂëÆ÷( activated via the ?v command line option). TcpdumpµÄÐÒé½âÂëÆ÷²¢Ã»ÓÐÒ»¸öÍêÃÀµÄ°²È«ÀúÊ·. ×îºóÀíÂÛÉÏ, Ò»¸öÑÓʱ¹¥»÷¿ÉÄÜ»áʹÓÃÓÐÐ§ÔØºÉlogging device¶øÍ¨¹ý²¿·ÖÊý¾Ý°ü. Ëü»á¼ÇסÔÚ·À»ðǽ»úÆ÷¿¼²éÕâЩÊý¾Ý°üǰ¾Í½«ÕâЩ¼Ç¼ɾ³ý!
»¹ÓÐҪעÒⰲȫµÄ·ÃÎÊÈÕÖ¾Îļþ. ȱʡµÄ, pflogd½«ÎªÃ¿¸öÊý¾Ý°ü¼Ç¼96¸ö×Ö½ÚµÄÐÅÏ¢. ·ÃÎÊÈÕÖ¾¿ÉÒÔ´ÓÓÐЧÊý¾Ý°üÖв鿴µ½Ò»Ð©Ãô¸ÐÐÅÏ¢.( Èçtelnet(1)»òftp(1)ÖеÄÓû§ÃûºÍÃÜÂë).
[size=4][color=blue]Filtering Log Output[/color][/size]
ÓÉÓÚpflogd¼Ç¼ÊÇÓÃtcpdump¶þ½øÖƼǼµÄ, ËùÒÔÔڲ鿴¼Ç¼ʱ¿ÉÒÔʹÓÃËùÒÔtcpdumpÖеĸ÷ÖÖÌØÐÔ! ÀýÈç: Ö»²é¿´Ä³Ò»Ìض¨¶Ë¿ÚÉϵÄÊý¾Ý°ü:
[color=red] # tcpdump -n -e -ttt -r /var/log/pflog port 80[/color]
Õâ¸öÓиü¶à¹¦ÄÜ: Ëü¿ÉÒÔ¶ÔijЩÖ÷»úºÍ¶Ë¿ÚµÄ×éºÏÏÞÖÆÏÔʾµÄÊý¾Ý°ü:
[color=red] # tcpdump -n -e -ttt -r /var/log/pflog port 80 and host 192.168.1.3[/color]
ͬÑùÎÒÃÇ¿ÉÒÔ°ÑËü¸ÄΪ¼àÌýÔÚpflog0¶Ë¿ÚÉÏ:
[color=red] # tcpdump -n -e -ttt -i pflog0 host 192.168.4.2[/color]
×¢ÒâÔÚÕâÀﲢûÓгåÍ»: һЩÊý¾Ý°ü±»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 ? ÔÚÊý¾Ý°üÉϽøÐеIJÙ×÷.¿ÉÄܵ͝×÷ÊÇpass ºÍ block..
reason res ? ½øÐвÙ×÷µÄÔÒò, ¿ÉÄܵÄÔÒòÓÐ, bad-offset, fragment, shot, normalize, and memory.
inbound ? Êý¾Ý°ü½øÕ¾.
outbound ? Êý¾Ý°ü³öÕ¾.
ÀýÈç:
[color=red] # tcpdump -n -e -ttt -i pflog0 inbound and action block and on wi0 [/color]
Õâ¸öÊÇʵʱÈÕÖ¾ÏÔʾ, ÏÔʾÔÚwi0¶Ë¿ÚÉϱ»×èÈûµÄ½øÕ¾Êý¾Ý°ü.
[color=blue][size=4]Packet Logging Through Syslog[/size][/color]
ÔÚһЩÇé¿öÏÂ, ½«·À»ðǽÉ϶þ½øÖƸñʽµÄÈÕÖ¾·¢Ë͵½Ô¶³ÌµÄÈÕÖ¾·þÎñÆ÷ÉÏ.ÕâЩ²Ù×÷¿ÉÒÔÓÃÁ½¸öС½Å±¾Íê³É, ¶ÔOpenBSDµÄÈÕÖ¾·þÎñÆ÷syslogd(8)µÄÅäÖÃÎļþ×öһЩСµÄ¸Ä±ä. SyslogdµÄÈÕÖ¾ÎļþÒ²ÊǶþ½øÖƸñʽ²¢¿ÉÒÔ½«ÈÕÖ¾¼Ç¼ÔÚÔ¶³ÌÈÕÖ¾·þÎñÆ÷ÉÏ!
Ê×ÏÈ, ÎÒÃÇÒª´´½¨Ò»¸öÓû§: pflogger, ¿ÉÒÔʹÓÃ/sbin/nologin shell. ×î¼òµ¥µÄ´´½¨Ò»¸öÓû§µÄ·½·¨ÊÇʹÓÃadduser(8).
µ±´´½¨ÁËpfloggerÓû§ºó, ´´½¨ÏÂÃæÁ½¸ö½Å±¾: [color=red]
/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
[/color]
±à¼rootµÄcron job:
[color=red] # crontab -u root ?e[/color]
¼ÓÈëÏÂÃæÁ½ÐÐ: [color=red]
# rotate pf log file every 5 minutes
0-59/5 * * * * /bin/sh /etc/pflogrotate
[/color]
ΪÓû§pflogger´´½¨Ò»¸öcron job: [color=red]
# crontab -u pflogger -e
[/color]
¼ÓÈëÏÂÃæÁ½ÐÐ: [color=red]
# feed rotated pflog file(s) to syslog
0-59/5 * * * * /bin/sh /home/pflogger/pfl2sysl
[/color]
½«ÕâÒ»ÐмÓÈë/etc/syslog.conf: [color=red]
local0.info /var/log/pflog.txt
[/color]
Èç¹ûÄãÏ뽫ÈÕÖ¾·¢µ½Ô¶³ÌÈÕÖ¾·þÎñÆ÷ÉÏ, ¿ÉÒÔ¼ÓÈëÕâÒ»ÐÐ: [color=red]
local0.info @syslogger
[/color]
È·¶¨Ö÷»úsysloggerÒÑÔÚhostsÎļþÖж¨Òå¹ý.
´´½¨Ò»¸öÎļþ/var/log/pflog.txtÀ´ÔÊÐísyslogdʹÓÃÕâ¸öÎļþ¼Ç¼ÈÕÖ¾: [color=red]
# touch /var/log/pflog.txt
[/color]
ÖØÆôsyslogd: [color=red]
# kill -HUP $(cat /var/run/syslog.pid)
[/color]
ÏÖÔÚËùÒÔµÄÈÕÖ¾Êý¾Ý°ü¼Ç¼¶¼½«·¢Ë͵½/var/log/pflog.txtÖÐ. Èç¹û¼ÓÈëÁ˵ڶþÐÐ, ËüÃÇ»áºÜºÃ½«ÕâЩ·¢Ë͵½Ô¶³ÌµÄÈÕÖ¾·þÎñÆ÷sysloggerÉÏ.
ÏÖÔÚ´¦Àí½Å±¾/etc/pflogrotate, È»ºóɾ³ý/var/logpflog, ÕâÑùÒ»À´, ÒÔºóʹÓÃnewsyslog(8)À´ÔËÐÐpflog, ¶ø¿ÉÒÔ²»ÔÙʹÓÃËü¶ø½«Ëü¹Ø±Õ! ¼´Ê¹ /var/log/pflog.txt´úÌæÁË/var/log/pflog, »¹Ó¦¸ÃÀ´Ê¹ÓÃËü. °Ñ/etc/newsyslog.conf×öÈçϸıä:
[color=red]
#/var/log/pflog 600 3 250 * ZB /var/run/pflogd.pid
/var/log/pflog.txt 600 7 * 24
[/color]
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.
Ò³:
[1]