Cách tập trung log với Journald trên Debian 10
Nhật ký hệ thống là một thành phần cực kỳ quan trọng trong việc quản lý hệ thống Linux. Chúng cung cấp một cái nhìn sâu sắc vô giá về cách các hệ thống đang hoạt động và cũng như cách chúng đang được sử dụng vì ngoài lỗi, chúng còn ghi lại thông tin hoạt động như các sự kiện bảo mật. Cấu hình tiêu chuẩn cho hệ thống Linux là lưu trữ local log của chúng trên cùng một hệ thống nơi chúng xuất hiện. Điều này hoạt động đối với các hệ thống độc lập nhưng nhanh chóng trở thành vấn đề khi số lượng hệ thống tăng lên. Giải pháp để quản lý tất cả các log này là tạo một server ghi log tập trung, nơi mỗi server Linux gửi log của nó, trong thời gian thực, đến một server quản lý log chuyên dụng.Giải pháp ghi log tập trung cung cấp một số lợi ích so với việc lưu trữ log trên mỗi server :
- Giảm dung lượng ổ đĩa cần thiết trên mỗi server để lưu trữ các file log .
- Nhật ký có thể được lưu giữ lâu hơn vì server log chuyên dụng có thể được cấu hình với nhiều dung lượng lưu trữ hơn.
- Phân tích log nâng cao có thể được thực hiện yêu cầu log từ nhiều hệ thống và cũng có nhiều tài nguyên máy tính hơn có thể có trên server .
- Administrator hệ thống có thể truy cập log cho tất cả hệ thống của họ mà họ có thể không đăng nhập được trực tiếp vì lý do bảo mật.
Trong hướng dẫn này, bạn sẽ cấu hình một thành phần của bộ công cụ systemd để chuyển tiếp các thông báo log từ hệ thống khách hàng đến một server thu thập log tập trung. Bạn sẽ cấu hình server và client sử dụng certificate TLS để mã hóa thông báo log khi chúng được truyền qua các mạng không an toàn như internet và cũng để xác thực lẫn nhau.
Yêu cầu
Trước khi bắt đầu hướng dẫn này, bạn cần những thứ sau:
- Hai server Debian 10.
- User không phải root có quyền sudo trên cả hai server . Làm theo hướng dẫn Cài đặt Server Ban đầu với Debian 10 để biết hướng dẫn về cách thực hiện việc này. Bạn cũng nên cấu hình firewall UFW trên cả hai server như được giải thích trong hướng dẫn.
- Hai tên server trỏ đến server của bạn. Một tên server cho hệ thống máy khách tạo log và một tên khác cho server thu thập log . Tìm hiểu cách trỏ tên server tới DigitalOcean Server bằng cách tham khảo tài liệu Tên domain và DNS .
Hướng dẫn này sẽ sử dụng hai tên server mẫu sau:
-  client.your_domain: Hệ thống khách hàng tạo log .
-  server.your_domain: Server thu thập log .
Đăng nhập vào cả client và server trong các terminal riêng biệt thông qua SSH với quyền là user sudo không phải root để bắt đầu hướng dẫn này.
 Lưu ý : Trong suốt hướng dẫn, các khối lệnh được gắn nhãn với tên  server  ( máy khách hoặc  server  ) mà lệnh sẽ được chạy.
 Bước 1 - Cài đặt systemd-journal-remote
 Trong bước này, bạn sẽ cài đặt gói systemd-journal-remote trên máy khách và  server  . Gói này chứa các thành phần mà máy khách và  server  sử dụng để chuyển tiếp thông báo log .
Trước tiên, trên cả máy khách và server , hãy chạy bản cập nhật hệ thống đảm bảo rằng database gói và hệ thống hiện tại:
- sudo apt update 
- sudo apt upgrade 
Tiếp theo, cài đặt gói systemd-journal-remote :
- sudo apt install systemd-journal-remote 
Trên  server  , bật và khởi động hai thành phần systemd mà nó cần để nhận thông báo log  bằng lệnh sau:
- sudo systemctl enable --now systemd-journal-remote.socket 
- sudo systemctl enable systemd-journal-remote.service 
Tùy chọn --now trong lệnh đầu tiên khởi động các dịch vụ ngay lập tức. Bạn đã không sử dụng nó trong lệnh thứ hai vì dịch vụ này sẽ không bắt đầu cho đến khi nó có certificate  TLS, mà bạn sẽ tạo trong bước tiếp theo.
 Trên máy khách , kích hoạt thành phần mà systemd sử dụng để gửi thông báo log  đến  server :
