Cách cài đặt và cấu hình Suricata IDS cùng với Elastic Stack trên Rocky Linux 8

theanh

Administrator
Nhân viên
Suricata là một công cụ giám sát mạng kiểm tra và xử lý mọi gói lưu lượng internet chảy qua máy chủ của bạn. Công cụ này có thể tạo sự kiện nhật ký, kích hoạt cảnh báo và loại bỏ lưu lượng khi phát hiện bất kỳ hoạt động đáng ngờ nào.

Bạn có thể cài đặt Suricata trên một máy duy nhất để giám sát lưu lượng của máy đó hoặc triển khai trên máy chủ cổng để quét tất cả lưu lượng đến và đi từ các máy chủ khác được kết nối với máy đó. Bạn có thể kết hợp Suricata với Elasticsearch, Kibana và Filebeat để tạo công cụ Quản lý sự kiện và thông tin bảo mật (SIEM).

Trong hướng dẫn này, bạn sẽ cài đặt Suricata IDS cùng với ElasticStack trên máy chủ Rocky Linux 8. Các thành phần khác nhau của ngăn xếp là:
  • Elasticsearch để lưu trữ, lập chỉ mục, liên kết và tìm kiếm các sự kiện bảo mật từ máy chủ.
  • Kibana để hiển thị các bản ghi được lưu trữ trong Elasticsearch.
  • Filebeat để phân tích tệp nhật ký eve.json của Suricata và gửi từng sự kiện đến Elasticsearch để xử lý.
  • Suricata để quét lưu lượng mạng để tìm các sự kiện đáng ngờ và loại bỏ các gói không hợp lệ.
Hướng dẫn được chia thành hai phần, phần đầu tiên sẽ giải quyết vấn đề cài đặt và cấu hình Suricata, và phần thứ hai sẽ giải quyết vấn đề cài đặt và cấu hình Elastic Stack.

Chúng tôi sẽ cài đặt Suricata và Elastic stack trên các máy chủ khác nhau cho hướng dẫn của mình.

Điều kiện tiên quyết​


  • Các máy chủ lưu trữ Elastic Stack và Suricata phải có tối thiểu 4GB RAM và 2 lõi CPU.

  • Các máy chủ phải có thể giao tiếp với nhau bằng địa chỉ IP riêng.

  • Các máy chủ phải chạy Rocky Linux 8 với người dùng sudo không phải root.

  • Nếu bạn muốn truy cập bảng điều khiển Kibana từ mọi nơi, hãy thiết lập một miền (kibana.example.com) trỏ đến máy chủ nơi Suricata sẽ được cài đặt.

  • Cài đặt các gói thiết yếu trên cả hai máy chủ.
Mã:
$ sudo dnf install yum-utils nano curl

Cấu hình Tường lửa​

PHẦN 1​

Bước 1 - Cài đặt Suricata​

Để cài đặt Suricata, bạn cần thêm kho lưu trữ gói của Open Information Security Foundation (OISF) vào server.
Mã:
$ sudo dnf install 'dnf-command(copr)'$ sudo dnf copr enable @oisf/suricata-6.0
Lệnh đầu tiên kích hoạt các dự án Cộng đồng (copr) cho trình cài đặt gói dnf. Lệnh thứ hai kích hoạt và thêm kho lưu trữ OISF vào hệ thống của bạn. suricata-6.0 kích hoạt kho lưu trữ cho phiên bản ổn định mới nhất của phần mềm. Nhấn y và ENTER mỗi lần bạn được nhắc.

Tiếp theo, thêm kho lưu trữ EPEL.
Mã:
$ sudo dnf install epel-release
Cài đặt Suricata.
Mã:
$ sudo dnf install suricata
Kích hoạt dịch vụ Suricata.
Mã:
$ sudo systemctl enable suricata

Bước 2 - Cấu hình Suricata​

Suricata lưu trữ cấu hình của nó trong tệp /etc/suricata/suricata.yaml. Chế độ mặc định cho Suricata là Chế độ IDS (Hệ thống phát hiện xâm nhập), trong đó lưu lượng chỉ được ghi lại chứ không dừng lại. Nếu bạn mới sử dụng Suricata, bạn nên giữ nguyên chế độ này. Sau khi đã cấu hình và tìm hiểu thêm, bạn có thể bật chế độ IPS (Hệ thống phòng ngừa xâm nhập).

Bật ID cộng đồng​

Trường ID cộng đồng giúp dễ dàng liên kết dữ liệu giữa các bản ghi do các công cụ giám sát khác nhau tạo ra. Vì chúng ta sẽ sử dụng Suricata với Elasticsearch, việc bật Community ID có thể hữu ích.

Mở tệp /etc/suricata/suricata.yaml để chỉnh sửa.
Mã:
$ sudo nano /etc/suricata/suricata.yaml
Xác định vị trí dòng # Community Flow ID và đặt giá trị của biến community-id thành true.
Mã:
. . . # Community Flow ID # Thêm trường 'community_id' vào bản ghi EVE. Những trường này có nghĩa là cung cấp cho # bản ghi một ID luồng có thể dự đoán được, có thể được sử dụng để khớp các bản ghi với # đầu ra của các công cụ khác như Zeek (Bro). # # Lấy một 'hạt giống' cần giống nhau trên các cảm biến và công cụ # để làm cho id ít có thể dự đoán được hơn. # bật/tắt tính năng community id. community-id: true. . . trước>
Bây giờ, các sự kiện của bạn sẽ mang một ID như 1:S+3BA2UmrHK0Pk+u3XH78GAFTtQ= mà bạn có thể sử dụng để khớp các tập dữ liệu trên nhiều công cụ giám sát khác nhau.
[HEADING=3]Chọn Giao diện Mạng[/HEADING]
Tệp cấu hình Suricata mặc định sẽ kiểm tra lưu lượng trên giao diện thiết bị/mạng eth0. Nếu máy chủ của bạn sử dụng giao diện mạng khác, bạn sẽ cần cập nhật giao diện đó trong cấu hình.

