Thursday, October 3, 2013

Cấu hình và sử dụng các log files của hệ thống

Nguồn: Section 18.3, chương 18, phần II - LPI 

Nhiều sự kiện xảy ra trên hệ thống Linux của bạn nên được log lại cho mục đích quản trị. Linux sử dụng hệ thống syslogd để hiển thị và lưu thông tin miêu tả về các sự kiện này. Hệ thống này cho phép kiểm soát chặt chẽ logging của các messages từ kernel, từ các tiến trình đang chạy trên hệ thống, hoặc các hệ thống từ xa. Thông báo có thể hiển thị trên console, trong log files và trên màn hình text của người dùng trong hệ thống 

Phần 1. Cấu hình syslogd 

Những hành vi của syslogd được kiểm soát bởi file cấu hình của nó - /etc/syslog.conf (trên fedora 8 đã đổi thành rsyslog.conf). File text này cho biết những gì được log và log vào đâu. Mỗi dòng sẽ chứa đựng lời chỉ dẫn theo dạng 
facility.level action 

Lời chỉ dẫn này được định nghĩa như sau: 

facility: đại diện cho đối tượng tạo ra thông báo (kernel, process), nó có thể nhận những giá trị sau: 
  • auth: sử dụng cho những sự kiện bảo mật
  • authpriv: các thông báo liên quan đến kiểm soát truy cập và bảo mật
  • cron: cron daemon
  • daemon: sử dụng bởi các tiến trình hệ thống và các daemons khác
  • kern: các thông báo từ kernel
  • lpr: hệ thống in ấn
  • mark: những thông báo được generated bởi bản thân syslogd. Nó chỉ chứa một biến timestamp và một chuỗi "--MARK--".
  • news: hệ thống tin tức
  • syslog: những thông báo được generated bởi bản thân syslogd.
  • user: thông báo về cấp người dùng chung
  • uucp: hệ thống con UUCP
  • local0 to local7: dự trữ cho sử dụng nội bộ

Việc sử dụng facility cho phép bạn kiểm soát địa chỉ đến của messages dựa trên nguồn gốc của nó. 

level: xác định một ngưỡng mà messages sẽ được logged. level có thể nhận các giá trị sau: 
  • debug: các messages ở chế độ debug
  • info: messages mang thông tin
  • notice: messages mang tính chất thông báo
  • warning (hoặc warn): messages cảnh báo
  • err (hoặc error): messages lỗi
  • crit: messages nguy hiểm
  • alert: messages về các hành động phải được thực hiện ngay
  • emerg (hoặc panic): messages khi hệ thống không thể dùng được nữa

Ngoài ra còn một mức đặc biệt được gọi là none, mức này sẽ disable facility đi cùng. level định nghĩa một số lượng các bản ghi chi tiết trong log file. Dấu sao [*] có thể được sử dụng để miêu tả cho tất cả các facilities hoặc tất cả các levels. 

action: đại diện cho địa chỉ của messages tương ứng với facility.level. action có thể là một tên file, một host name đứng trước ký tự @, hoặc một danh sách người dùng ngăn cách bằng dấu phảy, hoặc một dấu *. 
Để hiểu rõ hơn về tất cả thành phần cũng như tham số này, bạn cần đọc man 5 syslog.conf 

Ví dụ, để theo dõi các daemon bạn có thể thêm 1 dòng vào /etc/syslog.conf như sau: 
Code:
# Define a new log file for daemon facility
daemon.*                           /var/log/daemon.log

Bạn cần restart syslog để thay đổi này có hiệu lực: 
Code:
$ sudo /sbin/service syslog restart
Shutting down kernel logger:                               [  OK  ]
Shutting down system logger:                               [  OK  ]
Starting system logger:                                    [  OK  ]
Starting kernel logger:                                    [  OK  ]

Tiếp theo bạn cần reboot để daemon.log được tạo trong /var/log 

Để test, bạn có thể sử dụng tiện ích logger để gửi messages đến facility bằng shell script: 
Code:
$ logger -p daemon.notice "This is a notice"

Thông báo "This is a notice" sẽ xuất hiện trong /var/log/daemon.log 

