ระบบที่ใช้

Debian 6

Iptables

Syslog-ng

External Interface eth0

Internal Interface eth1

ในระบบนี้เราจะทำการ NAT traffic ของเราออกทาง IP ของ eth0

ใช้ IPTABLES ให้ทำการส่ง LOG ออกมาทาง /proc/kmsg

iptables -t nat -A POSTROUTING -o eth0 -j LOG –log-prefix ‘IPT’

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

(optional) ใช้ IPTABLES ให้ทำการ forward packet ที่มี port 80 ไปที่  3128 (squid)

iptables -A PREROUTING -t nat -i eth1 -p tcp –dport 80 -j REDIRECT –to-port 3128

ทำการแก้ไข syslog.conf เพื่อให้บันทึก log ลง firewall.log

filter f_firewall { match(“IPT”); };

destnation firewall { file(“/var/log/firewall.log” template(“$FULLDATE  IPTABLES $MSGONLY\n));};

log { source(s_src); filter(f_firewall); destination(firewall); };

แก้ไขไฟล์ logrotate ในส่วนของ syslog โดยเพิ่มข้อความต่อไปนี้ (ยังไม่ได้ทดสอบ)

/var/log/firewall.log {

rotate 90

daily

compress

delaycompress

}

นั่นคือจะทำการ rotate ไฟล์ firewall.log ทุกๆ วัน ณ เวลา 6.25 (ดูจาก crontab) และจะทำการบีบอัดด้วย แต่จะ delay ไว้ 1 รอบเผื่อไฟล์หลักมีการเขียนอยู่

ทำการ save rules ที่ได้ทำไว้ ผ่านคำสั่ง iptables-save > /etc/iptables.save แล้วทำการ restore ด้วยคำสั่ง iptables-restore โดยใส่ไว้ที่ /etc/network/if-pre-up.d

option เพิ่มเติม เราสามารถเข้าไปแก้ไข squid ให้ทำการ rotate 90 วัน (91วัน) ได้ผ่านทาง squid.conf

logfile_rotate 90

และแก้ไข logrotate ให้ทำการ rotate squid ทุกๆวันเช่นเดียวกัน iptables

สาเหตุที่ทำ log ด้วย squid อีกทีก็เพราะว่าอ่านง่ายกว่า iptables บอกชื่อเว็บไซต์และข้อมูลที่ไปอ่านมา แต่การทำ log ด้วย iptables ก็จะสามารถดักจับข้อมูลได้ทุกๆ port นอกเหนือจาก port 80

ทำการทดสอบ logrotate ด้วยคำสั่ง logrotate -fv /etc/logrotate.d/syslog แล้วสังเกตว่ามีไฟล์ firewall.log.1 หรือไม่ และเมื่อทำอีกครั้งจะต้องมีไฟล์ firewall.log.2.gz

อ้างอิง

http://linux.die.net/man/8/logrotate

http://www.cyberciti.biz/tips/force-iptables-to-log-messages-to-a-different-log-file.html

http://www.thaicert.org/paper/firewall/iptables.php