Kiểm tra tên thiết bị của giao diện mạng bằng lệnh sau.

$ ip -p -j route show default
Bạn sẽ nhận được đầu ra như sau.
Mã:
[ { "dst": "default", "gateway": "164.90.192.1", "dev": "eth0", "protocol": "static", "metric": 100, "flags": [ ] } ]
Biến dev tham chiếu đến thiết bị mạng. Trong đầu ra của chúng tôi, nó hiển thị eth0 là thiết bị mạng. Đầu ra của bạn có thể khác nhau tùy thuộc vào hệ thống của bạn.

Bây giờ bạn đã biết tên thiết bị của mình, hãy mở tệp cấu hình.
Mã:
$ sudo nano /etc/suricata/suricata.yaml
Tìm dòng af-packet: quanh dòng số 580. Bên dưới dòng đó, hãy đặt giá trị của biến interface thành tên thiết bị cho hệ thống của bạn.
Mã:
# Hỗ trợ chụp tốc độ cao của Linuxaf-packet: - interface: eth0 # Số luồng nhận. "auto" sử dụng số lõi #threads: auto # Clusterid mặc định. AF_PACKET sẽ cân bằng tải các gói dựa trên luồng. cluster-id: 99. . .
Nếu bạn muốn thêm các giao diện bổ sung, bạn có thể thực hiện bằng cách thêm chúng vào cuối phần af-packet ở khoảng dòng 650.

Để thêm giao diện mới, hãy chèn giao diện đó ngay phía trên phần - interface: default như hiển thị bên dưới.
Mã:
# Đối với thiết lập eBPF và XDP bao gồm bỏ qua, lọc và cân bằng tải, vui lòng # xem doc/userguide/capture-hardware/ebpf-xdp.rst để biết thêm thông tin. - interface: enp0s1 cluster-id: 98... - interface: default #threads: auto #use-mmap: no #tpacket-v3: yes
Chúng tôi đã thêm một giao diện mới enp0s1 và một giá trị duy nhất cho biến cluster-id trong ví dụ của chúng tôi. Bạn cần bao gồm một ID cụm duy nhất với mọi giao diện bạn thêm vào.

Live Rule Reload​

Bạn cần khởi động lại Suricata mỗi khi thêm, xóa và chỉnh sửa các quy tắc của nó. Bằng cách bật Live Rule, Suricata có thể xử lý mọi thay đổi quy tắc mà không cần khởi động lại.

Để bật tính năng tải lại trực tiếp, hãy thêm các dòng sau vào cuối tệp cấu hình.
Mã:
. . .detect-engine: - rule-reload: true
Khi bật tính năng tải lại trực tiếp, bạn có thể sử dụng lệnh sau để tải lại các quy tắc mà không cần khởi động lại quy trình Suricata.
Mã:
$ sudo kill -usr2 $(pidof suricata)
Cờ $(pidof suricata) định vị ID quy trình của quy trình Suricata. Phần -usr2 của lệnh kill gửi tín hiệu SIGUSR2 đến quy trình Suricata. Tín hiệu SIGUSR2 được cấu hình với Suricata để tải lại các quy tắc.

Sau khi hoàn tất, hãy lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Cấu hình quyền thư mục​

Suricata đã tự động tạo một người dùng và nhóm hệ thống có tên suricata trong quá trình cài đặt. Bạn cần cấp quyền thư mục thích hợp để cài đặt hoạt động bình thường.

Chạy lệnh sau để đặt suricata làm nhóm cho các thư mục của Suricata.
Mã:
$ sudo chgrp -R suricata /etc/suricata$ sudo chgrp -R suricata /var/lib/suricata/rules$ sudo chgrp -R suricata /var/lib/suricata/update$ sudo chgrp -R suricata /var/log/suricata
Đặt quyền nhóm để đọc và ghi.
Mã:
$ sudo chmod -R g+r /etc/suricata/$ sudo chmod -R g+rw /var/lib/suricata/rules$ sudo chmod -R g+rw /var/lib/suricata/update$ sudo chmod -R g+rw /var/log/suricata
Thêm tên người dùng hiện tại của bạn vào nhóm suricata để bạn có thể thực hiện các thao tác trực tiếp mà không cần sudo.
Mã:
$ sudo usermod -a -G suricata $USER
Để áp dụng tư cách thành viên nhóm mới, hãy đăng xuất khỏi máy chủ và đăng nhập lại hoặc nhập lệnh sau:
Mã:
$ su - ${USER}
Bạn sẽ được nhắc nhập mật khẩu người dùng để tiếp tục.

Xác nhận rằng người dùng của bạn hiện đã được thêm vào nhóm suricata bằng cách nhập:
Mã:
$ id -nGusername sudo suricata

Bước 3 - Cấu hình Quy tắc Suricata​

Theo mặc định, Suricata chỉ sử dụng một bộ quy tắc giới hạn để phát hiện lưu lượng mạng. Bạn có thể thêm nhiều bộ quy tắc hơn từ các nhà cung cấp bên ngoài bằng công cụ có tên là suricata-update. Chạy lệnh sau để bao gồm các quy tắc bổ sung.
Mã:
$ suricata-update16/2/2022 -- 07:00:16 -  -- Sử dụng thư mục dữ liệu /var/lib/suricata.16/2/2022 -- 07:00:16 -  -- Sử dụng cấu hình Suricata /etc/suricata/suricata.yaml16/2/2022 -- 07:00:16 -  -- Sử dụng /usr/share/suricata/rules cho các quy tắc do Suricata cung cấp......16/2/2022 -- 07:00:16 -  -- Không có nguồn nào được cấu hình, sẽ sử dụng Emerging Threats Open('https://rules.emergingthreats.net/open/suricata-6.0.4/emerging.rules.tar.gz', Không có, Đúng)16/2/2022 -- 07:00:16 -  -- Đang kiểm tra https://rules.emergingthreats.net/open/suricata-6.0.4/emerging.rules.tar.gz.md5.16/2/2022 -- 07:00:16 -  -- Đang tìm nạp https://rules.emergingthreats.net/open/suricata-6.0.4/emerging.rules.tar.gz. 100% - 3162050/3162050.....16/2/2022 -- 07:00:23 -  -- Đang viết các quy tắc vào /var/lib/suricata/rules/suricata.rules: tổng số: 32004; đã bật: 24611; đã thêm: 8; đã xóa 1; đã sửa đổi: 121816/2/2022 -- 07:00:23 -  -- Đang viết /var/lib/suricata/rules/classification.config16/2/2022 -- 07:00:23 -  -- Đang thử nghiệm với suricata -T.16/2/2022 -- 07:01:16 -  -- Hoàn tất.

