คอนฟิก rsyslog ให้รับ syslog จากอุปกรณ์อื่น

อุปกรณ์หลายตัวที่เชื่อมต่อเน็ตเวิร์กได้ เช่น Router, ADSL Modem, Switch ส่วนใหญ่จะสามารถเก็บ log เหตุการณ์ที่เกิดขึ้นในอุปกรณ์ เพื่อใช้ในการแก้ไขปัญหาการใช้งานได้

แต่พื้นที่ที่ใช้เก็บ log ในตัวอุปกรณ์เหล่านี้ส่วนใหญ่จะมีขนาดไม่มาก ใช้ flash หรือ memory เล็กๆ ในการเก็บ log มีขนาดไม่กี่ MByte เท่านั้น ทำให้เมื่อเก็บไประยะ ต้องเคลียร์หรือเขียนทับของเก่าลงไป

หากต้องการเก็บ log ย้อนหลัง แนะนำให้คอนฟิกเพื่อส่ง log ไปเก็บยังเซิร์ฟเวอร์ที่ติดตั้งโปรแกรมประเภท syslog ไว้

ลีนุกซ์เกือบทั้งหมดจะติดตั้งโปรแกรมประเภท syslog ไว้ แต่ดีฟอลต์จะไม่รับ log จากเครื่องอื่น ในที่นี้เราจะมาคอนฟิกลีนุกซ์เพื่อให้รับ log หรือ syslog จากเครื่องอื่นได้

คอนฟิก rsyslog

CentOS เวอร์ชั่น 6 รวมทั้งลีนุกซ์เวอร์ชั่นใหม่ๆ จะติดตั้งโปรแกรม rsyslog แทน syslog ตัวเดิม ด้วยคุณสมบัติที่มากกว่าและคอนฟิกได้หลากหลาย

ไฟล์คอนฟิกหลักของ rsyslog คือไฟล์ /etc/rsyslog.conf

เริ่มต้น ต้องแก้ไขคอนฟิกให้ rsyslog สามารถรับ log จากเครื่องอื่น โดยผ่านทาง UDP พอร์ต 514

[root@linux ~]# vi /etc/rsyslog.conf
# rsyslog v5 configuration file
# For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html
# If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html
...
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
...

กำหนดไฟล์ที่ใช้เก็บ log ตามประเภท facility เช่นถ้าเป็น local5 ให้เก็บ log ไว้ในไฟล์ /var/log/local5.log

[root@linux ~]# vi /etc/rsyslog.conf
...
# Save boot messages also to boot.log
local7.*                              /var/log/boot.log
# accept remote log
local5.* /var/log/local5.log

รีสตาร์ตเซอร์วิส rsyslog หลังการแก้ไข

[root@linux ~]# service rsyslog restart
Shutting down system logger:           [ OK ]
Starting system logger:                [ OK ]

เพิ่ม rule firewall ใน iptables

โดยดีฟอลต์ลีนุกซ์หากคอนฟิกเปิด firewall ไว้ จะไม่รับ packet ของ syslog เข้า UDP พอร์ต 514 จะต้องคอนฟิกเพิ่ม

แก้ไขไฟล์ /etc/sysconfig/iptables

[root@linux ~]# vi /etc/sysconfig/iptables
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 514 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

รีสตาร์ตเซอร์วิส iptables ใหม่ ให้คอนฟิก firewall มีผล

[root@linux ~]# service iptables restart
iptables: Flushing firewall rules:                      [ OK ]
iptables: Setting chains to policy ACCEPT: nat filter   [ OK ]
iptables: Unloading modules:                            [ OK ]
iptables: Applying firewall rules:                      [ OK ]

คอนฟิกส่ง syslog จาก Cisco Router

ในที่นี้ขอทดสอบคอนฟิกบน Cisco Router เพื่อให้ส่ง syslog หรือ log ไปยังเซิร์ฟเวอร์ลีนุกซ์ที่คอนฟิก rsyslog รอรับไว้

เข้าโหมดคอนฟิก แล้วใส่คำสั่ง logging โดยกำหนด facility ให้ตรงกับที่คอนฟิกไว้ในไฟล์คอนฟิก rsyslog และใส่ IP address ของเครื่องลีนุกซ์เช่นในที่นี้คือ 192.168.1.10

Router# conf t
Enter configuration commands, one per line. End with CNTL/Z.
Router(config)# service timestamps log datetime msec localtime show-timezone
Router(config)# logging facility local5
Router(config)# logging 192.168.1.10

วิธีง่ายสุดเพื่อให้ Cisco Router สร้าง log ออกมา ให้เข้าโหมดคอนฟิก คือพิมพ์ conf t แล้ว end ออกมา จะเกิด log ข้อความว่ามีการแก้ไขคอนฟิกโดยใคร จาก IP address อะไร

Router# conf t
Enter configuration commands, one per line. End with CNTL/Z.
Router(config)# end
Router#

ตัวอย่างข้อความ log ที่ลีนุกซ์ได้รับจาก router (IP 192.168.1.254) สังเกตจะตัวเลขเวลาอยู่สองชุด ซ้ายจะเป็นเวลาที่ได้รับ log บนเครื่องลีนุกซ์ ส่วนด้านขวาเป็นเวลาจากอุปกรณ์

[root@linux ~]# tail -f /var/log/local5.log
Jul 28 10:21:19 192.168.1.254 32500: 000142: Jul 28 10:21:18.472 ICT: %SYS-5-CONFIG_I: Configured from console by alice on vty0 (192.168.1.12)

Leave a Reply

Your email address will not be published.