Phần 2: Cài các thành phần tham gia hệ thống SIEMS:
Giới thiệu về SIEMS và sản phẩm ELK:
Elastic Stack – trước đây được gọi là ELK Stack — là một bộ sưu tập phần mềm nguồn mở do Elastic sản xuất, cho phép bạn tìm kiếm, phân tích và trực quan hóa các nhật ký được tạo từ bất kỳ nguồn nào ở bất kỳ định dạng nào, một phương pháp được gọi là bộ log tập trung (centralized logging). Bộ log tập trung có thể hữu ích khi cố gắng xác định các sự cố với máy chủ hoặc ứng dụng của bạn vì nó cho phép bạn tìm kiếm trong tất cả các nhật ký của mình ở một nơi duy nhất. Nó cũng hữu ích vì nó cho phép bạn xác định các sự cố trải rộng trên nhiều máy chủ bằng cách so sánh nhật ký của chúng trong một khung thời gian cụ thể.
Elastic Stack có bốn thành phần chính:
- Elasticsearch: một công cụ tìm kiếm RESTful phân tán lưu trữ tất cả dữ liệu đã thu thập.
- Logstash: thành phần xử lý dữ liệu của Elastic Stack gửi dữ liệu đến tới Elaticsearch.
- Kibana: giao diện web để tìm kiếm và hiển thị nhật ký.
- Filebeat: bộ gửi dữ liệu đơn mục đích, nhẹ, có thể gửi dữ liệu từ hàng trăm hoặc hàng nghìn máy đến Logstash hoặc Elaticsearch.
Trong hướng dẫn này, chúng ta sẽ cài đặt Elastic Stack trên máy chủ Ubuntu 22.04. Chúng ta sẽ tìm hiểu cách cài đặt tất cả các thành phần của Elastic Stack — bao gồm Filebeat, một Filebeat được sử dụng để chuyển tiếp và tập trung nhật ký và tệp — đồng thời thiết lập cấu hình chúng để thu thập và trực quan hóa nhật ký hệ thống. Ngoài ra, vì Kibana thường chỉ khả dụng trên your_private_ip, chúng ta sẽ sử dụng Nginx để ủy quyền cho nó để nó có thể truy cập được qua trình duyệt web. Chúng ta sẽ cài đặt tất cả các thành phần này trên một máy chủ duy nhất mà chúng ta sẽ gọi là SIEMs.
Lưu ý: Khi cài đặt Elastic Stack, bạn phải sử dụng cùng một phiên bản trên toàn bộ ngăn xếp. Trong hướng dẫn này, chúng tôi sẽ cài đặt các phiên bản mới nhất của toàn bộ ngăn xếp, tại thời điểm viết bài này, Elaticsearch 7.7.1, Kibana 7.7.1, Logstash 7.7.1 và Filebeat 7.7.1.
Điều kiện tiên quyết
Để hoàn thành hướng dẫn này, bạn sẽ cần những điều sau đây:
- Máy chủ Ubuntu 20.04 có RAM 4GB và 2 CPU được thiết lập với non-root sudo user. Bạn có thể đạt được điều này bằng cách làm theo Thiết lập máy chủ ban đầu với Ubuntu 20.04. Đối với hướng dẫn này, chúng tôi sẽ làm việc với lượng CPU và RAM tối thiểu cần thiết để chạy Elaticsearch. Lưu ý rằng dung lượng CPU, RAM và dung lượng lưu trữ mà máy chủ Elaticsearch của bạn sẽ yêu cầu tùy thuộc vào khối lượng nhật ký mà bạn mong đợi.
- Đã cài đặt OpenJDK 11. Xem phần [Cài đặt JRE/JDK mặc định] của hướng dẫn Cách cài đặt Java với Apt trên Ubuntu 20.04 để thiết lập điều này.
- Nginx được cài đặt trên máy chủ của bạn, mà chúng tôi sẽ thiết lập cấu hình sau trong hướng dẫn này làm proxy ngược cho Kibana. Làm theo hướng dẫn của chúng tôi về Cách cài đặt Nginx trên Ubuntu 20.04 để thiết lập tính năng này.
Ngoài ra, vì Elastic Stack được sử dụng để truy cập thông tin có giá trị về máy chủ của bạn mà bạn không muốn người dùng trái phép truy cập, điều quan trọng là bạn phải giữ an toàn cho máy chủ của mình bằng cách cài đặt chứng chỉ TLS/SSL. Đây là tùy chọn nhưng được khuyến khích mạnh mẽ.
Tuy nhiên, vì cuối cùng bạn sẽ thực hiện các thay đổi đối với khối máy chủ Nginx của mình trong suốt hướng dẫn này, nên sẽ có ý nghĩa hơn nếu bạn hoàn thành hướng dẫn Let’s Encrypt trên Ubuntu 20.04 ở cuối bước thứ hai của hướng dẫn này. Với ý nghĩ đó, nếu bạn dự định thiết lập cấu hình Let’s Encrypt trên máy chủ của mình, bạn sẽ cần chuẩn bị những thứ sau trước khi thực hiện:
- Một tên miền đủ điều kiện (FQDN). Hướng dẫn này sẽ sử dụng your_domain xuyên suốt. Bạn có thể mua một tên miền trên CloudFly, nhận một tên miền miễn phí trên Freenom hoặc sử dụng công ty đăng ký tên miền mà bạn chọn.
- Cả hai bản ghi DNS sau được thiết lập cho máy chủ của bạn.
- Một bản ghi A với your_domain trỏ đến địa chỉ IP công cộng của máy chủ của bạn.
- Một bản ghi A với http://www.your_domain trỏ đến địa chỉ IP công cộng của máy chủ của bạn.
Install Elasticsearch, Logstash, Kibana and Filebeat
curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg –dearmor -o /usr/share/keyrings/elastic.gpg
echo “deb [signed-by=/usr/share/keyrings/elastic.gpg] https://artifacts.elastic.co/packages/7.x/apt stable main” | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
sudo apt update -y
sudo apt install elasticsearch
#ip address show command:
ip -brief address show
vim /etc/elasticsearch/elasticsearch.yml
Sửa thành
# Set the bind address to a specific IP (IPv4 or IPv6):
#
network.host: your_private_ip
sudo systemctl start elasticsearch
sudo systemctl enable elasticsearch
curl -X GET “your_private_ip:9200”
sudo apt install kibana
sudo systemctl enable kibana
systemctl start kibana
systemctl status kibana
Vì Kibana được thiết lập cấu hình để chỉ nghe trên your_private_ip nên chúng ta phải thiết lập proxy ngược để cho phép bên ngoài truy cập vào nó. Chúng ta sẽ sử dụng Nginx cho mục đích này, ứng dụng này đã được cài đặt trên máy chủ của bạn.
Đầu tiên, sử dụng lệnh openssl để tạo người dùng Kibana quản trị mà bạn sẽ sử dụng để truy cập giao diện web Kibana. Ví dụ: chúng ta sẽ đặt tên cho tài khoản này là kibanaadmin, nhưng để đảm bảo tính bảo mật cao hơn, khuyên bạn nên chọn một tên không chuẩn cho người dùng của mình mục tiêu tên đó trở lên khó đoán.
Lệnh sau sẽ tạo người dùng và mật khẩu Kibana quản trị, đồng thời lưu trữ chúng trong tệp htpasswd.users. Bạn sẽ thiết lập cấu hình Nginx để yêu cầu tên người dùng và mật khẩu này và đọc tệp này trong giây lát:
echo “kibanaadmin:’openssl passwd -apr1′” | sudo tee -a /etc/nginx/htpasswd.users
Như vậy trong file /etc/nginx/htpasswd.users sẽ có nội dung:
sudo apt install logstash
Sau khi cài đặt Logstash, bạn có thể chuyển sang cấu hình nó. Các tệp cấu hình của Logstash nằm trong thư mục /etc/logstash/conf.d. Để biết thêm thông tin về cú pháp cấu hình, bạn có thể xem tham chiếu cấu hình mà Elastic cung cấp. Khi bạn thiết lập cấu hình tệp, sẽ rất hữu ích khi coi Logstash như một đường dẫn lấy dữ liệu ở một đầu, xử lý dữ liệu theo cách này hay cách khác và gửi dữ liệu đó đến đích (trong trường hợp này, đích là Elaticsearch). Đường dẫn Logstash có hai phần tử bắt buộc là input và output, và một phần tử tùy chọn là filter. Các input plugin tiêu thụ dữ liệu từ một nguồn, các filter plugin xử lý dữ liệu và các output plugin ghi dữ liệu vào đích.
Tạo tệp cấu hình có tên 02-beats-input.conf nơi bạn sẽ thiết lập đầu vào Filebeat của mình:
sudo nano /etc/logstash/conf.d/02-beats-input.conf
input {
beats {
port = 5044
}
}
Tiếp theo, tạo một tệp cấu hình có tên 30-elasticsearch-output.conf:
sudo nano /etc/logstash/conf.d/30-elasticsearch-output.conf
Chèn cấu hình output sau. Về cơ bản, output này thiết lập cấu hình Logstash để lưu trữ dữ liệu Filebeats trong Elaticsearch, đang chạy ở your_private_ip:9200, trong một chỉ mục được đặt tên theo Filebeat được sử dụng. Filebeat được sử dụng trong hướng dẫn này là Filebeat:
sudo nano /etc/logstash/conf.d/30-elasticsearch-output.conf
output {
if [@metadata][pipeline] {
elasticsearch {
hosts = [“your_private_ip:9200”]
manage_template = false
index = “%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}”
pipeline = “%{[@metadata][pipeline]}”
}
} else {
elasticsearch {
hosts = [“your_private_ip:9200”]
manage_template = false
index = “%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}”
}
}
}
Lưu và đóng tập tin.
Kiểm tra cấu hình Logstash của bạn bằng lệnh này:
sudo -u logstash /usr/share/logstash/bin/logstash –path.settings /etc/logstash -t
Nếu không có lỗi cú pháp, đầu ra của bạn sẽ hiển thị Config Validation Result: OK. Exiting Logstash sau vài giây. Nếu bạn không thấy điều này trong đầu ra của mình, hãy kiểm tra xem có bất kỳ lỗi nào được ghi trong đầu ra của bạn không và cập nhật cấu hình của bạn để sửa chúng. Lưu ý rằng bạn sẽ nhận được các cảnh báo từ OpenJDK, nhưng chúng sẽ không gây ra bất kỳ sự cố nào và có thể bỏ qua.
Nếu quá trình kiểm tra cấu hình của bạn thành công, hãy bắt đầu và bật Logstash để các thay đổi cấu hình có hiệu lực:
sudo systemctl start logstash
sudo systemctl enable logstash
Bây giờ Logstash đang chạy chính xác và được thiết lập cấu hình đầy đủ, hãy cài đặt Filebeat.
Bước 4 – Cài đặt và thiết lập cấu hình Filebeat
Elastic Stack sử dụng một số trình gửi dữ liệu nhẹ được gọi là Filebeats để thu thập dữ liệu từ nhiều nguồn khác nhau và vận chuyển chúng đến Logstash hoặc Elaticsearch. Dưới đây là các Filebeat hiện có sẵn từ Elastic:
- Filebeat: thu thập và vận chuyển các tệp nhật ký.
- Metricbeat: thu thập số liệu từ các hệ thống và dịch vụ của bạn.
- Packetbeat: thu thập và phân tích dữ liệu mạng.
- Winlogbeat: thu thập nhật ký sự kiện Windows.
- Auditbeat: thu thập dữ liệu khung kiểm toán Linux và theo dõi tính toàn vẹn của tệp.
- Heartbeat: theo dõi các dịch vụ về tính khả dụng của chúng bằng tính năng thăm dò tích cực.
Trong hướng dẫn này, chúng tôi sẽ sử dụng Filebeat để chuyển tiếp các bản ghi cục bộ tới Elastic Stack của chúng tôi.
Cài đặt Filebeat bằng apt:
sudo apt install filebeat
Tiếp theo, thiết lập cấu hình Filebeat để kết nối với Logstash. Ở đây, chúng ta sẽ sửa đổi tệp cấu hình ví dụ đi kèm với Filebeat.
Lưu ý: Cũng như Elaticsearch, tệp cấu hình của Filebeat ở định dạng YAML. Điều này có nghĩa là việc thụt đầu dòng thích hợp là rất quan trọng, vì vậy hãy đảm bảo sử dụng cùng số lượng khoảng trắng được chỉ định trong các hướng dẫn này.
Filebeat hỗ trợ nhiều đầu ra, nhưng bạn thường chỉ gửi các sự kiện trực tiếp đến Elaticsearch hoặc Logstash để xử lý bổ sung. Trong hướng dẫn này, chúng tôi sẽ sử dụng Logstash để thực hiện xử lý bổ sung đối với dữ liệu do Filebeat thu thập. Filebeat sẽ không cần gửi trực tiếp bất kỳ dữ liệu nào đến Elaticsearch, vì vậy hãy vô hiệu hóa đầu ra đó. Để làm như vậy, hãy tìm phần output.elasticsearch và nhận xét các dòng sau bằng cách đặt trước chúng bằng dấu #:
Mở tệp cấu hình Filebeat:
sudo nano /etc/filebeat/filebeat.yml
tìm tới đoạn
#output.elasticsearch:
# Array of hosts to connect to.
#hosts: [“your_private_ip:9200”]
Sau đó, cấu hình phần output.logstash. Bỏ ghi chú các dòng output.logstash: và hosts: [“your_private_ip:5044”] bằng cách xóa dấu #. Thao tác này sẽ thiết lập cấu hình Filebeat để kết nối với Logstash trên máy chủ Elastic Stack của bạn tại cổng 5044, cổng mà chúng tôi đã chỉ định đầu vào Logstash trước đó:
output.logstash:
# The Logstash hosts
hosts: [“your_private_ip:5044”]
Lưu và đóng tập tin.
Chức năng của Filebeat có thể được mở rộng với các mô-đun Filebeat. Trong hướng dẫn này, chúng ta sẽ sử dụng mô-đun hệ thống, thu thập và phân tích cú pháp nhật ký được tạo bởi dịch vụ ghi nhật ký hệ thống của các bản phân phối Linux phổ biến.
Hãy kích hoạt nó:
sudo filebeat modules enable system
Nếu chúng ta gặp lỗi
Exiting: error unpacking config data: more than one namespace configured accessing ‘output’ (source:’filebeat.yml’)
while you already push logs to elasticsearch using logstash ?
I’m actually trying to understand if you need to send the same log 2 times in elastic ?
data –> filebeat –> logstash –> elastic
Bạn có thể xem danh sách các mô-đun đã bật và tắt bằng cách chạy:
sudo filebeat modules list
Bạn sẽ thấy một danh sách tương tự như sau:
Output
Enabled:
system
Disabled:
apache2
auditd
elasticsearch
icinga
iis
kafka
kibana
logstash
mongodb
mysql
nginx
osquery
postgresql
redis
traefik
…
Theo mặc định, Filebeat được thiết lập cấu hình để sử dụng các đường dẫn mặc định cho nhật ký hệ thống và nhật ký ủy quyền. Trong trường hợp của hướng dẫn này, bạn không cần thay đổi bất cứ điều gì trong cấu hình. Bạn có thể xem thông số của module trong file cấu hình sudo nano /etc/filebeat/modules.d/system.yml.
Tiếp theo, chúng ta cần thiết lập các quy trình nhập dữ liệu Filebeat, phân tích dữ liệu nhật ký trước khi gửi nó qua logstash tới Elaticsearch. Để tải đường ống dẫn nhập cho mô-đun hệ thống, hãy nhập lệnh sau:
sudo filebeat setup –pipelines –modules system
Tiếp theo, tải mẫu chỉ mục vào Elaticsearch. Elasticsearch index là một tập hợp các tài liệu có các đặc điểm tương tự. Các chỉ mục được xác định bằng một tên, được sử dụng để chỉ chỉ mục khi thực hiện các hoạt động khác nhau bên trong nó. Mẫu chỉ mục sẽ được tự động áp dụng khi một chỉ mục mới được tạo.
Để tải mẫu, sử dụng lệnh sau:
sudo filebeat setup –index-management -E output.logstash.enabled=false -E ‘output.elasticsearch.hosts=[“your_private_ip:9200”]’
Bạn sẽ nhận được đầu ra tương tự như sau:
Output
Index setup finished.
Filebeat đi kèm với bảng điều khiển Kibana mẫu cho phép bạn trực quan hóa dữ liệu Filebeat trong Kibana. Trước khi có thể sử dụng bảng thông tin, bạn cần tạo mẫu chỉ mục và tải bảng thông tin vào Kibana.
Khi bảng điều khiển tải, Filebeat kết nối với Elaticsearch để kiểm tra thông tin phiên bản. Để tải trang tổng quan khi bật Logstash, bạn cần tắt đầu ra Logstash và bật đầu ra Elaticsearch:
sudo filebeat setup -E output.logstash.enabled=false -E output.elasticsearch.hosts=[‘your_private_ip:9200’] -E setup.kibana.host=your_private_ip:5601
Bạn sẽ nhận được đầu ra tương tự như sau:
Output
Overwriting ILM policy is disabled. Set `setup.ilm.overwrite:true` for enabling.
Index setup finished.
Loading dashboards (Kibana must be running and reachable)
Loaded dashboards
Setting up ML using setup –machine-learning is going to be removed in 8.0.0. Please use the ML app instead.
See more: https://www.elastic.co/guide/en/elastic-stack-overview/current/xpack-ml.html
Loaded machine learning job configurations
Loaded Ingest pipelines
Bây giờ bạn có thể bắt đầu và kích hoạt Filebeat:
sudo systemctl start filebeat
sudo systemctl enable filebeat
Nếu bạn đã thiết lập chính xác Elastic Stack của mình, Filebeat sẽ bắt đầu gửi nhật ký hệ thống và nhật ký ủy quyền của bạn tới Logstash, sau đó sẽ tải dữ liệu đó vào Elaticsearch.
Để xác minh rằng Elaticsearch thực sự đang nhận dữ liệu này, hãy truy vấn chỉ mục Filebeat bằng lệnh này:
curl -XGET ‘http://your_private_ip:9200/filebeat-*/_search?pretty’
Nếu đầu ra của bạn hiển thị tổng số lần truy cập là 0, thì Elaticsearch không tải bất kỳ nhật ký nào trong chỉ mục bạn đã tìm kiếm và bạn sẽ cần xem lại thiết lập của mình để tìm lỗi. Nếu bạn nhận được đầu ra như mong đợi, hãy tiếp tục sang bước tiếp theo, trong đó chúng ta sẽ xem cách điều hướng qua một số bảng điều khiển của Kibana.
Bước 5 — Khám phá Bảng điều khiển Kibana
Hãy quay lại giao diện web Kibana mà chúng ta đã cài đặt trước đó.
Trong trình duyệt web, hãy truy cập $FQDN hoặc địa chỉ IP công cộng của máy chủ Elastic Stack của bạn. Nếu phiên của bạn bị gián đoạn, bạn sẽ cần nhập lại thông tin đăng nhập mà bạn đã xác định ở Bước 2. Sau khi đăng nhập, bạn sẽ nhận được trang chủ Kibana:
Nhấp vào liên kết Discover trong thanh điều hướng bên trái (bạn có thể phải nhấp vào biểu tượng Expand ở dưới cùng bên trái để xem các mục menu điều hướng). Trên trang Discover, chọn mẫu chỉ mục filebeat-* được xác định trước để xem dữ liệu Filebeat. Theo mặc định, điều này sẽ hiển thị cho bạn tất cả dữ liệu nhật ký trong 15 phút qua. Bạn sẽ thấy một biểu đồ với các sự kiện nhật ký và một số thông báo nhật ký bên dưới:
Tại đây, bạn có thể tìm kiếm và duyệt qua nhật ký của mình, đồng thời tùy chỉnh trang tổng quan của mình. Tuy nhiên, tại thời điểm này, sẽ không có nhiều thứ trong đó vì bạn chỉ đang thu thập các nhật ký hệ thống từ máy chủ Elastic Stack của mình.
Sử dụng bảng điều khiển bên trái để điều hướng đến trang Dashboard và tìm kiếm bảng điều khiển Filebeat System. Khi đó, bạn có thể chọn bảng điều khiển mẫu đi kèm với mô-đun system của Filebeat.
Ví dụ: bạn có thể xem số liệu thống kê chi tiết dựa trên thông báo nhật ký hệ thống của mình:
Bạn cũng có thể xem người dùng nào đã sử dụng lệnh sudo và khi nào:
Kibana có nhiều tính năng khác, chẳng hạn như vẽ đồ thị và lọc, vì vậy hãy thoải mái khám phá.
Bước 6 – Khi cần bổ sung các Plugin yml của các dạng Log như Windows Events (evtx)
Download: https://www.elastic.co/downloads/beats/winlogbeat
Tham khảo tài liệu: https://www.elastic.co/guide/en/beats/winlogbeat/current/index.html
- Open a PowerShell prompt as an Administrator (right-click on the PowerShell icon and select Run As Administrator).
Chạy 2 lệnh trước:
Set-ExecutionPolicy RemoteSigned
Set-ExecutionPolicy Unrestricted
- From the PowerShell prompt, run the following commands to install the service.
If script execution is disabled on your system, you need to set the execution policy for the current session to allow the script to run.
For example: PowerShell.exe -ExecutionPolicy UnRestricted -File .\install-service-winlogbeat.ps1.
Step 3: Configure Winlogbeat
In winlogbeat.yml, configure the event logs that you want to monitor.
Under winlogbeat.event_log, specify a list of event logs to monitor. By default, Winlogbeat monitors application, security, and system logs.
winlogbeat.event_logs:
(Optional) Set logging options to write Winlogbeat logs to a file:
logging.to_files: true
logging.files:
path: C:\ProgramData\winlogbeat\Logs
logging.level: info
After you save your configuration file, test it with the following command.
PS C:\Program Files\Winlogbeat> .\winlogbeat.exe test config -c .\winlogbeat.yml -e
Kết luận:
Trong hướng dẫn này, bạn đã học cách cài đặt và thiết lập cấu hình Elastic Stack để thu thập và phân tích nhật ký hệ thống. Hãy nhớ rằng bạn có thể gửi bất kỳ loại nhật ký hoặc dữ liệu được lập chỉ mục nào tới Logstash bằng Filebeats, nhưng dữ liệu thậm chí sẽ trở nên hữu ích hơn nếu được phân tích cú pháp và cấu trúc bằng bộ lọc Logstash, vì điều này chuyển đổi dữ liệu thành định dạng nhất quán có thể đọc được dễ dàng bởi Elaticsearch.