Tổng lượt truy cập

Friday, October 15, 2010

Hệ thống syslog

Hi!

Các bạn làm về security thì không thể không tiếp xúc việc phải lấy log từ các hệ thống để phân tích chúng nhằm fix bug hệ thống hoặc tra cứu các sự kiện đã xảy ra: như các tấn công, các lỗi hệ thống....Vậy mỗi khi xảy ra sự cố chúng ta mới bắt đầu đi thu thập log ở các thiết bị rồi mới đi phân tích tìm mối tương quan để đưa kết luận sự cố xảy ra ở đâu và nguyên nhân gì?. Điều này rất bất tiện phải không các bạn. Nay tôi xin giới thiệu các bạn hệ thống syslog mà bản thân tôi thấy khá hay, hệ thống này tôi đã cài đặt và vận hành rất hiệu quả, đặc biệt nó là mã nguồn mở chạy rất ổn định, đó là hệ thống syslog_ng. Hệ thống này có thể thu thập tất cả các thiết bị windows, linux, unix, cisco... hoạt động cả trên UDP lẫn TCP, đặc biệt trong syslog_ng chúng ta có thể thiết lập được việc filter log, có thể lấy log mà bạn mong muốn bằng việc filter.
CÀI ĐẶT SYSLOG-NG

Các phiên bản của syslog-ng thường đi gắn liền với nó là eventlog. Cả eventlog và syslog-ng ta đều có thể download từ website: www.balabit.com. Thủ tục cài đặt đơn giản nhưng cần phải có linux gcc - chương trình biên dịch ngôn ngữ lập trình cài đặt sẵn để thành công. Các bước cài đặt như sau
:

Bước 1# wget 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'

# wget 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

Bước 2

Cài đặt thư viện glib

# yum -y install glib*

Bước 3

Cài đặt eventlog# tar -zxvf eventlog-0.2.5.tar.gz
# cd eventlog-0.2.5
# ./configure
# make
# make install
Bước 4

Biến môi trường cũng cần được thiết lập: PKG_CONFIG_PATH

# export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/
# vi .bash_profile
PATH=$PATH:$HOME/bin
PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/
export PATH
unset uSERNAME

Bước 5

Cài syslog-ng-2.0.6# tar -zxvf syslog-ng-2.0.6.tar.gz
# cd syslog-ng-2.0.6
# ./configure --sysconfdir=/etc/syslog-ng
# 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.[root@localhost syslog-ng-2.0.6]# cd 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

Bước 6

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# mkdir /etc/syslog-ng
# cp fedora-packaging/syslog-ng.init /etc/init.d/syslog-ng
# cp fedora-packaging/syslog-ng.conf /etc/syslog-ng
# cp fedora-packaging/syslog-ng.sysconfig /etc/sysconfig/syslog-ng
# cp fedora-packaging/syslog-ng.logrotate /etc/logrotate.d/syslog-ng


Bước 7

Thay đổi quyền cho file /etc/init.d/syslog-ng

# chmod 755 /etc/init.d/syslog-ng


Bước 8

Lúc này cần tìm đúng vị trí của syslog-ng và cho init.d script trỏ đến đó # 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"
...


Bước 9

Dừng syslog và khởi tạo syslog-ng# service syslog stop
# service syslog-ng start
Bước 10
Tạo một group logs và thêm các users cần dùng vào # groupadd logs
# useradd vhoang
# usermod -g logs vhoang

Bước 11

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

CẤU HÌNH SYSLOG-NG

1. Cấu hình syslog-ng

Những hành vi vủa syslog-ng được kiếm soát bởi file cấu hình của nó /etc/syslog-ng/syslog-ng.conf .


options {
sync (0);
time_reopen (10);
log_fifo_size (1000);
long_hostnames (off)
use_dns (no);
use_fqdn (no);
create_dirs (yes);
keep_hostname (yes);
};

source s_sys {
file ("/proc/kmsg" log_prefix("kernel: "));
unix-stream ("/dev/log");
internal();
# udp(ip(0.0.0.0) port(514));
# tcp(ip(0.0.0.0) port(514));
};

destination d_cons { file("/dev/console"); };
destination d_mesg { file("/var/log/messages"); };
destination d_auth { file("/var/log/secure"); };
destination d_mail { file("/var/log/maillog" sync(10)); };
destination d_spol { file("/var/log/spooler"); };
destination d_boot { file("/var/log/boot.log"); };
destination d_cron { file("/var/log/cron"); };
destination d_mlal { usertty("*"); };

