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

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ủ Ubuntu 22.04. 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 cú pháp 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 Ubuntu 22.04 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 tên miền (kibana.example.com) trỏ đến máy chủ nơi Elasticsearch sẽ được cài đặt.

  • Cài đặt các gói cần thiết trên cả hai máy chủ. Một số trong số chúng có thể đã được cài đặt.
Mã:
$ sudo apt install wget curl nano software-properties-common dirmngr apt-transport-https gnupg gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y
[*]
Đảm bảo mọi thứ được cập nhật trên cả hai máy chủ.
Mã:
$ sudo apt update

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 máy chủ của mình.
Mã:
$ sudo add-apt-repository ppa:oisf/suricata-stable
Cài đặt Suricata.
Mã:
$ sudo apt install suricata
Kích hoạt dịch vụ Suricata.
Mã:
$ sudo systemctl enable suricata
Trước khi tiếp tục, hãy dừng dịch vụ Suricata vì chúng ta cần cấu hình nó đầu tiên.
Mã:
$ sudo systemctl stop suricata

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

Suricata lưu trữ cấu hình của mình trong tệp /etc/suricata/suricata.yaml. Chế độ mặc định của 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ế độ. Sau khi đã định 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, nên 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 # Adds a 'community_id' field to EVE records. These are meant to give # records a predictable flow ID that can be used to match records to # output of other tools such as Zeek (Bro). # # Takes a 'seed' that needs to be same across sensors and tools # to make the id less predictable. # enable/disable the community id feature. community-id: true
. . .
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.

Chọn Giao diện Mạng​