- sudo systemctl enable systemd-journal-upload.service 
Tiếp theo, trên  server , mở cổng 19532 và 80 trong firewall  UFW. Điều này sẽ cho phép  server  nhận thông báo log  từ client . Cổng 80 là cổng mà certbot sẽ sử dụng để tạo certificate  TLS. Các lệnh sau sẽ mở các cổng này:
- sudo ufw allow in 19532/tcp 
- sudo ufw allow in 80/tcp 
Trên client , bạn chỉ cần mở cổng 80 bằng lệnh này:
- sudo ufw allow in 80/tcp 
 Đến đây bạn  đã cài đặt các thành phần cần thiết và hoàn thành cấu hình hệ thống cơ sở trên client  và  server . Trước khi bạn có thể  cấu hình  các thành phần này để bắt đầu chuyển tiếp thông báo log , bạn sẽ đăng ký certificate  Let's Encrypt TLS cho máy khách và  server  bằng tiện ích certbot .
Bước 2 - Cài đặt Certbot và Đăng ký Chứng chỉ
Let's Encrypt là Tổ chức phát hành certificate cung cấp certificate TLS miễn phí. Các certificate này cho phép các máy tính mã hóa dữ liệu gửi giữa chúng và cũng xác minh danh tính của nhau. Các certificate này là những gì cho phép bạn bảo mật duyệt Internet của bạn bằng HTTPS. Các certificate tương tự được dùng bởi bất kỳ ứng dụng nào khác muốn cùng mức độ bảo mật. Quá trình đăng ký certificate giống nhau cho dù bạn sử dụng chúng để làm gì.
 Trong bước này, bạn sẽ cài đặt tiện ích certbot và sử dụng nó để đăng ký certificate . Nó cũng sẽ tự động quan tâm đến việc gia hạn các certificate  khi chúng hết hạn. Quá trình đăng ký ở đây giống nhau trên máy khách và  server  . Bạn chỉ cần thay đổi tên  server  để  trùng với   server  lưu trữ mà bạn đang chạy lệnh đăng ký.
 Đầu tiên, cài đặt certbot và tiện ích curl trên cả hai  server :
- sudo apt install certbot curl 
 Đến đây bạn  đã cài đặt certbot , hãy chạy lệnh sau để đăng ký certificate  trên máy khách và  server  :
- sudo certbot certonly --standalone --agree-tos --email sammy@your_domain -d your_domain 
Các tùy chọn trong lệnh này có nghĩa như sau:
-  certonly: Đăng ký certificate và không thực hiện thay đổi nào khác trên hệ thống.
-  --standalone: Sử dụng web server tích hợp của certbot để xác minh certificate request .
-  --agree-tos: Tự động đồng ý với Điều khoản dịch vụ của Let's Encrypt.
-  --email your-email: Đây là địa chỉ email mà Let's Encrypt sẽ sử dụng để thông báo cho bạn về thời hạn certificate và các thông tin quan trọng khác.
-  -d your_domain: Tên server mà certificate sẽ được đăng ký. Điều này phải phù hợp với hệ thống mà bạn chạy nó.
Khi bạn chạy lệnh này, bạn sẽ được hỏi có muốn chia sẻ địa chỉ email với Let's Encrypt để họ có thể gửi email cho bạn tin tức và thông tin khác về công việc của họ hay không. Thực hiện việc này là tùy chọn, nếu bạn không chia sẻ địa chỉ email của bạn , việc đăng ký certificate sẽ vẫn hoàn thành bình thường.
 Khi quá trình đăng ký certificate  hoàn tất, quá trình này sẽ đặt certificate  và các file  khóa vào /etc/letsencrypt/live/ your_domain / trong đó your_domain là tên  server  mà bạn đã đăng ký certificate .
 Cuối cùng, bạn cần  download  bản sao của Let's Encrypt CA và các certificate  trung gian và đặt chúng vào cùng một file . journald sẽ sử dụng file  này để xác minh tính xác thực của các certificate  trên máy khách và  server  khi chúng giao tiếp với nhau.
 Lệnh sau sẽ  download  hai certificate  từ trang web Let's Encrypt và đặt chúng vào một file  duy nhất có tên letsencrypt-combined-certs.pem trong folder  chính của  user  của bạn.