#filter f_filter1 { facility(kern); };
filter f_filter2 { level(info..emerg) and
not facility(mail,authpriv,cron); };
filter f_filter3 { facility(authpriv); };
filter f_filter4 { facility(mail); };
filter f_filter5 { level(emerg); };
filter f_filter6 { facility(uucp) or
(facility(news) and level(crit..emerg)); };
filter f_filter7 { facility(local7); };
filter f_filter8 { facility(cron); };

#log { source(s_sys); filter(f_filter1); destination(d_cons); };
log { source(s_sys); filter(f_filter2); destination(d_mesg); };
log { source(s_sys); filter(f_filter3); destination(d_auth); };
log { source(s_sys); filter(f_filter4); destination(d_mail); };
log { source(s_sys); filter(f_filter5); destination(d_mlal); };
log { source(s_sys); filter(f_filter6); destination(d_spol); };
log { source(s_sys); filter(f_filter7); destination(d_boot); };
log { source(s_sys); filter(f_filter8); destination(d_cron); };

Ta có thể dễ dàng nhận ra file cấu hình của syslog-ng được chia thành các khối riêng rẽ: options, source, filter, destination, và log. Ý nghĩa cơ bản của các khối này như sau:

1. Options: Là nơi chứa những tùy chọn toàn cục. Ý nghĩa của từng tham số như sau:

- sync: có bao nhiêu dòng messages sẽ được giữ lại ở hàng đợi output trước khi ghi ra đĩa. 0 là một tuỳ chọn ưa thích - điều đó có nghĩa là ta sẽ ghi lại mọi thứ.
- time_reopen: thời gian đợi (tính bằng s) trước khi những kết nối hỏng được thực hiện lại.
- log_fifo_size: số dòng thông báo lớn nhất trong output queue. Output queue được hiểu là tất cả các destinations file
- use_dns (yes|no): dùng hay không dùng DNS
- use_fqdn (yes|no): Có dùng một tên miền đầy đủ thay vì một tên miền ngắn hay không.
- create_dirs (yes|no): có cho phép tạo thư mục cho các file đích hay không.
- keep_hostname (yes|no): Xác định xem có trust hostname trong các log messages hay không. Nếu keep_hostname có giá trị là yes và có 1 hostname trong message thì syslog-ng không làm gì cả. Ngược lại, nó luôn luôn ghi đè lên những thông tin từ nơi nhận message.

2. source: chứa nguồn của thông báo, nó có thể là: files, local sockets hoặc remote hosts.