Thêm Nhà cung cấp Bộ quy tắc​

Bạn có thể mở rộng các quy tắc của Suricata bằng cách thêm nhiều nhà cung cấp hơn. Nó có thể lấy các quy tắc từ nhiều nhà cung cấp miễn phí và thương mại.

Bạn có thể liệt kê danh sách nhà cung cấp mặc định bằng cách sử dụng lệnh sau.
Mã:
$ suricata-update list-sources
Ví dụ: nếu bạn muốn bao gồm bộ quy tắc tgreen/hunting, bạn có thể bật nó bằng lệnh sau.
Mã:
$ suricata-update enable-source tgreen/hunting
Chạy lại lệnh suricata-update để tải xuống và cập nhật các quy tắc mới.

Bước 4 - Xác thực cấu hình Suricata​

Suricata đi kèm với một công cụ xác thực để kiểm tra tệp cấu hình và các quy tắc xem có lỗi không. Chạy lệnh sau để chạy công cụ xác thực.
Mã:
$ sudo suricata -T -c /etc/suricata/suricata.yaml -v22/2/2022 -- 23:20:10 -  - Đang chạy suricata ở chế độ thử nghiệm22/2/2022 -- 23:20:10 -  - Đây là Suricata phiên bản 6.0.4 PHÁT HÀNH đang chạy ở chế độ HỆ THỐNG22/2/2022 -- 23:20:10 -  - CPU/lõi trực tuyến: 222/2/2022 -- 23:20:10 -  - bỏ chữ hoa cho luồng chính22/2/2022 -- 23:20:10 -  - thiết bị đầu ra nhanh (thông thường) đã khởi tạo: fast.log22/2/2022 -- 23:20:10 -  - thiết bị đầu ra eve-log (thông thường) đã khởi tạo: eve.json22/2/2022 -- 23:20:10 -  - thiết bị đầu ra stats (thông thường) đã khởi tạo: stats.log22/2/2022 -- 23:20:21 -  - 1 tệp quy tắc đã xử lý. 24611 quy tắc đã tải thành công, 0 quy tắc không tải được22/2/2022 -- 23:20:21 -  - Đã phân tích cấu hình ngưỡng: Đã tìm thấy 0 quy tắc22/2/2022 -- 23:20:21 -  - Đã xử lý 24614 chữ ký. 1216 là các quy tắc chỉ dành cho IP, 4120 đang kiểm tra tải trọng gói tin, 19074 đang kiểm tra lớp ứng dụng, 108 chỉ là sự kiện bộ giải mã22/2/2022 -- 23:21:02 -  - Cấu hình được cung cấp đã được tải thành công. Đang thoát.22/2/2022 -- 23:21:03 -  - đang dọn dẹp cấu trúc nhóm chữ ký... hoàn tất
Cờ -T hướng dẫn Suricata chạy ở chế độ thử nghiệm, cờ -c định cấu hình vị trí của tệp cấu hình và cờ -v in đầu ra chi tiết của lệnh. Tùy thuộc vào cấu hình hệ thống của bạn và số lượng quy tắc được thêm vào, lệnh có thể mất vài phút để hoàn tất.

Bước 5 - Chạy Suricata​

Bây giờ Suricata đã được cấu hình và thiết lập, đã đến lúc chạy ứng dụng.
Mã:
$ sudo systemctl start suricata
Kiểm tra trạng thái của quy trình.
Mã:
$ sudo systemctl status suricata
Bạn sẽ thấy đầu ra sau nếu mọi thứ hoạt động bình thường.
Mã:
? suricata.service - Dịch vụ phát hiện xâm nhập Suricata Đã tải: đã tải (/usr/lib/systemd/system/suricata.service; đã bật; cài đặt trước của nhà cung cấp: đã tắt) Đang hoạt động: đang hoạt động (đang chạy) kể từ Thứ 4, ngày 16 tháng 2 năm 2022 lúc 07:14:22 UTC; 32 phút trước Tài liệu: man:suricata(1) Quy trình: 1494 ExecStartPre=/bin/rm -f /var/run/suricata.pid (code=exited, status=0/SUCCESS) PID chính: 1496 (Suricata-Main) Nhiệm vụ: 8 (giới hạn: 23479) Bộ nhớ: 367,5M CGroup: /system.slice/suricata.service ??1496 /sbin/suricata -c /etc/suricata/suricata.yaml --pidfile /var/run/suricata.pid -i eth0 --user suricata16/02 07:14:22 suricata systemd[1]: Đang khởi động Dịch vụ phát hiện xâm nhập Suricata...16/02 07:14:22 suricata systemd[1]: Đã khởi động Dịch vụ phát hiện xâm nhập Suricata.
Quy trình có thể mất vài phút để hoàn tất việc phân tích tất cả các quy tắc. Do đó, kiểm tra trạng thái ở trên không phải là dấu hiệu đầy đủ cho thấy Suricata đã hoạt động và sẵn sàng hay chưa. Bạn có thể theo dõi tệp nhật ký để biết điều đó bằng lệnh sau.
Mã:
$ sudo tail -f /var/log/suricata/suricata.log
Nếu bạn thấy dòng sau trong tệp nhật ký, điều đó có nghĩa là Suricata đang chạy và sẵn sàng theo dõi lưu lượng mạng.
Mã:
16/02/2022 -- 07:18:39 -  - Tất cả các luồng chụp AFP đều đang chạy.