# cat /var/log/daemon.log | grep notice 
Dec 1 20:45:08 localhost quanta: This is a notice 
 

Ví dụ về /etc/rsyslog.conf trên Fedora 8 của tớ: 
Code:
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.*       /dev/console

# Define a new log file for daemon facility
daemon.*                                               /var/log/daemon.log

# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;news.none;authpriv.none;cron.none  /var/log/messages

# The authpriv file has restricted access.
authpriv.*      /var/log/secure

# Log all the mail messages in one place.
mail.*       -/var/log/maillog


# Log cron stuff
cron.*       /var/log/cron

# Everybody gets emergency messages
*.emerg       *

# Save news errors of level crit and higher in a special file.
uucp,news.crit      /var/log/spooler

# Save boot messages also to boot.log
local7.*      /var/log/boot.log

#
# INN
#
news.=crit                                        /var/log/news/news.crit
news.=err                                         /var/log/news/news.err
news.notice                                       /var/log/news/news.notice
 
Phần 2. Log File Rotation 

Phần lớn các distro sẽ cài đặt một cấu hình syslog mặc định cho bạn, bao gồm logging to messages và các log files khác trong /var/log. Để ngăn cản những files này ngày càng trở nên cồng kềnh và khó kiểm soát, một hệ thống quay vòng log file (a log file rotation scheme) nên được cài đặt. Hệ thống cron đưa ra các lệnh để thiết lập những log files mới, những file cũ được đổi tên bằng cách thay một con số ở hậu tố. Với loại quay vòng này, /var/log/messages của ngày hôm qua sẽ trở thành messages.1 của ngày hôm nay và một messages mới được tạo. Sự luân phiên này được cấu hình cho một số lượng lớn các file, và các log files cũ nhất sẽ được xoá khi sự luân phiên bắt đầu chạy. Ví dụ trong /var/log của tớ có các messages sau: messages, messages.1, messages-20071111, messages-20071118, ... 

Tiện ích thi hành rotation là logrotate. Lệnh này được cấu hình sử dụng cho một hoặc nhiều files - được xác định bởi các tham số đi cùng. File cấu hình mặc định là /etc/logrotate.conf. Ví dụ với Fedora 8 trên máy tớ: 
Code:
# see "man logrotate" for details
# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
rotate 4

# create new (empty) log files after rotating old ones
create

# use date as a suffix of the rotated file
dateext

# uncomment this if you want your log files compressed
#compress

# RPM packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own wtmp and btmp -- we'll rotate them here
/var/log/wtmp {
    monthly
    create 0664 root utmp
    rotate 1
}

/var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}

# system-specific logs may be also be configured here.

Trong ví dụ này, bạn sẽ thấy: 
  • Hệ thống sẽ quay vòng log files hàng tuần
  • Lưu lại những thông tin logs đáng giá trong 4 tuần
  • Sử dụng định dạng Ngày tháng thêm vào để làm hậu tố của log files (20071111, 20071118, ...)
  • Thông tin về sự quay vòng log của các gói RPM nằm trong /etc/logrotate.d
  • rotation được thiết lập cho 2 files: /var/log/wtmp  /var/log/btmp
 Phần 3. Examining Log Files 

Bạn có thể học được nhiều về cách hoạt động của hệ thống bằng cách xem lại các log files được tạo. Một lúc nào đó sẽ cần thiết để gỡ rối vấn đề gặp phải từ những thông tin đã được logged đó. Phần lớn các log files có dạng plain text, nó rất dễ dàng để xem lại với một vài lệnh như: tail, less, và grep 

Một dòng thông báo log được tạo với các thông tin sau, ngăn cách bởi 1 khoảng trắng (space) 
  • Date/time
  • Origin hostname
  • Message sender
  • Message text