Tệp cấu hình Suricata mặc định sẽ kiểm tra lưu lượng truy cập 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.
Mã:
$ ip -p -j route show default
Bạn sẽ nhận được đầu ra như sau.
Mã:
[ { "dst": "default", "gateway": "95.179.184.1", "dev": "enp1s0", "protocol": "dhcp", "prefsrc": "95.179.185.42", "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ị enp1s0 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: xung quanh dòng số 580. Bên dưới, hãy đặt giá trị của biến interface vào tên thiết bị cho hệ thống của bạn.
Mã:
# Linux high speed capture support
af-packet: - interface: enp1s0 # Number of receive threads. "auto" uses the number of cores #threads: auto # Default clusterid. AF_PACKET will load balance packets based on flow. 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ư minh họa bên dưới.
Mã:
# For eBPF and XDP setup including bypass, filter and load balancing, please # see doc/userguide/capture-hardware/ebpf-xdp.rst for more info. - 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.

Tìm dòng pcap: và bên dưới dòng đó, đặt giá trị của biến interface thành tên thiết bị của bạn hệ thống.
Mã:
# Cross platform libpcap capture support
pcap: - interface: enp1s0 # On Linux, pcap will try to use mmap'ed capture and will use "buffer-size" # as total memory used by the ring. So set this to something bigger # than 1% of your bandwidth.
Để thêm giao diện mới giống như trước, hãy chèn giao diện đó ngay phía trên phần - interface: default như minh họa bên dưới.
Mã:
- interface: enp0s1
# Put default values here - interface: default #checksum-checks: auto
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.

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

Theo mặc định, Suricata chỉ sử dụng một tập hợp 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ách sử dụng một 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ã:
$ sudo suricata-update
25/2/2023 -- 06:48:14 -  -- Using data-directory /var/lib/suricata.
25/2/2023 -- 06:48:14 -  -- Using Suricata configuration /etc/suricata/suricata.yaml
25/2/2023 -- 06:48:14 -  -- Using /etc/suricata/rules for Suricata provided rules.
.....
25/2/2023 -- 06:48:14 -  -- No sources configured, will use Emerging Threats Open
25/2/2023 -- 06:48:14 -  -- Fetching https://rules.emergingthreats.net/open/suricata-6.0.10/emerging.rules.tar.gz. 100% - 3744681/3744681
.....
25/2/2023 -- 06:48:19 -  -- Writing rules to /var/lib/suricata/rules/suricata.rules: total: 41022; enabled: 33278; added: 41022; removed 0; modified: 0
25/2/2023 -- 06:48:19 -  -- Writing /var/lib/suricata/rules/classification.config
25/2/2023 -- 06:48:19 -  -- Testing with suricata -T.
25/2/2023 -- 06:48:41 -  -- Done.

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ã:
$ sudo 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 lệnh.
Mã:
$ sudo 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. Theo mặc định, Suricata có thể xử lý bất kỳ thay đổi quy tắc nào mà không cần khởi động lạ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 để tìm lỗi. Chạy lệnh sau để chạy công cụ xác thực.
Mã:
$ sudo suricata -T -c /etc/suricata/suricata.yaml -v
25/2/2023 -- 06:51:11 -  - Running suricata under test mode
25/2/2023 -- 06:51:11 -  - This is Suricata version 6.0.10 RELEASE running in SYSTEM mode
25/2/2023 -- 06:51:11 -  - CPUs/cores online: 2
25/2/2023 -- 06:51:11 -  - fast output device (regular) initialized: fast.log
25/2/2023 -- 06:51:11 -  - eve-log output device (regular) initialized: eve.json
25/2/2023 -- 06:51:11 -  - stats output device (regular) initialized: stats.log
25/2/2023 -- 06:51:22 -  - 1 rule files processed. 33519 rules successfully loaded, 0 rules failed
25/2/2023 -- 06:51:22 -  - Threshold config parsed: 0 rule(s) found
25/2/2023 -- 06:51:22 -  - 33522 signatures processed. 1189 are IP-only rules, 5315 are inspecting packet payload, 26814 inspect application layer, 108 are decoder event only
25/2/2023 -- 06:51:34 -  - Configuration provided was successfully loaded. Exiting.
25/2/2023 -- 06:51:34 -  - cleaning up signature grouping structure... complete
Cờ -T hướng dẫn Suricata chạy ở chế độ thử nghiệm, Cờ -c cấu hình vị trí của tệp cấu hình và cờ -v in ra đầ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 quá 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 - LSB: Next Generation IDS/IPS Loaded: loaded (/etc/init.d/suricata; generated) Active: active (running) since Sat 2023-02-25 07:04:23 UTC; 5s ago Docs: man:systemd-sysv-generator(8) Process: 2701 ExecStart=/etc/init.d/suricata start (code=exited, status=0/SUCCESS) Tasks: 1 (limit: 4575) Memory: 190.6M CPU: 5.528s CGroup: /system.slice/suricata.service ??2710 /usr/bin/suricata -c /etc/suricata/suricata.yaml --pidfile /var/run/suricata.pid --af-packet -D -vvv
Feb 25 07:04:23 kibana systemd[1]: Starting LSB: Next Generation IDS/IPS...
Feb 25 07:04:23 kibana suricata[2701]: Starting suricata in IDS (af-packet) mode... done.
Feb 25 07:04:23 kibana systemd[1]: Started LSB: Next Generation IDS/IPS.
Quá trình này 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 đã 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ã:
25/2/2023 -- 07:04:44 -  - All AFP capture threads are running.

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

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 nghị 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 ra 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/25/2023-07:06:09.513208 [**] [1:2100498:7] GPL ATTACK_RESPONSE id check returned root [**] [Classification: Potentially Bad Traffic] [Priority: 2] {TCP} 2600:9000:2250:3200:0018:30b3:e400:93a1:80 -> 2001:19f0:5001:225f:5400:04ff:fe52:2ca2:36770
Nếu yêu cầu của bạn sử dụng IPv4, bạn sẽ thấy đầu ra sau.
Mã:
02/19/2023-10:13:17.872335 [**] [1:2100498:7] GPL ATTACK_RESPONSE id check returned root [**] [Classification: Potentially Bad Traffic] [Priority: 2] {TCP} 108.158.221.5:80 -> 95.179.185.42:36364
Suricata cũng ghi nhật ký 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.

PHẦN 2​

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 đượ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ã:
$ wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg
Tạo kho lưu trữ cho gói Elasticsearch bằng cách tạo tệp /etc/apt/sources.list.d/elastic-7.x.list.
Mã:
$ echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list
Cập nhật kho lưu trữ của hệ thống danh sách.
Mã:
$ sudo apt update
Cài đặt Elasticsearch và Kibana.
Mã:
$ sudo apt install elasticsearch kibana
Xác định địa chỉ IP riêng của máy chủ của bạn bằng cách sử dụng lệnh sau lệnh.
Mã:
$ ip -brief address show
lo UNKNOWN 127.0.0.1/8 ::1/128
enp1s0 UP 78.141.220.30/23 metric 100 2001:19f0:5001:b35:5400:4ff:fe52:2ca3/64 fe80::5400:4ff:fe52:2ca3/64
enp6s0 UP 10.7.96.4/20 fe80::5800:4ff:fe52:2ca3/64
Ghi lại IP riêng của máy chủ của bạn (10.7.96.4 trong trường hợp này). Chúng ta sẽ gọi nó là your_private_IP. Địa chỉ IP công khai của máy chủ (78.141.220.30) sẽ được gọi là your_public_IP trong phần hướng dẫn còn lại. Ngoài ra, hãy lưu ý tên mạng của máy chủ của bạn, enp6s0.

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ư.

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ã:
# By default Elasticsearch is only accessible on localhost. Set a different
# address here to expose this node on the network:
#
#network.host: 192.168.0.1
network.bind_host: ["127.0.0.1", "your_private_IP"]
#
# By default Elasticsearch listens for HTTP traffic on the first free port it
# finds starting at 9200. Set a specific HTTP port here:
Đ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 tư.

Bước tiếp theo là bật một số bảo mật các tính năng và đảm bảo rằng Elastic được 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-node
xpack.security.enabled: true
Nếu bạn định sử dụng nhiều nút tìm kiếm Elastic, 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.
Mã:
$ sudo ufw allow in on enp6s0
$ sudo ufw allow out on enp6s0
Đả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.

Khởi động Elasticsearch​

Tải lại daemon dịch vụ.
Mã:
$ sudo systemctl daemon-reload
Kích hoạt Elasticsearch dịch vụ.
Mã:
$ sudo systemctl enable 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 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ã:
Initiating the setup of passwords for reserved users elastic,apm_system,kibana,kibana_system,logstash_system,beats_system,remote_monitoring_user.
The passwords will be randomly generated and printed to the console.
Please confirm that you would like to continue [y/N]y
Changed password for user apm_system
PASSWORD apm_system = y5uilzBu8akwRChvXFEq
Changed password for user kibana_system
PASSWORD kibana_system = nEeGIo9YJysUITU0ywLO
Changed password for user kibana
PASSWORD kibana = nEeGIo9YJysUITU0ywLO
Changed password for user logstash_system
PASSWORD logstash_system = VmumYBdNAwjsjwql6F5j
Changed password for user beats_system
PASSWORD beats_system = NZJxIPySwsNwPwCD2rsy
Changed password for user remote_monitoring_user
PASSWORD remote_monitoring_user = c2GafzJIueAxZEAAC6tZ
Changed password for user elastic
PASSWORD elastic = l4r7CyCHPw5p4c43RfA1
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 xpack chức năng bảo mật 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ẽ chặn các lệnh hướng dẫn và cờ --force sẽ đả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: 20cabb5381ad09aeb6cccd1136c8138f
xpack.reporting.encryptionKey: d5293c386d14479f72bb2f6f6f984ad9
xpack.security.encryptionKey: 9cda918cc718fb58f022423b97e3171a
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ã:
. . .
# Specifies locale to be used for all localizable strings, dates and number formats.
# Supported languages are the following: English - en , by default , Chinese - zh-CN .
#i18n.locale: "en"
xpack.encryptedSavedObjects.encryptionKey: 0f4e5e1cf8fad1874ffed0faac6be0da
xpack.reporting.encryptionKey: d435c78a4e37521e539c0e905420c9f5
xpack.security.encryptionKey: 7ba0e2a02747bb90fb0f9a3c267b99ed

Cấu hình cổng Kibana​

Kibana cần được cấu hình để 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 dòng đó như hình minh họa.
Mã:
# Kibana is served by a back end server. This setting specifies the port to use.
#server.port: 5601
# Specifies the address to which the Kibana server will bind. IP addresses and host names are both valid values.
# The default is 'localhost', which usually means remote machines will not be able to connect.
# To allow connections from remote users, set this parameter to a non-loopback address.
#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 Truy cập​

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 này 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.username
Enter value for elasticsearch.username: *************
Chạy lại lệnh để đặt mật khẩu. Hãy đảm bảo rằng 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.password
Enter value for elasticsearch.password: ********************

Khởi động Kibana​

Bây giờ bạn đã cấu hình quyền truy cập an toàn và mạng cho Kibana, hãy khởi động và kích hoạt quy trình.
Mã:
$ sudo systemctl enable kibana --now
Kiểm tra trạng thái để xem có đang chạy.
Mã:
$ sudo systemctl status kibana
? kibana.service - Kibana Loaded: loaded (/etc/systemd/system/kibana.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2023-02-25 07:24:37 UTC; 6s ago Docs: https://www.elastic.co Main PID: 3884 (node) Tasks: 11 (limit: 4575) Memory: 181.8M CPU: 6.700s CGroup: /system.slice/kibana.service ??3884 /usr/share/kibana/bin/../node/bin/node /usr/share/kibana/bin/../src/cli/dist --logging.dest=/var/log/kibana/kibana.log --pid.file=/run/kibana/kibana.pid "--deprecation.skip_de>
Feb 25 07:24:37 elasticsearch systemd[1]: Started 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ã:
$ wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg
Tạo kho lưu trữ elastic.
Mã:
$ echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list
Cập nhật kho lưu trữ hệ thống danh sách.
Mã:
$ sudo apt update
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 apt install filebeat
Filebeat lưu trữ cấu hình của nó trong /etc/filebeat/filebeat.yml tệp. 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 tệp 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 dòng đó như minh họa.
Mã:
. . .
# Starting with Beats version 6.0.0, the dashboards are loaded via the Kibana API.
# This requires a Kibana endpoint configuration.
setup.kibana: # Kibana Host # Scheme and port can be left out and will be set to the default (http and 5601) # In case you specify and additional path, the scheme is required: http://localhost:5601/path # IPv6 addresses should always be defined as: 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, usernamepassword 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: # Array of hosts to connect to. hosts: ["your_private_IP:9200"] # Protocol - either `http` (default) or `https`. #protocol: "https" # Authentication credentials - either API key or username/password. #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 Suricata tích hợp của Filebeat module.
Mã:
$ sudo filebeat modules enable suricata
Bước cuối cùng trong quá trình cấu hình Filebeat là tải bảng điều khiển và đường ống SIEM vào Elasticsearch bằng cách sử dụng filebeat setup lệnh.
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ã:
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/machine-learning/current/index.html
It is not possble to load ML jobs into an Elasticsearch 8.0.0 or newer using the Beat.
Loaded machine learning job configurations
Loaded Ingest pipelines
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 điều khiển Kibana​

Vì KIbana được 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 nó. Phương pháp đầu tiên là sử dụng Đường hầm SSH đến máy chủ tìm kiếm Elastic 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 khác 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 ta sẽ thảo luận về cả hai cách. Bạn có thể chọn bất kỳ cách nào tùy theo yêu cầu của mình.

Sử dụng SSH Local Tunnel​

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. Trên Linux hoặc macOS, bạn có thể sử dụng terminal. 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ủ.
  • Cờ private_IP:5601 là địa chỉ IP mà lưu lượng truy cập 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.
  • Cờ 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 đang 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.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22479%22%3E%3C/svg%3E


Bạn sẽ cần phải giữ lệnh chạy trong thời gian 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 tiếp, bạn cần mở các cổng HTTP và HTTPS trong tường lửa.
Mã:
$ sudo ufw allow http
$ sudo ufw allow https

Cài đặt Nginx​

Ubuntu 22.04 đi kèm với phiên bản Nginx cũ hơn. Để cài đặt phiên bản mới nhất, bạn cần tải xuống kho lưu trữ Nginx chính thức.

Nhập khóa ký của Nginx.
Mã:
$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
Thêm kho lưu trữ cho phiên bản ổn định của Nginx.
Mã:
$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list
Cập nhật hệ thống kho lưu trữ.
Mã:
$ sudo apt update
Cài đặt Nginx.
Mã:
$ sudo apt install nginx
Xác minh cài đặt.
Mã:
$ nginx -v
nginx version: nginx/1.22.1
Khởi động máy chủ Nginx.
Mã:
$ sudo systemctl start nginx

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. Chúng ta cần cài đặt Certbot để tạo chứng chỉ SSL. Bạn có thể cài đặt Certbot bằng kho lưu trữ của Ubuntu hoặc tải phiên bản mới nhất bằng công cụ Snapd. Chúng tôi sẽ sử dụng phiên bản Snapd.

Ubuntu 22.04 đi kèm với Snapd được cài đặt theo mặc định. Chạy các lệnh sau để đảm bảo rằng phiên bản Snapd của bạn đã được cập nhật.
Mã:
$ sudo snap install core && sudo snap refresh core
Cài đặt Certbot.
Mã:
$ sudo snap install --classic certbot
Sử dụng lệnh sau để đảm bảo rằng lệnh Certbot có thể chạy được bằng cách tạo liên kết tượng trưng đến /usr/bin thư mục.
Mã:
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
Tạo chứng chỉ SSL cho tên miền kibana.example.com.
Mã:
$ sudo certbot certonly --nginx --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 /etc/letsencrypt/live/kibana.example.com thư mục trên máy chủ của bạn.

Tạo chứng chỉ nhóm Diffie-Hellman.
Mã:
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
Để kiểm tra xem quá trình gia hạn SSL có hoạt động tốt không, hãy chạy thử quy trình.
Mã:
$ sudo certbot renew --dry-run
Nếu không thấy lỗi nào, bạn đã hoàn tất. Chứng chỉ của bạn sẽ tự động gia hạn.

Cấu hình 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; access_log /var/log/nginx/kibana.access.log; error_log /var/log/nginx/kibana.error.log; ssl_certificate /etc/letsencrypt/live/kibana.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/kibana.example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/kibana.example.com/chain.pem; ssl_session_timeout 1d; ssl_session_cache shared:MozSSL:10m; ssl_session_tickets off; ssl_protocols 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;	resolver 8.8.8.8; ssl_stapling on; ssl_stapling_verify on; ssl_dhparam /etc/ssl/certs/dhparam.pem; location / { proxy_pass http://your_private_IP:5601; proxy_set_header Host $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 -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Khởi động lại dịch vụ Nginx.
Mã:
$ sudo systemctl restart nginx
Bảng điều khiển Kibana của bạn có thể truy cập được thông qua URL https://kibana.example.com từ bất kỳ nơi nào 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 Kibana.

Mở cấu hình Kibana tập tin.
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 nó.
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.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22598%22%3E%3C/svg%3E


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.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22417%22%3E%3C/svg%3E


Nhấp vào kết quả đầu tiên (Tổng quan về cảnh báo [Filebeat Suricata]) 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 sẽ hiển thị 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.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22580%22%3E%3C/svg%3E


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.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22557%22%3E%3C/svg%3E


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 bằng Elastic Stack trên máy chủ Ubuntu 22.04. 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