1. Tổng quan về Log
Log ghi lại các thông báo về hoạt động của cả hệ thống hoặc của các dịch vụ được triển khai trên hệ thống và file tương ứng. Các file log này sẽ chứa các thông báo về máy chủ, bao gồm kernel, dịch vụ và ứng dụng đang chạy trên nó. File log cung cấp thời gian của các sự kiện cho hệ điều hành, ứng dụng và hệ thống Linux và là một công cụ quan trọng giúp chúng ta kiểm tra và khắc phục sự cố.
Hầu hết các file log được chia thành một trong bốn loại:
- Application Logs: Nhật ký ứng dụng
- Event Logs: Nhật ký sự kiện
- Service Logs: Nhật ký dịch vụ
- System Logs: Nhật ký hệ thống
Log = Time + Data
Mỗi ứng dụng được cài đặt trên hệ thống có cơ chế tạo log file riêng của nó. Trên Linux thì nơi lưu trữ Log được tập trung tại các file log trong thư mục /var/log/
1.1 Một số file log thông dụng
/var/log/cron.log : chứa dữ liệu log của cron daemon
/var/log/auth.log : Chứa thông tin xác thực trên hệ thống trong máy chủ được ghi lại. Khi các bạn cần tìm kiếm vấn đề liên quan đến cơ chế ủy quyền của người dùng thì hãy tìm kiếm trong file log này. File log này giúp các bạn xác định được các lần thử đăng nhập thất bại hay kiểm tra các cuộc tấn công và các lỗ hổng liên quan đến cơ chế ủy quyền của người dùng.
/var/log/kern.log: Chứa các thông tin được ghi bởi kernel. Thông qua file log này giúp cho chúng ta có thể khắc phục các lỗi và cảnh báo liên quan đến kernel.
/var/log/wtmp: Chưa tất cả các đăng nhập và đăng xuất lịch sử
/var/log/boot.log : Lưu trữ tất cả thông tin liên quan đến khởi động và mọi thông báo được ghi lại trong quá trình khởi động bao gồm tập lệnh khởi tạo hệ thống, /etc/init.d/bootmisc.sh,… Chúng ta nên phân tích file log này để kiểm tra các vấn đề liên quan đến tắt máy không đúng cách, khởi động lại hoặc lỗi khởi động. Và cũng có thể hữu ích để xác định thời gian ngừng hoạt động của hệ thống do tắt máy đột xuất.
/var/log/dpkg.log: Lưu trữ thông tin các gói được cài đặt hoặc gỡ bỏ bằng lệnh dpkg
/var/log/faillog: chứa các thông tin người dùng đã đăng nhập thất bại. Chúng ta có thể sử dụng lệnh faillog để hiển thị nội dung của file. Nó là file log vô cùng hữu ích để chúng ta có thể tìm ra bất kỳ vi phạm bảo mật liên quan đến việc hack username hoặc passwrod của người dùng cừng như các cuộc tấn công.
/var/log/apt: ghi lại các sự kiện như cài đặt, gỡ cài đặt, cập nhật và nâng cấp các gói phần mềm trên hệ thống sử dụng APT. Thông tin chi tiết bao gồm tên gói, phiên bản, thời gian thực hiện hành động, và có thể bao gồm các thông báo lỗi liên quan đến quá trình quản lý gói
/var/log/apache2: chứa các file nhật ký (log files) của máy chủ web Apache. Apache là một trong những máy chủ web phổ biến nhất trên thế giới và được sử dụng rộng rãi để phục vụ các trang web và ứng dụng web. Một số file log:
- access.log: Đây là tệp log ghi lại thông tin về các yêu cầu HTTP đến máy chủ Apache, bao gồm địa chỉ IP của người dùng, thời gian yêu cầu được thực hiện, phương thức HTTP (GET, POST, vv.), URL được yêu cầu và mã trạng thái HTTP (ví dụ: 200, 404, 500).
- error.log: Tệp này ghi lại các thông báo lỗi từ máy chủ Apache, bao gồm các thông báo về lỗi cấu hình, lỗi kết nối, lỗi xử lý yêu cầu, và các vấn đề khác phát sinh trong quá trình hoạt động của máy chủ.
- other_vhosts_access.log: thường bao gồm các yêu cầu HTTP đến từ các tên miền cụ thể của các máy chủ ảo, bao gồm các thông tin giống như trong tệp access.log, chẳng hạn như địa chỉ IP của người dùng, thời gian yêu cầu, phương thức HTTP, URL được yêu cầu và mã trạng thái HTTP.
/var/log/syslog: là một file chính trên hệ thống Linux chứa các thông báo hệ thống từ các dịch vụ và quá trình khác nhau. Cung cấp thông tin quan trọng về hoạt động hệ thống bao gồm các thông báo về khởi động, tắt máy, lỗi hệ thống, ..vv
/var/log/lastlog: chứa thông tin về lần đăng nhập cuối cùng của tất cả các tài khoản người dùng trên hệ thống. Mỗi dòng trong tệp này thường tương ứng với một tài khoản người dùng và ghi lại thời gian và thông tin về lần đăng nhập cuối cùng của tài khoản đó.
1.2 Một số cách đọc file log
Để xem nội dung của một tệp nhật ký trên hệ thống Linux, bạn có thể sử dụng các trình soạn thảo văn bản hoặc các công cụ xem tệp nhật ký tích hợp sẵn. Dưới đây là một số phương pháp phổ biến:
1.2.1 Sử dụng lệnh cat:
cat /var/log/file.log
Lệnh cat sẽ hiển thị toàn bộ nội dung của tệp log trên màn hình.
Sử dụng lệnh less:
less /var/log/file.log
Lệnh less cho phép bạn xem nội dung của tệp log một cách tương tác. Bạn có thể cuộn lên, xuống, và tìm kiếm trong tệp log.
1.2.2 Sử dụng lệnh more:
more /var/log/file.log
Tương tự như less, lệnh more cũng cho phép bạn xem nội dung của tệp log một cách tương tác, nhưng có hạn chế hơn so với less.
1.2.3 Sử dụng trình soạn thảo văn bản như nano hoặc vi:
nano /var/log/file.log
vi /var/log/file.log
Bạn có thể sử dụng trình soạn thảo văn bản để xem và chỉnh sửa nội dung của tệp log. Trình soạn thảo nano thân thiện hơn với người mới bắt đầu, trong khi vi là một trình soạn thảo mạnh mẽ nhưng có độ khó sử dụng cao hơn.
1.2.4 Lệnh tail được sử dụng để hiển thị nội dung cuối cùng của một tệp.
tail /var/log/file.log
1.2.5 Trong khi đó, lệnh last được sử dụng để hiển thị danh sách các lần đăng nhập trước đó của người dùng trên hệ thống.
last -f /var/log/file.log
Lưu ý rằng để xem nội dung của một tệp log, bạn cần có quyền truy cập vào tệp đó. Nếu tệp log yêu cầu đặc quyền root để truy cập, bạn có thể cần sử dụng sudo hoặc đăng nhập với quyền root để xem nội dung.
2. Tổng quan về syslog
Syslog là viết tắt của System Logging là một giao thức client/server là giao thức dùng để chuyển log và thông điệp đến máy nhận log. Máy nhận log thường được gọi là syslogd, syslog daemon hoặc syslog server. Syslog có thể gửi qua UDP hoặc TCP. Các dữ liệu được gửi dạng cleartext. Syslog dùng port 514.
Ngoài ra Syslog còn là một gói phần mềm trong hệ thống Linux nhằm để ghi bản tin log của hệ thống trong quá trình hoạt động như của kernel, deamon, cron, auth, hoặc các ứng dụng chạy trên hệ thống như http, dns, dhcp, ntp,..
Syslog ban đầu sử dụng UDP, điều này là không đảm bảo cho việc truyền tin. Tuy nhiên sau đó IETF đã ban hành RFC 3195 (Đảm bảo tin cậy cho syslog) và RFC 6587 (Truyền tải thông báo syslog qua TCP). Điều này có nghĩa là ngoài UDP thì giờ đây syslog cũng đã sử dụng TCP để đảm bảo an toàn cho quá trình truyền tin.
Trong chuẩn syslog, mỗi thông báo đều được dán nhãn và được gán các mức độ nghiêm trọng khác nhau. Các loại phần mềm sau có thể sinh ra thông báo: auth, authPriv, daemon, cron, ftp, dhcp, kern, mail, syslog, user,… Với các mức độ nghiêm trọng từ cao nhất trở xuống Emergency, Alert, Critical, Error, Warning, Notice, Info, and Debug.
2.1 Các thành phần trong Syslog
Agent Syslog: agent Syslog là phần mềm hoặc phần cứng được cài đặt trên các thiết bị hoặc ứng dụng để thu thập thông điệp Syslog và gửi chúng đến máy chủ Syslog. Các thông điệp này có thể liên quan đến các sự kiện như lỗi, cảnh báo, thông tin hoạt động, và nhiều thông tin khác.
Máy chủ Syslog: máy chủ Syslog là trung tâm quản lý và giám sát, nơi thu thập thông điệp Syslog từ các agent và lưu trữ chúng. Máy chủ này cung cấp khả năng lọc, phân loại và lưu trữ thông điệp, cho phép người quản trị theo dõi và phân tích hoạt động hệ thống một cách hiệu quả.
Giao thức Syslog: giao thức Syslog thường sử dụng giao thức truyền thông UDP hoặc TCP để gửi thông điệp từ agent đến máy chủ Syslog. Giao thức này đảm bảo việc chuyển tải thông điệp một cách nhanh chóng và đáng tin cậy.
Cấu trúc thông điệp Syslog: mỗi thông điệp Syslog bao gồm hai phần chính: tiêu đề và nội dung. Tiêu đề chứa các thông tin như ưu tiên, thời gian và nguồn gốc của thông điệp. Nội dung chứa các thông tin chi tiết về hoạt động hoặc sự kiện mà thông điệp đại diện.
2.2 Cách Cấu Hình và Tận Dụng Syslog Tốt Nhất
2.2.1 Cài đặt Syslog trên hệ thống
Người quản trị có thể cài đặt và cấu hình máy chủ Syslog trên hệ thống của mình để bắt đầu ghi log.
2.2.2 Tích hợp Syslog với giải pháp giám sát
Syslog có thể tích hợp với các giải pháp giám sát hệ thống để cung cấp một cái nhìn toàn diện về hoạt động của hệ thống.
2.2.3 Xác định các mức ưu tiên Log
Bằng cách xác định và cấu hình mức ưu tiên log phù hợp, người quản trị có thể ưu tiên xử lý các thông điệp quan trọng hơn.
2.3 Định dạng tin nhắn Syslog
Định dạng tin nhắn Syslog sẽ bao gồm 3 phần đó là:
- PRI (giá trị ưu tiên được tính toán)
- HEADER (với thông tin nhận dạng)
- MSG (thông báo chính)
Với định dạng thông báo này, dữ liệu PRI được gửi qua giao thức nhật ký hệ thống “Syslog Protocol” đến từ hai giá trị số giúp phân loại thông báo. Đầu tiên là giá trị Facility value và là 15 giá trị được xác định trước hoặc các giá trị được xác định cục bộ khác nhau trong trường hợp từ 16 đến 23. Hiện nay, các giá trị này phân loại loại thông báo hoặc hệ thống nào đã tạo ra sự kiện.
Number | Facility |
0 | Kernel messages |
1 | User-level messages |
2 | Mail system |
3 | System daemons |
4 | Security messages |
5 | Messages geneted by syslogd |
6 | Line Printer Subsystem |
7 | Network News Subsystem |
8 | UUCP Subsystem |
9 | Clock Daemon |
10 | Security/Authorization Messages |
11 | FTP Daemon |
12 | NTP Subsystem |
13 | Log Audit |
14 | Log Alert |
15 | Clock Daemon |
16-23 | Local Use 0 – 7 |
2.4 Syslog gửi tin nhắn hoạt động như thế nào?
2.4.1 Chuyển tiếp nhật ký hệ thống là gì?
Chuyển tiếp nhật ký hệ thống (syslog forwarding) bao gồm gửi log máy khách đến một máy chủ từ xa để chúng được tập trung hóa, giúp phân tích log dễ dàng hơn.
Hầu hết thời gian, quản trị viên hệ thống không giám sát một máy duy nhất, nhưng họ phải giám sát hàng chục máy, tại chỗ và ngoài trang web.
Kết quả là, việc gửi nhật ký đến một máy ở xa, được gọi là máy chủ ghi log tập trung, sử dụng các giao thức truyền thông khác nhau như UDP hoặc TCP.
2.4.2 Syslog có sử dụng TCP hoặc UDP không?
Syslog ban đầu sử dụng UDP, điều này là không đảm bảo cho việc truyền tin. Tuy nhiên sau đó IETF đã ban hành RFC 3195 (Đảm bảo tin cậy cho syslog) và RFC 6587 (Truyền tải thông báo syslog qua TCP). Điều này có nghĩa là ngoài UDP thì giờ đây syslog cũng đã sử dụng TCP để đảm bảo an toàn cho quá trình truyền tin.
Syslog sử dụng port 514 cho UDP.
Tuy nhiên, trên các triển khai log hệ thống gần đây như rsyslog hoặc syslog-ng, bạn có thể sử dụng TCP làm kênh liên lạc an toàn.
Rsyslog sử dụng port 10514 cho TCP, đảm bảo rằng không có gói tin nào bị mất trên đường đi.
Bạn có thể sử dụng giao thức TLS/SSL trên TCP để mã hóa các gói Syslog của bạn, đảm bảo rằng không có cuộc tấn công trung gian nào có thể được thực hiện để theo dõi log của bạn.
3. Tổng quan về Rsyslog
Rsyslog là một hệ thống ghi nhật ký (log) mạnh mẽ và linh hoạt trên hệ điều hành Linux. Nó là một ứng dụng mã nguồn mở, được thiết kế để thu thập, xử lý và chuyển tiếp các dữ liệu nhật ký từ nhiều nguồn khác nhau trên hệ thống, từ các ứng dụng và dịch vụ đến hệ thống cấp thấp như kernel.
Một số điểm chính về Rsyslog:
- Thu thập dữ liệu nhật ký: Rsyslog có khả năng thu thập dữ liệu nhật ký từ nhiều nguồn khác nhau trên hệ thống, bao gồm các ứng dụng, dịch vụ, và hệ thống.
- Xử lý dữ liệu nhật ký: Nó cung cấp các tính năng mạnh mẽ để xử lý dữ liệu nhật ký, bao gồm lọc, chuẩn hóa, biến đổi và định tuyến dữ liệu theo các quy tắc cụ thể.
- Chuyển tiếp dữ liệu nhật ký: Rsyslog cho phép chuyển tiếp dữ liệu nhật ký đến các máy chủ từ xa, gửi dữ liệu nhật ký qua mạng, hoặc định tuyến dữ liệu theo các quy tắc cụ thể.
- Bảo mật: Nó hỗ trợ các tính năng bảo mật như mã hóa dữ liệu nhật ký và xác thực.
- Hiệu suất cao: Rsyslog được tối ưu hóa để đạt hiệu suất cao và xử lý lượng dữ liệu nhật ký lớn một cách hiệu quả.
- Mở rộng: Nó có khả năng mở rộng và tùy chỉnh thông qua các plug-in và tính năng mở rộng khác, cho phép tích hợp với các hệ thống và ứng dụng khác nhau.
Rsyslog thường được sử dụng trong môi trường máy chủ và hệ thống lớn để quản lý và giám sát dữ liệu nhật ký một cách hiệu quả. Nó cung cấp các công cụ và tính năng mạnh mẽ để quản lý dữ liệu nhật ký trên một hệ thống Linux.
3.1 Cơ chế hoạt động của Rsyslog
Hiện nay, Rsyslog thực hiện giao thức syslog cơ bản và sử dụng cơ chế TCP cho việc truyền tải log từ client tới server.
Rsyslog hiện nay chính là phần mềm được cài đặt sẵn trên hầu hết hệ thống Unix và các bản phân phối của Linux như là: Fedora, openSUSE, Debian, Ubuntu, Red Hat Enterprise Linux, FreeBSD…
Và Rsyslog cũng cung cấp tính năng lọc riêng cũng như tạo khuôn mẫu để định dạng dữ liệu sang định dạng tùy chỉnh.
3.2 File cấu hình Rsyslog
Đây chính là 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
Cơ bản trên file rsyslog.conf mặc định cho chúng ta thấy nơi lưu trữ các log tiến trình của hệ thống
Cấu hình trên được chia ra làm 2 trường:
Trường 1: Trường Seletor
- Trường Seletor : Chỉ ra nguồn tạo ra log và mức cảnh bảo của log đó.
- Trong trường seletor có 2 thành phần và được tách nhau bằng dấu “.“
Trường 2: Trường Action
- Trường Action:là trường để chỉ ra nơi lưu log của tiến trình đó. Có 2 loại là lưu tại file trong localhost hoặc gửi đến IP của máy chủ Log
Trong bài viết này, chúng ta đã tìm hiểu cơ bản về log, syslog và rsyslog trong Linux. Tầm quan trọng của nó trong việc duy trì hệ thống, cũng như cách nó giúp theo dõi hệ thống và phát hiện các vấn đề bảo mật.
Cảm ơn bạn đã đọc bài viết này. Nếu bạn có bất kỳ câu hỏi hoặc ý kiến đóng góp, đừng ngần ngại để lại bình luận bên dưới. Chúng ta hãy tiếp tục chia sẻ kiến thức và học hỏi từ nhau.