Cấu hình Rsyslog làm Centralized Logging Server

Trong bài viết này, Tiến hướng dẫn bạn cấu hình rsyslog làm Centralized Logging Server. Sự thật, Centralized Logging Server luôn luôn rất cần thiết. Nó giúp bạn lưu trữ và quản lý log tập trung. Trong những tổ chức tuân thủ ISO (đơn cử ISO 27001) thì Centralized Logging Server là yêu cầu cần và đủ để bạn đi qua sự kiểm duyệt gắt gao. Với kiến thức của bản thân, Tiến đưa ra những ưu điểm:

  • System/ Application Logs từ máy chủ trong hạ tầng hệ thống được gửi tập trung về Centralized Logging Server.
  • Trên Centralized Logging Server, phân quyền để không ai có quyền thêm/ sửa/ xóa log file, giúp đảm bảo tính tin cậy và toàn vẹn của log file.
  • System Administrator quản lý log files tập trung
  • Là bước đầu để xây dựng một Log Web Portal, System Administrator có thể phân quyền cho Developer, hoặc người dùng khác được phân quyền kiểm tra System/ Application Logs

Centralized Logging Server trong bài viết này gồm hai thành phần:

Thông tin hệ điều hành, gói cài đặt Rsyslog dùng trong bài viết  
**Rsyslog Server**
CentOS release 6.6 (Final)  
rsyslog-5.8.10-10.el6_6.x86_64

**Rsyslog Client**
CentOS release 6.6 (Final)  
rsyslog-5.8.10-10.el6_6.x86_64  

Cấu hình Rsyslog Server

Bước 1: cài đặt Rsyslog

[tien@tien-phan ~]$ sudo yum search rsyslog
rsyslog.x86_64 : Enhanced system logging and kernel message trapping daemons  
rsyslog7.x86_64 : Enhanced system logging and kernel message trapping daemon  
[tien@tien-phan ~]$ sudo yum install rsyslog.x86_64

Bước 2: cấu hình Rsyslog như dưới đây

# 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

#### MODULES ####

$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imklog   # provides kernel logging support (previously done by rklogd)
#$ModLoad immark  # provides --MARK-- message capability

# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514

# Provides TCP syslog reception
$ModLoad imtcp
#$InputTCPServerRun 514


#### GLOBAL DIRECTIVES ####

# Use default timestamp format
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

# File syncing capability is disabled by default. This feature is usually not required,
# not useful and an extreme performance hit
#$ActionFileEnableSync on