Bước 6 - Kiểm tra các quy tắc Suricata​

Chúng tôi sẽ kiểm tra xem Suricata có phát hiện bất kỳ lưu lượng đáng ngờ nào không. Hướng dẫn của Suricata khuyên bạn nên kiểm tra số quy tắc ET Open 2100498 bằng lệnh sau.
Mã:
$ curl http://testmynids.org/uid/index.html
Bạn sẽ nhận được phản hồi sau.
Mã:
uid=0(root) gid=0(root) groups=0(root)
Lệnh trên giả vờ trả về đầu ra của lệnh id có thể chạy trên hệ thống bị xâm phạm. Để kiểm tra xem Suricata có phát hiện lưu lượng truy cập hay không, bạn cần kiểm tra tệp nhật ký bằng số quy tắc đã chỉ định.
Mã:
$ grep 2100498 /var/log/suricata/fast.log
Nếu yêu cầu của bạn sử dụng IPv6, bạn sẽ thấy đầu ra sau.
Mã:
02/22/2022-23:24:33.997371 [**] [1:2100498:7] GPL ATTACK_RESPONSE id kiểm tra trả về root [**] [Phân loại: Lưu lượng truy cập có khả năng xấu] [Ưu tiên: 2] {TCP} 2600:9000:2204:5c00:0018:30b3:e400:93a1:80 -> 2a03:b0c0:0002:00d0:0000:0000:0fc2:b001:41468
Nếu yêu cầu của bạn sử dụng IPv4, bạn sẽ thấy kết quả sau.
Mã:
22/02/2022-23:21:46.783476 [**] [1:2100498:7] Kiểm tra id GPL ATTACK_RESPONSE trả về root [**] [Phân loại: Lưu lượng truy cập có khả năng xấu] [Mức độ ưu tiên: 2] {TCP} 204.246.178.81:80 -> 164.90.192.1:36364
Suricata cũng ghi nhật ký các sự kiện vào tệp /var/log/suricata/eve.log bằng định dạng JSON. Để đọc và diễn giải các quy tắc đó, bạn cần cài đặt jq nằm ngoài phạm vi của hướng dẫn này.

Chúng ta đã hoàn thành phần một của hướng dẫn, trong đó chúng ta đã cài đặt Suricata và thử nghiệm nó. Phần tiếp theo liên quan đến việc cài đặt ngăn xếp ELK và thiết lập nó để trực quan hóa Suricata và các bản ghi của nó. Phần hai của hướng dẫn này được cho là sẽ được thực hiện trên máy chủ thứ hai trừ khi có chỉ định khác.

Bước 7 - Cài đặt Elasticsearch và Kibana​

Bước đầu tiên trong quá trình cài đặt Elasticsearch bao gồm việc thêm khóa Elastic GPG vào máy chủ của bạn.
Mã:
$ sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
Tạo kho lưu trữ cho gói Elasticsearch bằng cách tạo và mở tệp /etc/yum/yum.repos.d/elasticsearch.repo để chỉnh sửa.
Mã:
$ sudo nano /etc/yum.repos.d/elasticsearch.repo
Dán mã sau vào đó.
Mã:
[elasticsearch]name=Kho lưu trữ Elasticsearch cho 7.x packagesbaseurl=https://artifacts.elastic.co/packages/7.x/yumgpgcheck=1gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearchenabled=0autorefresh=1type=rpm-md
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Cài đặt Elasticsearch và Kibana.
Mã:
$ sudo dnf install --enablerepo=elasticsearch elasticsearch kibana
Bạn cần sử dụng cờ --enablerepo=elasticsearchmỗi lần kể từ đó, chúng tôi đã giữ kho lưu trữ ở chế độ vô hiệu hóa theo mặc định. Điều này ngăn chặn việc nâng cấp ngẫu nhiên các gói này.

Xác định vị trí địa chỉ IP riêng của máy chủ của bạn bằng lệnh sau.
Mã:
$ ip -brief address showlo UNKNOWN 127.0.0.1/8 ::1/128eth0 UP 164.90.205.77/20 10.18.0.7/16 2a03:b0c0:2:d0::fef:b001/64 fe80::340a:6eff:fe5c:76ed/64eth1 UP 10.133.0.3/16 fe80::906f:b5ff:fec4:c7b8/64
Ghi lại IP riêng của máy chủ của bạn (trong trường hợp này là 10.133.0.3). Chúng tôi sẽ gọi nó là your_private_IP. Địa chỉ IP công khai của máy chủ (164.90.205.77) sẽ được gọi là your_public_IP trong phần hướng dẫn còn lại. Ngoài ra, hãy ghi lại tên mạng của máy chủ của bạn, eth1.

Bước 8 - Cấu hình Elasticsearch​

Elasticsearch lưu trữ cấu hình của nó trong tệp /etc/elasticsearch/elasticsearch.yml. Mở tệp để chỉnh sửa.
Mã:
$ sudo nano /etc/elasticsearch/elasticsearch.yml
Theo mặc định, Elasticsearch chỉ chấp nhận các kết nối cục bộ. Chúng ta cần thay đổi nó để Kibana có thể truy cập nó qua địa chỉ IP riêng.