Một đoạn messages điển hình, trông giống như sau: 
Code:
openvpn.net/howto.html#mitm for more info.
Nov 21 14:42:13 localhost openvpn[1964]: Re-using SSL/TLS context
Nov 21 14:42:13 localhost openvpn[1964]: LZO compression initialized
Nov 21 14:42:13 localhost openvpn[1964]: Control Channel MTU parms [ L:1542 D:138 EF:38 EB:0 ET:0 EL:0 ]
Nov 21 14:42:13 localhost openvpn[1964]: Data Channel MTU parms [ L:1542 D:1450 EF:42 EB:135 ET:0 EL:0 AF:3/1 ]
Nov 21 14:42:13 localhost openvpn[1964]: Local Options hash (VER=V4): '41690919'
Nov 21 14:42:13 localhost openvpn[1964]: Expected Remote Options hash (VER=V4): '530fdded'
Nov 21 14:42:13 localhost openvpn[1964]: Socket Buffers: R=[110592->131072] S=[110592->131072]
Nov 21 14:42:13 localhost openvpn[1964]: UDPv4 link local: [undef]
Nov 21 14:42:13 localhost openvpn[1964]: UDPv4 link remote: 192.168.1.3:1194
Nov 21 14:42:13 localhost openvpn[1964]: read UDPv4 [ECONNREFUSED]: Connection refused (code=111)

Trong trường hợp này, hostname là localhost và messages đến từ dịch vụ openvpn. Bất cứ lúc nào bạn cũng có thể xem lại nội dung log files của bạn bằng cách dùng less 
Code:
$ less /var/log/messages

hoặc tail 
Code:
$ tail -f /var/log/messages

Để tìm kiếm các thông báo xác định về mouse, bạn có thể dùng grep 
Code:
# grep '[Mm]ouse' /var/log/messages
Dec  8 00:15:28 smp kernel: Detected PS/2 Mouse Port.
Dec  8 10:55:02 smp gpm: Shutting down gpm mouse services:

Thông thường, nếu bạn sử dụng grep để tìm kiếm một item đặc biệt trong /var/log/messages, bạn sẽ cần phải tìm kiếm tất cả các rotated files với một wildcard (tạm dịch: ký tự đại diện). Chẳng hạn, để tìm kiếm tất cả các messages từ sendmail bạn cần: 
Code:
# grep 'sendmail:' /var/log/messages*


Khi bạn xác định vấn đề từ log files, hãy nhìn vào hostname  sender đầu tiên, sau đó là messages text. Trong nhiều trường hợp bạn có thể xác định được cái gì là sai từ thông báo đó. Thi thoảng, những thông báo lỗi đó chỉ là đầu mối, và việc xem lại toàn bộ các logs của bạn là cần thiết. Trong trường hợp này, sẽ hữu ích nếu bạn tạm thời thay đổi level trong /etc/syslog.conf thành debug để log lại nhiều thông tin hơn giúp bạn giải quyết vấn đề.
Phần 4 (viết thêm): Logging syslog Messages to a Remote Linux Server 
Nguồn: http://www.linuxhomenetworking.com/wiki/index.php/Quick_HOWTO_:_Ch05_:_Troubleshooting_Linux_with_syslog 

Việc logging các thông báo của hệ thống đến một remote server cũng là một cách bảo mật tốt. Thuận lợi của việc này: 
+ Tập trung các log files về một server trung tâm 
+ Kiểm soát lỗi hoặc các hành động nguy hiểm một cách tốt hơn 
+ Hành động xóa log files của kẻ xấu không thể xảy ra cùng một lúc nhất là khi bạn ngăn cản user truy cập đến logging server 

Cấu hình syslog cho server 
Theo mặc định thì syslog không nhận các thông báo từ remote clients. Để làm điều này bạn cần chỉnh /etc/sysconfig/syslog (trong Fedora 8 đã đổi thành rsyslog), và thêm một tuỳ chọn -r vào cuối tham sốSYSLOGD_OPTIONS 

# Options to syslogd 
# -m 0 disables 'MARK' messages. 
# -r enables logging from remote machines 
# -x disables DNS lookups on messages recieved with -r 
# See syslogd(8) for more details 
SYSLOGD_OPTIONS="-m 0 -r" 
# Options to klogd 
# -2 prints all kernel oops messages twice; once for klogd to decode, and 
# once for processing with 'ksymoops' 
# -x disables all klogd processing of oops messages entirely 
# See klogd(8) for more details 
KLOGD_OPTIONS="-x" 
# 
SYSLOG_UMASK=077 
# set this to a umask value to use for all log files as in umask(1). 
# By default, all permissions are removed for "group" and "other". 
 