Chạy lệnh này trên máy khách và server để download certificate và tạo file kết hợp:
- curl -s https://letsencrypt.org/certs/{isrgrootx1.pem.txt,letsencryptauthorityx3.pem.txt} > ~/letsencrypt-combined-certs.pem 
Tiếp theo, di chuyển file này vào folder Let's Encrypt chứa các certificate và khóa:
- sudo cp ~/letsencrypt-combined-certs.pem /etc/letsencrypt/live/your_domain/ 
Đến đây bạn đã đăng ký certificate và khóa. Trong bước tiếp theo, bạn sẽ cấu hình server thu thập log để bắt đầu lắng nghe và lưu trữ thông báo log từ máy khách .
Bước 3 - Cấu hình server
Trong bước này, bạn sẽ cấu hình server để sử dụng certificate và các file khóa mà bạn đã tạo ở bước cuối cùng để nó có thể bắt đầu chấp nhận thông báo log từ máy khách .
 systemd-journal-remote là thành phần lắng nghe thông báo log . Mở file  cấu hình của nó tại /etc/systemd/journal-remote.conf bằng editor  để bắt đầu  cấu hình  nó trên  server  :
- sudo nano /etc/systemd/journal-remote.conf 
Tiếp theo, bỏ ghi chú tất cả các dòng trong phần [Remote] và đặt các đường dẫn để trỏ đến file  TLS bạn vừa tạo:
[Remote] Seal=false SplitMode=host ServerKeyFile=/etc/letsencrypt/live/server.your_domain/privkey.pem ServerCertificateFile=/etc/letsencrypt/live/server.your_domain/fullchain.pem TrustedCertificateFile=/etc/letsencrypt/live/server.your_domain/letsencrypt-combined-certs.pem Đây là các tùy chọn bạn đã sử dụng ở đây:
-  Seal=false: Ký vào dữ liệu log trong log . Bật tính năng này nếu bạn cần bảo mật tối đa; nếu không, bạn có thể để nó làfalse.
-  SplitMode=host: Nhật ký từ các client từ xa sẽ được chia theo server trong/var/log/journal/remote. Nếu bạn muốn tất cả log được thêm vào một file duy nhất, hãy đặt giá trị này thànhSplitMode=false.
-  ServerKeyFile: Tệp private key của server .
-  ServerCertificateFile: Tệp certificate của server .
-  TrustedCertificateFile: Tệp chứa certificate Let's Encrypt CA.
 Bây giờ, bạn cần thay đổi quyền trên folder  Let's Encrypt có chứa certificate  và khóa để systemd-journal-remote có thể đọc và sử dụng chúng.
Trước tiên, hãy thay đổi các quyền để certificate và private key có thể đọc được:
- sudo chmod 0755 /etc/letsencrypt/{live,archive} 
- sudo chmod 0640 /etc/letsencrypt/live/server.your_domain/privkey.pem 
Tiếp theo, thay đổi quyền sở hữu  group  của private key  thành  group  của systemd-journal-remote :
- sudo chgrp systemd-journal-remote /etc/letsencrypt/live/server.your_domain/privkey.pem 
 Đến đây bạn  có thể khởi động systemd-journal-remote :
- sudo systemctl start systemd-journal-remote.service 
Server thu thập log của bạn hiện đang chạy và sẵn sàng bắt đầu chấp nhận thông báo log từ một ứng dụng client . Trong bước tiếp theo, bạn sẽ cấu hình máy khách để chuyển tiếp các bản ghi đến server thu thập của bạn.
Bước 4 - Cấu hình client
 Trong bước này, bạn sẽ cấu hình thành phần chuyển tiếp các thông báo log  đến  server  thu thập log . Thành phần này được gọi là systemd-journal-upload .
 Cấu hình mặc định cho systemd-journal-upload là nó sử dụng một  user  tạm thời chỉ tồn tại trong khi quá trình đang chạy. Điều này làm cho việc cho phép systemd-journal-upload để đọc các certificate  và khóa TLS trở nên phức tạp hơn. Để giải quyết vấn đề này, bạn sẽ tạo một  user  hệ thống mới có cùng tên với  user  tạm thời sẽ được sử dụng ở vị trí của nó.
 Đầu tiên, tạo  user  mới có tên systemd-journal-upload trên máy khách bằng lệnh adduser sau:
- sudo adduser --system --home /run/systemd --no-create-home --disabled-login --group systemd-journal-upload 
Các tùy chọn này cho lệnh là:
-  --system: Tạo user mới với quyền là user hệ thống. Điều này cung cấp cho user số UID (Mã định danh user ) dưới1000. Hơn1000UID thường được cấp cho các account user mà một người sẽ sử dụng để đăng nhập.
-  --home /run/systemd: Đặt/run/systemdlàm folder chính cho user này.
-  --no-create-home: Không tạo bộ folder chính vì nó đã tồn tại.
-  --disabled-login: User không thể đăng nhập vào server thông qua, ví dụ: SSH.
-  --group: Tạo một group có cùng tên với user .
Tiếp theo, đặt quyền và quyền sở hữu file certificate Let's Encrypt:
- sudo chmod 0755 /etc/letsencrypt/{live,archive} 
- sudo chmod 0640 /etc/letsencrypt/live/client.your_domain/privkey.pem 
- sudo chgrp systemd-journal-upload /etc/letsencrypt/live/client.your_domain/privkey.pem 
Bây giờ, hãy chỉnh sửa cấu hình cho systemd-journal-upload , tại /etc/systemd/journal-upload.conf . Mở file  này bằng editor :
- sudo nano /etc/systemd/journal-upload.conf 
Chỉnh sửa file này để nó trông giống như sau:
[Upload] URL=https://server.your_domain:19532 ServerKeyFile=/etc/letsencrypt/live/client.your_domain/privkey.pem ServerCertificateFile=/etc/letsencrypt/live/client.your_domain/fullchain.pem TrustedCertificateFile=/etc/letsencrypt/live/client.your_domain/letsencrypt-combined-certs.pem Cuối cùng, khởi động lại dịch vụ systemd-journal-upload để nó sử dụng cấu hình mới:
- sudo systemctl restart systemd-journal-upload.service 
Máy khách của bạn hiện đã được cài đặt và chạy và đang gửi thông báo log của nó đến server thu thập log . Trong bước tiếp theo, bạn sẽ kiểm tra xem các bản ghi đang được gửi và ghi lại một cách chính xác.
Bước 5 - Kiểm tra Máy khách và Server
Trong bước này, bạn sẽ kiểm tra xem máy khách có đang chuyển tiếp các thông báo log đến server và server có đang lưu trữ chúng một cách chính xác hay không.
  Server  thu thập log  lưu trữ log  từ các client  trong một folder  tại /var/log/journal/remote/ . Khi bạn khởi động lại  ứng dụng client  ở cuối bước cuối cùng, nó bắt đầu gửi thông báo log , do đó bây giờ có một file  log  trong /var/log/journal/remote/ . Tệp sẽ được đặt tên theo tên  server  mà bạn đã sử dụng cho certificate  TLS.
 Sử dụng ls để kiểm tra xem file  log  của  ứng dụng client  có trên  server  hay không :
- sudo ls -la /var/log/journal/remote/ 
Thao tác này sẽ in nội dung folder hiển thị file log :
Outputtotal 16620 drwxr-xr-x  2 systemd-journal-remote systemd-journal-remote     4096 Jun 30 16:17  . drwxr-sr-x+ 4 root                   systemd-journal            4096 Jun 30 15:55  .. -rw-r-----  1 systemd-journal-remote systemd-journal-remote 8388608 Jul  1 10:46 'remote-CN=client.your_domain' Tiếp theo, viết thông báo log  trên máy khách để kiểm tra xem  server  có đang nhận thông báo của client  như bạn mong đợi hay không. Bạn sẽ  sử dụng trình  ghi log  để tạo thông báo log  tùy chỉnh trên máy khách . Nếu mọi thứ đang hoạt động systemd-journal-upload sẽ chuyển tiếp thông báo này đến  server  .
 Trên máy khách, hãy chạy lệnh logger sau:
- sudo logger -p syslog.debug "### TEST MESSAGE from client.your_domain ###" 
-p syslog.debug trong lệnh này đặt cơ sở và mức độ nghiêm trọng của thông báo. Đặt điều này thành syslog.debug sẽ làm rõ đó là một thông báo thử nghiệm. Lệnh này sẽ ghi lại thông báo ### TEST MESSAGE from client.your_domain ### vào log  của khách hàng, sau đó systemd-journal-upload sẽ chuyển đến  server  .
 Tiếp theo, đọc file  log  của khách hàng trên  server  để kiểm tra xem các thông báo log  có đến từ máy khách hay không . Tệp này là file  log  binary  nên bạn sẽ không thể đọc nó bằng các công cụ như less . Thay vào đó, hãy đọc file  bằng journalctl với tùy chọn --file= cho phép bạn chỉ định file  tạp chí tùy chỉnh:
- sudo journalctl --file=/var/log/journal/remote/remote-CN=client.your_domain.journal 
Thông báo log sẽ xuất hiện như sau:
Test log message. . . Jun 29 13:10:09 client root[3576]: ### TEST MESSAGE from client.your_domain ### Server tập trung log của bạn hiện đang thu thập thành công log từ hệ thống khách hàng của bạn.
Kết luận
Trong bài viết này, bạn cài đặt một server thu thập log trung tâm và cấu hình một client để chuyển tiếp một bản sao của log hệ thống của nó đến server . Bạn có thể cấu hình bao nhiêu client mà bạn cần để chuyển tiếp thông báo đến server thu thập log bằng cách sử dụng các bước cấu hình client mà bạn đã sử dụng tại đây.
Các tin liên quan
 