Tìm dòng #network.host: 192.168.0.1 và thêm dòng sau ngay bên dưới dòng đó, như hiển thị bên dưới.
Mã:
# Theo mặc định, Elasticsearch chỉ có thể truy cập được trên máy chủ cục bộ. Đặt một địa chỉ# khác tại đây để hiển thị nút này trên mạng:##network.host: 192.168.0.1network.bind_host: ["127.0.0.1", "your_private_IP"]## Theo mặc định, Elasticsearch lắng nghe lưu lượng HTTP trên cổng miễn phí đầu tiên mà nó# tìm thấy bắt đầu từ 9200. Đặt một cổng HTTP cụ thể tại đây:
Điều này sẽ đảm bảo rằng Elastic vẫn có thể chấp nhận các kết nối cục bộ trong khi vẫn khả dụng với Kibana qua địa chỉ IP riêng.

Bước tiếp theo là bật một số tính năng bảo mật và đảm bảo rằng Elastic được định cấu hình để chạy trên một nút duy nhất. Để thực hiện điều đó, hãy thêm các dòng sau vào cuối tệp.
Mã:
. . .discovery.type: single-nodexpack.security.enabled: true
Nếu bạn định sử dụng nhiều nút Elastic search, bạn có thể bỏ dòng đầu tiên.

Sau khi hoàn tất, hãy lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Cấu hình Tường lửa​

Thêm các quy tắc tường lửa phù hợp cho Elasticsearch để có thể truy cập qua mạng riêng.
Mã:
$ sudo firewall-cmd --permanent --zone=internal --change-interface=eth1$ sudo firewall-cmd --permanent --zone=internal --add-service=elasticsearch$ sudo firewall-cmd --permanent --zone=internal --add-service=kibana$ sudo firewall-cmd --reload
Đảm bảo bạn chọn tên giao diện trong lệnh đầu tiên giống như tên bạn nhận được từ bước 7. Các lệnh trên thay đổi vùng mặc định của Tường lửa tới các cổng nội bộ và mở 9200, 9300 cho Elasticsearch và cổng 5601 cho Kibana.

Khởi động Elasticsearch​

Bây giờ bạn đã cấu hình Elasticsearch, đã đến lúc khởi động dịch vụ.
Mã:
$ sudo systemctl start elasticsearch

Tạo mật khẩu Elasticsearch​

Sau khi bật cài đặt bảo mật của Elasticsearch, bước tiếp theo là tạo một số mật khẩu cho người dùng mặc định. Elasticsearch đi kèm với tiện ích tạo mật khẩu tại /usr/share/elasticsearch/bin/elasticsearch-setup-passwords có thể tạo mật khẩu ngẫu nhiên.

Tạo mật khẩu.
Mã:
$ cd /usr/share/elasticsearch/bin$ sudo ./elasticsearch-setup-passwords auto
Bạn sẽ nhận được kết quả như sau. Nhấn y để tiếp tục khi được nhắc.
Mã:
Khởi tạo thiết lập mật khẩu cho người dùng đã đặt trước elastic,apm_system,kibana,kibana_system,logstash_system,beats_system,remote_monitoring_user.Mật khẩu sẽ được tạo ngẫu nhiên và in ra bảng điều khiển.Vui lòng xác nhận rằng bạn muốn tiếp tục [y/N]yĐã thay đổi mật khẩu cho người dùng apm_systemMẬT KHẨU apm_system = EtwMg8maU67o5tvD5rseĐã thay đổi mật khẩu cho người dùng kibana_systemMẬT KHẨU kibana_system = dTanR7Q2HtgDtATRvuJvĐã thay đổi mật khẩu cho người dùng kibanaMẬT KHẨU kibana = dTanR7Q2HtgDtATRvuJvĐã thay đổi mật khẩu cho người dùng logstash_systemMẬT KHẨU logstash_system = XGSjxNktuNMWVfGYiboxĐã thay đổi mật khẩu cho người dùng beats_systemMẬT KHẨU beats_system = JXTr7CeHkMue608qVTQaĐã thay đổi mật khẩu cho người dùng remote_monitoring_userMẬT KHẨU remote_monitoring_user = Q6JTJNl3lPy0fhy6QuMPĐã thay đổi mật khẩu cho người dùng elasticMẬT KHẨU elastic = bd1YJfhSa8RC8SMvTIwg
Bạn chỉ có thể chạy tiện ích một lần, vì vậy hãy lưu tất cả mật khẩu ở một vị trí an toàn.

Bước 9 - Cấu hình Kibana​

Bước đầu tiên trong quá trình cấu hình Kibana là bật chức năng bảo mật xpack bằng cách tạo khóa bí mật. Kibana sử dụng các khóa bí mật này để lưu trữ dữ liệu trong Elasticsearch. Tiện ích tạo khóa bí mật có thể được truy cập từ thư mục /usr/share/kibana/bin.
Mã:
$ cd /usr/share/kibana/bin/$ sudo ./kibana-encryption-keys generate -q --force
Cờ -q sẽ ngăn chặn các lệnh hướng dẫn và cờ --force đảm bảo các bí mật mới được tạo ra. Bạn sẽ nhận được kết quả như sau.
Mã:
xpack.encryptedSavedObjects.encryptionKey: 0f4e5e1cf8fad1874ffed0faac6be0daxpack.reporting.encryptionKey: d435c78a4e37521e539c0e905420c9f5xpack.security.encryptionKey: 7ba0e2a02747bb90fb0f9a3c267b99ed
Sao chép kết quả. Mở tệp cấu hình Kibana tại /etc/kibana/kibana.yml để chỉnh sửa.
Mã:
$ sudo nano /etc/kibana/kibana.yml
Dán mã từ lệnh trước đó vào cuối tệp.
Mã:
. . .# Chỉ định ngôn ngữ được sử dụng cho tất cả các chuỗi, ngày tháng và định dạng số có thể bản địa hóa.# Các ngôn ngữ được hỗ trợ là: Tiếng Anh - en, theo mặc định là tiếng Trung - zh-CN.#i18n.locale: "en"xpack.encryptedSavedObjects.encryptionKey: 0f4e5e1cf8fad1874ffed0faac6be0daxpack.reporting.encryptionKey: d435c78a4e37521e539c0e905420c9f5xpack.security.encryptionKey: 7ba0e2a02747bb90fb0f9a3c267b99ed