Nếu trên server bạn có dùng iptables, hãy chắc chắn rằng cổng 514 cho UDP đã được mở: 

-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 514 -j ACCEPT 
 

Nhớ restart iptables: 
Code:
# /sbin/service iptables restart
Flushing firewall rules:                                   [  OK  ]
Setting chains to policy ACCEPT: filter                    [  OK  ]
Unloading iptables modules:                                [  OK  ]
Applying iptables firewall rules:                          [  OK  ]
Loading additional iptables modules: ip_conntrack_netbios_n[  OK  ]ntrack_ftp


Cấu hình cho client 
Syslog server đã có thể nhận các syslog messages. Ở client, bạn phải cấu hình để gửi messages đến nó. Để thực hiện điều này bạn cần sửa /etc/syslog.conf như sau: 
Code:
*.debug                                       @192.168.1.3
*.debug                                       /var/log/messages

Từ bây giờ, tất cả các messages có level là debug hoặc cao hơn đều được log tại server 192.168.1.3 cũng như tại local (/var/log/messages) 
Hãy nhớ là chúng ta cần restart lại syslog 
Code:
$ sudo /sbin/service syslog restart
Password:
Shutting down kernel logger:                               [  OK  ]
Shutting down system logger:                               [  OK  ]
Starting system logger:                                    [  OK  ]
Starting kernel logger:                                    [  OK  ]


Test: 
Trên client, bạn thử: 
Code:
$ sudo /sbin/service openvpn stop
Shutting down openvpn:                                     [  OK  ]

Trên server, kiểm tra xem đã nhận được syslog messages chưa: 
Code:
# tail /var/log/messages
...
...
Dec  1 21:31:13 192.168.1.2 localhost openvpn[4507]: TCP/UDP: Closing socket
Dec  1 21:31:13 192.168.1.2 localhost openvpn[4507]: SIGTERM[hard,] received, process exiting
...
...

Như vậy, việc gửi logging messages đến remote server đã thành công.
Phần 5: Cài đặt và cấu hình syslog-ng 

syslog-ng là một ứng dụng tổ hợp các tính năng của logrotate  syslog, nó cho phép tùy biến dễ dàng, và giàu tính năng hơn. 
Ưu điểm: 
+ logging đáng tin cậy vì có thể truyền qua TCP 
+ Không có sự quay vòng log files mà chúng được lưu theo vị trí mặc định 
+ Cải thiện các log entries 

1. Cài đặt 
Cả eventlog  syslog-ng các bạn đều có thể download từ website: www.balabit.com 
Code:
# wget http://www.balabit.com/downloads/files/eventlog/0.2/eventlog-0.2.5.tar.gz
--21:43:01--  http://www.balabit.com/downloads/files/eventlog/0.2/eventlog-0.2.5.tar.gz
Resolving www.balabit.com... 212.92.18.33
Connecting to www.balabit.com|212.92.18.33|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [application/octet-stream]
Saving to: `eventlog-0.2.5.tar.gz'

    [                 <=>                    ] 312,164     35.3K/s   in 8.6s   

21:43:29 (35.3 KB/s) - `eventlog-0.2.5.tar.gz' saved [312164]

Code:
# wget http://www.balabit.com/downloads/files/syslog-ng/sources/2.0/src/syslog-ng-2.0.6.tar.gz
--21:46:37--  http://www.balabit.com/downloads/files/syslog-ng/sources/2.0/src/syslog-ng-2.0.6.tar.gz
Resolving www.balabit.com... 212.92.18.33
Connecting to www.balabit.com|212.92.18.33|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [application/octet-stream]
Saving to: `syslog-ng-2.0.6.tar.gz'

    [                                  <=>   ] 369,302     15.2K/s   in 21s    

21:47:00 (17.0 KB/s) - `syslog-ng-2.0.6.tar.gz' saved [369302]


Tiến hành cài thư viện glib (nếu chưa có) 
Code:
$ yum -y install glib


Cài đặt eventlog 
Code:
# tar -zxvf eventlog-0.2.5.tar.gz
# cd eventlog-0.2.5
# ./configure
# make
# make install