# Include all config files in /etc/rsyslog.d/
$IncludeConfig /etc/rsyslog.d/*.conf

$InputTCPServerStreamDriverMode 1
$InputTCPServerStreamDriverAuthMode 1
$InputTCPServerRun 5822
#### RULES ####

# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.*                                                 /dev/console

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

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

# 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

# SFTP log
local8.*                                                        /var/log/sftp.log

# This one is the template to generate the log filename dynamically, depending on the client's IP address.
$template FILENAME,"/var/log/remote/%fromhost-ip%/%app-name%.log"

# Log all messages to the dynamically formed file. Now each clients log (192.168.1.2, 192.168.1.3,etc...), will be under a separate directory which is formed by the template FILENAME.
*.* ?FILENAME

Giải thích cấu hình

$template FILENAME,"/var/log/remote/%fromhost-ip%/%app-name%.log"  

Để tách riêng biệt icoming logs theo địa chỉ IP. Điều này rất hữu ích khi bạn có nhiều Rsyslog Client trong mạng cùng gửi log về Rsyslog Server.

Bước 3: để tăng tính tin cậy và an toàn, tôi tạo self signed certificate linux cho Rsyslog Server

cd /etc/rsyslog.d/cert  
$openssl genrsa 2048 > ca-key.pem    
$openssl req -new -x509 -nodes -days 3600 -key ca-key.pem -out ca-cert.pem    
$openssl req -newkey rsa:2048 -days 3600 -nodes -keyout server-key.pem -out server-req.pem  
$openssl rsa -in server-key.pem -out server-key.pem  
$openssl x509 -req -in server-req.pem -days 3600 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem  
$ls -lrt
[tien@tien-phan cert]$ ls -lrt
total 20  
-rw-r--r-- 1 root root 1679 Dec 21  2016 ca-key.pem
-rw-r--r-- 1 root root 1367 Dec 21  2016 ca-cert.pem
-rw-r--r-- 1 root root 1029 Dec 21  2016 server-req.pem
-rw-r--r-- 1 root root 1679 Dec 21  2016 server-key.pem
-rw-r--r-- 1 root root 1241 Dec 21  2016 server-cert.pem

Bước 4: áp dụng self signed certificate linux cho Rsyslog Server. Tôi mở file /etc/rsyslog.conf và thêm đoạn sau vào file cấu hình.

# Include all config files in /etc/rsyslog.d/
$IncludeConfig /etc/rsyslog.d/*.conf

$DefaultNetstreamDriver gtls
$DefaultNetstreamDriverCAFile /etc/rsyslog.d/cert/ca-cert.pem
DefaultNetstreamDriverCertFile /etc/rsyslog.d/cert/server-cert.pem  
DefaultNetstreamDriverKeyFile /etc/rsyslog.d/cert/server-key.pem  

Bước 5: restart Rsyslog Service để áp dụng thay đổi

[tien@tien-phan cert]$ sudo /etc/init.d/rsyslog restart


Bước 6: đi vào thư mục /var/log, tôi thấy thư mục Centralized Logging đã được tạo

$cd /var/log
$ls -lrt
drwxr-xr-x  7 root   root         4096 Dec 22  2016 remote  
$cd remote
$ls -lrt
[tien@tien-phan remote]$ ls -lrt
total 20  
drwx------ 2 root root 4096 Feb 15  2017 10.10.10.1  
drwx------ 2 root root 4096 Mar  8 10:11 10.10.10.2  
drwx------ 2 root root 4096 May  9 08:39 10.10.10.3  


Bước 7: Mở iptables firewall cho Rsyslog Client đi vào Rsyslog Server

-A INPUT -m state --state NEW -s 10.10.10.1 -m udp -p udp --dport 514 -j ACCEPT
-A INPUT -m state --state NEW -s 10.10.10.2 -m udp -p udp --dport 514 -j ACCEPT
-A INPUT -m state --state NEW -s 10.10.10.3 -m udp -p udp --dport 514 -j ACCEPT

Bước 8: Restart iptables firewall Service để áp dụng thay đổi
[tien@tien-phan ~]$ sudo /etc/init.d/iptables restart

Cấu hình Rsyslog Client

Bước 1: cài đặt Rsyslog

[tien@client ~]$ sudo yum search rsyslog
rsyslog.x86_64 : Enhanced system logging and kernel message trapping daemons  
rsyslog7.x86_64 : Enhanced system logging and kernel message trapping daemon  
[tien@client ~]$ sudo yum install rsyslog.x86_64

Bước 2: cấu hình Rsyslog

$ModLoad imuxsock
$ModLoad imklog
$ModLoad imudp
$UDPServerRun 514

# Provides UDP forwarding. The IP is the server's IP address
#*.* @loghost
*.* @tien-phan.com:514


Bước 3: thêm self signed certificate linux cho Rsyslog Client
chép ca-crt.pem từ Rsyslog Server (đã tạo ở bước 3 của Cấu hình Rsyslog Server) tới thư mục /etc/rsyslog.d/cert/ trên Rsyslog Client.

[tien@client cert]# ls -lrt
total 4  
-rw-r--r-- 1 root root 1367 Dec 21  2016 ca-cert.pem

Bước 4: thêm đoạn sau vào file /etc/rsyslog.conf

# Rsyslog Over TLS
$DefaultNetstreamDriverCAFile /etc/rsyslog.d/cert/ca-cert.pem
$DefaultNetstreamDriver gtls
$ActionSendStreamDriverMode 1
$ActionSendStreamDriverAuthMode anon

File /etc/rsyslog.conf sẽ hoàn thiện như sau

$ModLoad imuxsock
$ModLoad imklog
$ModLoad imudp
$UDPServerRun 514

# Rsyslog Over TLS
$DefaultNetstreamDriverCAFile /etc/rsyslog.d/cert/ca-cert.pem
$DefaultNetstreamDriver gtls
$ActionSendStreamDriverMode 1
$ActionSendStreamDriverAuthMode anon

# Provides UDP forwarding. The IP is the server's IP address
#*.* @loghost
*.* @tien-phan.com:514

Bước 5: restart Rsyslog Service để áp dụng thay đổi

[tien@client cert]$ sudo /etc/init.d/rsyslog restart

Tới đây, cấu hình Rsyslog Server và Rsyslog Client đã hoàn tất.

Để cấu hình thích nghi với thay đổi hơn, bạn có thể định nghĩa địa chỉ IP của Rsyslog Server vào file /etc/hosts. Sau đó, bạn chỉ cần gọi đến DNS đã được định danh và không phải nhớ địa chỉ IP của Rsyslog Server. Nó hữu dụng cả trong trường hợp, bạn thay đổi địa chỉ IP của Rsyslog Server, bạn không cần vào /etc/rsyslog.conf để thay đổi, mà vào /etc/hosts để cập nhật địa chỉ IP

Kết luận

Trong bài viết này, tôi đã hướng dẫn bạn cấu hình Rsyslog làm Centralized Logging Server. Nếu bạn là người mới bắt đầu với Rsyslog, tôi có niềm tin bài viết giúp ích cho bạn. Tôi rất vui khi bạn đọc tới đây.

Lời cám ơn

Tôi cám ơn bạn đã dành thời gian để đọc bài viết này. Tất nhiên, tôi luôn quan tâm đến hoàn thiện chất lượng bài viết, vì vậy mọi sự đóng góp của bạn là sự khích lệ đối với tôi.

Bài viết thể hiện quan điểm, văn phong của tác giả. Mọi sự tranh luận, phản biện được khuyến khích. Và tôi bảo lưu mọi quan điểm cho đến khi mọi thứ được sáng tỏ trên cơ sở sự chính xác của thông tin.

Tài liệu tham khảo

Để viết bài này, tôi đã sử dụng các tài liệu tham khảo
https://nacko.net/securing-your-syslog-server-with-tls-ssl-in-centos-6-rhel-6/

Tien Phan

Read more posts by this author.

Subscribe to

Get the latest posts delivered right to your inbox.

or subscribe via RSS with Feedly!