3. destination: đích đến của các messages, nó cho biết những gì được log và được log vào đâu. Nó cũng có thể là: files, local sockets hoặc remote hosts. Mỗi dòng sẽ chứa đựng lời chỉ dẫn theo dạng: facility.level action
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 là một tiện ích cho phép thực hiện các tác vụ một cách tự động theo định kỳ, ở chế độ nền của hệ thống.
daemon: sử dụng bởi các tiến trình hệ thống và các daemons khác (daemon là một chương trình hoạt động liên tục. daemon khác với các ứng trình bình thường ở chỗ, các ứng trình bình thường dừng lại sau khi hoàn tất một (hoặc một chuỗi) thao tá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.
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. Unix-to-Unix là một tập hợp các chương trình mức thấp cho phép kết nối các máy UNIX với nhau.
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ó.

4. filter: đây là một chức năng mạnh và linh động của syslog-ng. Ta có thể dùng nó để lọc bất cứ log messages nào như là: syslogd chuẩn, log level, host names, hoặc một nội dung tùy ý như là một cụm ký tự hay một chuỗi số. 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

5. log: Khối này chứa các câu lệnh log, kết nối giữa: source, destination, filter để báo cho syslog-ng biết là chúng phải làm gì.

2. Cấu hình enableing remote Logging

Ta có thể gửi log messages từ linux clients đến syslog-ng server với syslogd. Nhưng cách làm này là không an toàn và thông tin có thể bị mất bởi vì syslogd truyền bằng UDP packets. Đó là lý do ta cần cài đặt syslog-ng trên client.

Ta cấu hình bằng cách thêm những dòng sau vào syslog-ng.conf trên server để cho phép nhận messages từ remote clients và xuất chúng ra một file trên host.

source s_remote { tcp(); };
destination d_clients { file ("/var/log/syslog-ng/$DAY.$MONTH.$YEAR/$HOST/$FACILITY.log"); };
log { source(s_remote); destination(d_clients); };
 
Trên client host ta có thể tập hợp tất cả các local messages và gửi đến remote. Thêm vào file /etc/syslog-ng/syslog-ng.conf đoạn code như sau:
#sample syslog-ng.conf for a remote client
source s_local { internal(); unix-stream("/dev/log"); file("/proc/kmsg" log_prefix("kernel: ")); };
destination d_loghost {tcp("10.4.22.222" port(514));};
log { source(s_local); destination(d_loghost); };
Khi nào thay đổi file syslog-ng thì cần phải restart syslog-ng
# /etc/init.d/syslog-ng restart

Kiểm tra quá trình đẩy log từ client linux về syslog-ng server:

- Trên syslog-ng client, restart một dịch vụ bất kỳ, hoặc dùng lệnh su để vào các tài khoản.
- Trên syslog-ng server kiểm tra

3. Cấu hình Syslog-ng nhận log từ Windows
 Trên Window
Để remote Logging trên Windows về Syslog-ng server có rất nhiều công cụ như: Syslog-ng Agent, SNARE for Windows,…vv. Các tool này giao tiếp với hệ thống và ghi lại các sự kiện của Windows tới nhật ký, ghi lại sự kiện đọc, lọc và gửi từ các ứng dụng rồi gửi đến syslog-ng server qua giao thức UDP Port 514. Các nhật ký này sau đó sẽ được lọc theo một các mục đích được lựa chọn bởi người quản trị và được thông qua mạng, sử dụng giao thức UDP tới server.
+ Cài đặt và cấu hình Datagram SyslogAgent

+ Cài đặt và cấu hình SNARE for Windows:


Cấu hình trên syslog-ng server

Trên syslog-ng server, file /etc/syslog-ng.conf ta cấu hình như sau

source s_sys {
file ("/proc/kmsg" log_prefix("kernel: "));
unix-stream ("/dev/log");
internal();

# udp(ip(0.0.0.0) port(514));
# tcp(ip(0.0.0.0) port(514));
};

source s_remote { tcp(); udp(); };
destination d_clients { file ("/var/log/syslog-ng/$DAY.$MONTH.$YEAR/$HOST/$FACILITY.log"); };
log { source(s_remote); destination(d_clients); };

4. Cấu hình Syslog-ng server nhận log từ các thiết bị (Cisco)

Để log của các thiết bị Cisco (Router Swich) đổ log về syslog-ng server.
Trên Cisco ta thực hiện các lệnh như sau:
logging trap debugging
logging facility local7
logging source-interface fastEthernet x/y
logging
Trên syslog-ng server ta configure bằng cách thêm vào file /etc/syslog-ng/syslog-ng.conf như sau:
source net { udp(ip(0.0.0.0) port(514)); };
destination d_cisco { file("/var/log/cisco.log"); };filter f_cisco_info { level(info); };
filter f_cisco_notice { level(notice); };
filter f_cisco_warn { level(warn); };
filter f_cisco_crit { level(crit); };
filter f_cisco_err { level(err); };
filter f_cisco_debug { level(debug); };
log { source(net); filter(f_cisco_info); destination(d_cisco); };
log { source(net); filter(f_cisco_notice); destination(d_cisco); };
log { source(net); filter(f_cisco_warn); destination(d_cisco); };
log { source(net); filter(f_cisco_crit); destination(d_cisco); };
log { source(net); filter(f_cisco_err); destination(d_cisco); };
log { source(net); filter(f_cisco_debug); destination(d_cisco); };
Note: Bạn cũng có thể cài đặt bằng Yum qua hệ thống với lệnh Yum instal syslog-ng lúc này chúng ta không cần buid từng gói syslog-ng và evenlog riêng biệt nữa, hệ thống tự động cài đặt toàn bộ gói thư viện cần thiết cho chúng ta.
ANALYZER LOG

Các phần mềm phân tích log
o Php-syslog-ng: là phần mềm Open source phân tích các log của syslog-ng
o Eventlog analyzer: là phần mềm thương mại, nó có thể thu thập log từ các host và phân tích các log
o Splunk
o Sawmill
o ….vv
 
Sawmill
Sawmill là phần mềm analyzer log tương đối linh hoạt. Nó cho phép ta điều khiển qua giao diện web
://refer-points.blogspot.com/2009/07/point-15-cai-at-va-cau-hinh-syslog.html