Cấu hình Cổng Kibana​

Cần cấu hình Kibana sao cho có thể truy cập được trên địa chỉ IP riêng của máy chủ. Tìm dòng #server.host: "localhost" trong tệp và thêm dòng sau ngay bên dưới như hiển thị.
Mã:
# Kibana được phục vụ bởi máy chủ phụ trợ. Thiết lập này chỉ định cổng sử dụng.#server.port: 5601# Chỉ định địa chỉ mà máy chủ Kibana sẽ liên kết. Địa chỉ IP và tên máy chủ đều là giá trị hợp lệ.# Mặc định là 'localhost', thường có nghĩa là máy từ xa sẽ không thể kết nối.# Để cho phép kết nối từ người dùng từ xa, hãy đặt tham số này thành địa chỉ không phải vòng lặp.#server.host: "localhost"server.host: "your_private_IP"
Sau khi hoàn tất, hãy lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Cấu hình Kibana Access​

Bước tiếp theo là tạo tên người dùng và mật khẩu mà Kibana có thể sử dụng để xác thực. Bạn có thể thực hiện việc đó bằng cách chỉnh sửa trực tiếp tệp cấu hình của Kibana, nhưng điều này có thể gây ra sự cố bảo mật. Phương pháp bảo mật liên quan đến việc sử dụng ứng dụng kibana-keystore.

Chạy các lệnh sau để đặt tên người dùng. Nhập kibana_system làm tên người dùng.
Mã:
$ cd /usr/share/kibana/bin$ sudo ./kibana-keystore add elasticsearch.usernameNhập giá trị cho elasticsearch.username: *************
Chạy lại lệnh để đặt mật khẩu. Đảm bảo bạn sử dụng mật khẩu đã tạo cho Kibana ở bước 8. Đối với hướng dẫn của chúng tôi, mật khẩu là dTanR7Q2HtgDtATRvuJv.
Mã:
$ sudo ./kibana-keystore add elasticsearch.passwordNhập giá trị cho elasticsearch.password: ********************

Khởi động Kibana​

Bây giờ bạn đã cấu hình quyền truy cập và mạng an toàn cho Kibana, hãy bắt đầu quy trình.
Mã:
$ sudo systemctl start kibana
Kiểm tra trạng thái để xem nó có đang chạy không.
Mã:
$ sudo systemctl status kibana

Bước 10 - Cài đặt và cấu hình Filebeat​

Điều quan trọng cần lưu ý là chúng ta sẽ cài đặt Filebeat trên máy chủ Suricata. Vì vậy, hãy chuyển lại và thêm khóa Elastic GPG để bắt đầu.
Mã:
$ sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
Tạo và mở kho lưu trữ elastic.
Mã:
$ sudo nano /etc/yum.repos.d/elasticsearch.repo
Dán mã sau.
Mã:
[elasticsearch]name=Kho lưu trữ Elasticsearch cho các gói 7.xbaseurl=https://artifacts.elastic.co/packages/7.x/yumgpgcheck=1gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearchenabled=0autorefresh=1type=rpm-md
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Cài đặt Filebeat.
Mã:
$ sudo dnf install --enablerepo=elasticsearch filebeat
Filebeat lưu trữ cấu hình của nó trong tệp /etc/filebeat/filebeat.yml. Mở tệp đó để chỉnh sửa.
Mã:
$ sudo nano /etc/filebeat/filebeat.yml
Điều đầu tiên bạn cần làm là kết nối nó với bảng điều khiển của Kibana. Tìm dòng #host: "localhost:5601" trong phần Kibana và thêm dòng sau ngay bên dưới như minh họa.
Mã:
. . .# Bắt đầu từ Beats phiên bản 6.0.0, bảng điều khiển được tải thông qua Kibana API.# Điều này yêu cầu cấu hình điểm cuối Kibana.setup.kibana: # Kibana Host # Có thể bỏ qua Scheme và cổng và sẽ được đặt thành mặc định (http và 5601) # Trong trường hợp bạn chỉ định một đường dẫn bổ sung, scheme là bắt buộc: http://localhost:5601/path # Địa chỉ IPv6 luôn phải được định nghĩa là: https://[2001:db8::1]:5601 #host: "localhost:5601" host: "your_private_IP:5601". . .
Tiếp theo, tìm phần Elasticsearch Output của tệp và chỉnh sửa các giá trị của hosts, username và password như hiển thị bên dưới. Đối với tên người dùng, hãy chọn elastic làm giá trị và đối với mật khẩu, hãy sử dụng giá trị được tạo ở bước 8 của hướng dẫn này.
Mã:
output.elasticsearch: # Mảng máy chủ để kết nối tới. hosts: ["your_private_IP:9200"] # Giao thức - `http` (mặc định) hoặc `https`. #protocol: "https" # Thông tin xác thực - khóa API hoặc tên người dùng/mật khẩu. #api_key: "id:api_key" username: "elastic" password: "bd1YJfhSa8RC8SMvTIwg". . .
Sau khi hoàn tất, hãy lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Tiếp theo, hãy bật mô-đun Suricata tích hợp của Filebeat.
Mã:
$ sudo filebeat modules enable suricata
Bước cuối cùng trong quá trình định cấu hình Filebeat là tải bảng điều khiển và đường ống SIEM vào Elasticsearch bằng lệnh filebeat setup.
Mã:
$ sudo filebeat setup
Có thể mất vài phút để lệnh hoàn tất. Sau khi hoàn tất, bạn sẽ nhận được kết quả sau.
Mã:
Chính sách ghi đè ILM đã bị vô hiệu hóa. Đặt `setup.ilm.overwrite: true` để bật.Thiết lập chỉ mục đã hoàn tất.Đang tải bảng thông tin (Kibana phải đang chạy và có thể truy cập được)Bảng thông tin đã tảiThiết lập ML bằng setup --machine-learning sẽ bị xóa trong 8.0.0. Vui lòng sử dụng ứng dụng ML thay thế.Xem thêm: https://www.elastic.co/guide/en/machine-learning/current/index.htmlKhông thể tải các tác vụ ML vào Elasticsearch 8.0.0 hoặc mới hơn bằng Beat.Đã tải các cấu hình tác vụ học máyĐã tải các đường ống Ingest
Khởi động dịch vụ Filebeat.
Mã:
$ sudo systemctl start filebeat
Kiểm tra trạng thái của dịch vụ.
Mã:
$ sudo systemctl status filebeat

