LinuxÒÁµéÔ°ÂÛ̳'s Archiver

rianren ·¢±íÓÚ 2004-2-16 18:06

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]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.