Gán biến môi trường PKG_CONFIG_PATH 
Code:
# export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/


Bước tiếp theo, cài syslog-ng 
Code:
# tar -zxvf syslog-ng-2.0.6.tar.gz
# cd syslog-ng-2.0.6
# ./configure --sysconfdir=/etc
# make
# make install


Quá trình cài đặt kết thúc, chúng ta sẽ có được các file cấu hình mẫu nằm trong thư mục contrib 
Code:
[root@localhost syslog-ng-2.0.6]# ls contrib
aix-packaging      init.d.solaris  Makefile.in         syslog-ng.conf.HP-UX
fedora-packaging   init.d.SunOS    README              syslog-ng.conf.RedHat
hpux-packaging     init.d.SuSE     relogger.pl         syslog-ng.conf.SunOS
init.d.HP-UX       lfs-packaging   rhel-packaging      syslog-ng.vim
init.d.RedHat      Makefile        syslog2ng
init.d.RedHat-7.3  Makefile.am     syslog-ng.conf.doc


Tạo một thư mục syslog-ng trong /etc và copy các scripts và file cấu hình mẫu đến nơi tương ứng (Tuỳ vào Distro bạn đang dùng mà chọn thư mục thích hợp) 
Code:
# mkdir /etc/syslog-ng
# cp contrib/fedora-packaging/syslog-ng.init /etc/init.d/syslog-ng
# cp contrib/fedora-packaging/syslog-ng.conf /etc/syslog-ng
# cp contrib/fedora-packaging/syslog-ng.sysconfig /etc/sysconfig/syslog-ng
# cp contrib/fedora-packaging/syslog-ng.logrotate /etc/logrotate.d/syslog-ng


Thay đổi quyền cho file /etc/init.d/syslog-ng 
Code:
# chmod 755 /etc/init.d/syslog-ng


Lúc này bạn cần tìm đúng vị trí của syslog-ng và cho init.d script trỏ đến đó 
Code:
# updatedb
# locate syslog-ng | grep bin
/usr/local/sbin/syslog-ng
# vi /etc/init.d/syslog-ng
...
#exec="/sbin/syslog-ng"
exec="/usr/local/sbin/syslog-ng"
...


Dừng syslog và khởi tạo syslog-ng 
Code:
# service syslog stop
# service syslog-ng start


Tạo một group logs và thêm các users cần dùng vào 
Code:
# groupadd logs
# usermod -G logs quanta


Cấu hình để syslog-ng khởi động ở lần reboot tiếp theo 
Code:
# chkconfig syslog off
# chkconfig syslog-ng on


Như vậy bạn đã cài đặt xong syslog-ng trên server. Phần tiếp theo chúng ta sẽ tìm hiểu về cách cấu hình syslog-ng trên server, và cấu hình syslog tại client.
Let's build on a great foundation!

[Up] [Print Copy]
  [Hỏi đáp]   Re: Cấu hình và sử dụng các log files của hệ thống01/12/2007 06:41:44 (+0700) | #16 | 101350
[Avatar]lQ
Moderator
 
Joined: 29/03/2005 17:06:20
Bài gởi: 494
Offline 
[Profile] [PM]

azteam wrote:
Bài viết rất bổ ích về syslog. Cảm ơn bác quanta. 
Hiện tại em đang thử viết tool hoạt động như một IDS dựa trên phân tích syslog của webserver. Tuy nhiên còn đang mắc ở đoạn parse những syslogs (exam: apache log) này sang một chuẩn riêng. Nhân tiện cho em một số hướng giải quyết?. 
Thanks. 

Thử tìm hiểu về OSSEC xem. Đây là 1 Host-based IDS. Một trong những tính năng của nó là phân tích logs và phát ra những alerts theo những rules đã cài đặt trước. 

Vì lĩnh vực phân tích log khá rộng nên để thảo luận chi tiết và tránh đi xa chủ đề syslog này, đề nghị bạn mở 1 topic chuyên về phân tích logs. Nếu chỉ đào sâu công cụ OSSEC thì đặt tiêu đề có liên quan đến phần mềm này.
Link:http://www.hvaonline.net/hvaonline/posts/list/16534.hva