Bước 11 - Truy cập Bảng thông tin Kibana​

Vì KIbana được định cấu hình để chỉ truy cập Elasticsearch thông qua địa chỉ IP riêng của nó, nên bạn có hai tùy chọn để truy cập. Phương pháp đầu tiên là sử dụng Đường hầm SSH đến máy chủ Elasticsearch từ PC của bạn. Điều này sẽ chuyển tiếp cổng 5601 từ PC của bạn đến địa chỉ IP riêng của máy chủ và bạn sẽ có thể truy cập Kibana từ PC của mình tại http://localhost:5601. Nhưng phương pháp này có nghĩa là bạn sẽ không thể truy cập nó từ bất kỳ nơi nào khác.

Tùy chọn là cài đặt Nginx trên máy chủ Suricata của bạn và sử dụng nó như một proxy ngược để truy cập máy chủ Elasticsearch thông qua địa chỉ IP riêng của nó. Chúng tôi sẽ thảo luận về cả hai cách. Bạn có thể chọn một trong hai cách dựa trên yêu cầu của mình.

Sử dụng Đường hầm cục bộ SSH​

Nếu bạn đang sử dụng Windows 10 hoặc Windows 11, bạn có thể chạy SSH LocalTunnel từ Windows Powershell của mình. Trên Linux hoặc macOS, bạn có thể sử dụng thiết bị đầu cuối. Bạn có thể sẽ cần cấu hình quyền truy cập SSH nếu bạn chưa thực hiện.

Chạy lệnh sau trong thiết bị đầu cuối của máy tính để tạo Đường hầm SSH.
Mã:
$ ssh -L 5601:your_private_IP:5601 navjot@your_public_IP -N
  • Cờ -L tham chiếu đến Đường hầm SSH cục bộ, chuyển tiếp lưu lượng từ cổng PC của bạn đến máy chủ.
  • private_IP:5601 là địa chỉ IP mà lưu lượng của bạn được chuyển tiếp đến trên máy chủ. Trong trường hợp này, hãy thay thế nó bằng địa chỉ IP riêng của máy chủ Elasticsearch của bạn.
  • your_public_IP là địa chỉ IP công khai của máy chủ Elasticsearch, được sử dụng để mở kết nối SSH.
  • Cờ -N yêu cầu OpenSSH không thực thi bất kỳ lệnh nào nhưng vẫn giữ kết nối hoạt động miễn là đường hầm vẫn chạy.
Bây giờ đường hầm đã mở, bạn có thể truy cập Kibana bằng cách mở URL http://localhost:5601 trên trình duyệt của PC. Bạn sẽ nhận được màn hình sau.



Bạn sẽ cần phải giữ lệnh chạy miễn là bạn cần truy cập Kibana. Nhấn Ctrl + C trong thiết bị đầu cuối của bạn để đóng đường hầm.

Sử dụng Nginx Reverse-proxy​

Phương pháp này phù hợp nhất nếu bạn muốn truy cập bảng điều khiển từ bất kỳ đâu trên thế giới.

Cấu hình Tường lửa​

Trước khi tiến hành, bạn cần mở các cổng HTTP và HTTPS trong tường lửa.
Mã:
$ sudo firewall-cmd --permanent --add-service=http$ sudo firewall-cmd --permanent --add-service=https
Tải lại tường lửa để kích hoạt các thay đổi.
Mã:
$ sudo firewall-cmd --reload

Cài đặt và cấu hình SSL​

Bước đầu tiên là cài đặt Chứng chỉ SSL Let's Encrypt. Vì chúng ta đã thiết lập kho lưu trữ EPEL, hãy cài đặt công cụ Certbot.
Mã:
$ sudo dnf install certbot
Tạo chứng chỉ SSL cho miền kibana.example.com.
Mã:
$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [emailprotected] -d kibana.example.com
Lệnh trên sẽ tải xuống chứng chỉ vào thư mục /etc/letsencrypt/live/kibana.example.com trên máy chủ của bạn.

Tạo chứng chỉ nhóm Diffie-Hellman.
Mã:
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Tạo thư mục gốc web thử thách để tự động gia hạn Let's Encrypt.
Mã:
$ sudo mkdir -p /var/lib/letsencrypt
Tạo Cron Job để gia hạn SSL. Nó sẽ chạy hàng ngày để kiểm tra chứng chỉ và gia hạn nếu cần. Để thực hiện việc đó, trước tiên, hãy tạo tệp /etc/cron.daily/certbot-renew và mở tệp đó để chỉnh sửa.
Mã:
$ sudo nano /etc/cron.daily/certbot-renew
Dán mã sau.
Mã:
#!/bin/shcertbot renew --cert-name kibana.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Thay đổi quyền trên tệp tác vụ để làm cho tệp đó có thể thực thi được.
Mã:
$ sudo chmod +x /etc/cron.daily/certbot-renew

Cài đặt và cấu hình Nginx​

Rocket Linux 8.5 được tích hợp phiên bản ổn định mới nhất của Nginx dưới dạng mô-đun. Cài đặt bằng lệnh sau.
Mã:
$ sudo dnf module install nginx:1.20
Bạn có thể kiểm tra phiên bản bạn muốn cài đặt bằng lệnh sau.
Mã:
$ dnf module list nginxRocky Linux 8 - AppStreamTên Tóm tắt hồ sơ luồngnginx 1.14 [d] common [d] nginx webservernginx 1.16 common [d] nginx webservernginx 1.18 common [d] nginx webservernginx 1.20 [e] common [d] [i] nginx webserverGói bổ sung cho Enterprise Linux Modular 8 - x86_64Tên Tóm tắt hồ sơ luồngnginx mainline common nginx webservernginx 1.20 [e] common [d] [i] nginx webserver
Xác nhận cài đặt Nginx.
Mã:
$ nginx -vnginx phiên bản 1.20.1
Kích hoạt dịch vụ Nginx.
Mã:
$ sudo systemctl enable nginx
Tạo và mở tệp cấu hình Nginx cho Kibana.
Mã:
$ sudo nano /etc/nginx/conf.d/kibana.conf
Dán mã sau vào đó. Thay thế địa chỉ IP bằng địa chỉ IP riêng của máy chủ Elasticsearch của bạn.
Mã:
server { listen 80; listen [::]:80; server_name kibana.example.com; return 301 https://$host$request_uri;}server { server_name kibana.example.com; charset utf-8; listen 443 ssl http2; listen [::]:443 ssl http2; Nhật ký truy cập /var/log/nginx/kibana.access.log; Nhật ký lỗi /var/log/nginx/kibana.error.log; Chứng chỉ ssl /etc/letsencrypt/live/kibana.example.com/fullchain.pem; Khóa chứng chỉ ssl /etc/letsencrypt/live/kibana.example.com/privkey.pem; Chứng chỉ ssl đáng tin cậy /etc/letsencrypt/live/kibana.example.com/chain.pem; Thời gian chờ ssl 1 ngày; Bộ nhớ đệm ssl session được chia sẻ: MozSSL: 10 phút; Tắt ssl_session_tickets; Giao thức ssl TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; trình giải quyết 8.8.8.8; ssl_stapling bật; ssl_stapling_verify bật; ssl_dhparam /etc/ssl/certs/dhparam.pem; vị trí / { proxy_pass http://your_private_IP:5601; proxy_set_header Máy chủ $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; }}
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Mở tệp /etc/nginx/nginx.conf để chỉnh sửa.
Mã:
$ sudo nano /etc/nginx/nginx.conf
Thêm dòng sau vào trước dòng include /etc/nginx/conf.d/*.conf;.
Mã:
server_names_hash_bucket_size 64;
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Xác minh cấu hình.
Mã:
$ sudo nginx -tnginx: cú pháp tệp cấu hình /etc/nginx/nginx.conf là oknginx: tệp cấu hình /etc/nginx/nginx.conf đã kiểm tra thành công
Khởi động dịch vụ Nginx.
Mã:
$ sudo systemctl start nginx
Bạn có thể truy cập bảng điều khiển Kibana của mình thông qua URL https://kibana.example.com từ bất kỳ đâu bạn muốn.

Bước 12 - Quản lý bảng điều khiển Kibana​

Trước khi tiếp tục quản lý bảng điều khiển, bạn cần thêm trường URL cơ sở vào cấu hình của Kibana.

Mở Tệp cấu hình của Kibana.
Mã:
$ sudo nano /etc/kibana/kibana.yml
Tìm dòng được chú thích #server.publicBaseUrl: "" và thay đổi như sau bằng cách xóa dấu thăng ở phía trước.
Mã:
server.publicBaseUrl: "https://kibana.example.com"
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Khởi động lại dịch vụ Kibana.
Mã:
$ sudo systemctl restart kibana
Chờ vài phút và tải URL https://kibana.example.com trong trình duyệt của bạn. Đăng nhập bằng tên người dùng elastic và mật khẩu bạn đã tạo trước đó (bd1YJfhSa8RC8SMvTIwg) và bạn sẽ nhận được màn hình sau.



Nhập type:data suricata vào hộp tìm kiếm ở trên cùng để tìm thông tin của Suricata.



Nhấp vào kết quả đầu tiên ([Filebeat Suricata] Tổng quan về cảnh báo) và bạn sẽ nhận được màn hình tương tự như sau. Theo mặc định, nó chỉ hiển thị các mục nhập trong 15 phút gần nhất, nhưng chúng tôi đang hiển thị nó trong khoảng thời gian dài hơn để hiển thị nhiều dữ liệu hơn cho hướng dẫn.



Nhấp vào nút Sự kiện để xem tất cả các sự kiện đã ghi nhật ký.



Khi cuộn xuống các trang sự kiện và cảnh báo, bạn có thể xác định từng sự kiện và cảnh báo theo loại giao thức, cổng nguồn và đích và địa chỉ IP của nguồn. Bạn cũng có thể xem các quốc gia mà lưu lượng truy cập bắt nguồn.

Bạn có thể sử dụng Kibana và Filebeat để truy cập và tạo các loại bảng điều khiển khác. Một trong những bảng điều khiển tích hợp hữu ích mà bạn có thể sử dụng ngay là bảng điều khiển Bảo mật. Nhấp vào bảng điều khiển Mạng từ menu hamburger bên trái và bạn sẽ nhận được màn hình sau.



Bạn có thể thêm nhiều bảng điều khiển như Nginx bằng cách bật và cấu hình các mô-đun Filebeat tích hợp.

Kết luận​

Như vậy là kết thúc hướng dẫn cài đặt và cấu hình Suricata IDS với Elastic Stack trên máy chủ chạy Rocky Linux 8. Bạn cũng đã cấu hình Nginx làm proxy ngược để truy cập bảng điều khiển Kibana bên ngoài. Nếu bạn có bất kỳ câu hỏi nào, hãy đăng chúng trong phần bình luận bên dưới.
 
Back
Bên trên