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à:
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.
[*]
Đảm bảo mọi thứ được cập nhật trên cả hai máy chủ.
Cài đặt Suricata.
Kích hoạt dịch vụ 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ở tệp
Xác định vị trí dòng
Bây giờ, các sự kiện của bạn sẽ mang một ID như
Kiểm tra tên thiết bị của giao diện mạng bằng lệnh sau.
Bạn sẽ nhận được đầu ra như sau.
Biế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.
Tìm dòng
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
Để thêm giao diện mới, hãy chèn giao diện đó ngay phía trên phần
Chúng tôi đã thêm một giao diện mới
Tìm dòng
Để 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
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ạ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.
Ví dụ, nếu bạn muốn bao gồm bộ quy tắc
Chạy lại lệnh
Cờ
Kiểm tra trạng thái của quá trình.
Bạn sẽ thấy đầu ra sau nếu mọi thứ hoạt động bình thường.
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.
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.
Bạn sẽ nhận được phản hồi sau.
Lệnh trên giả vờ trả về đầu ra của Lệnh
Nếu yêu cầu của bạn sử dụng IPv6, bạn sẽ thấy đầu ra sau.
Nếu yêu cầu của bạn sử dụng IPv4, bạn sẽ thấy đầu ra sau.
Suricata cũng ghi nhật ký sự kiện vào tệp
Tạo kho lưu trữ cho gói Elasticsearch bằng cách tạo tệp
Cập nhật kho lưu trữ của hệ thống danh sách.
Cài đặt Elasticsearch và 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.
Ghi lại IP riêng của máy chủ của bạn (
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
Đ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.
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.
Đả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.
Kích hoạt Elasticsearch dịch vụ.
Bây giờ bạn đã cấu hình Elasticsearch, đã đến lúc khởi động dịch vụ.
Tạo mật khẩu.
Bạn sẽ nhận được kết quả như sau. Nhấn
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.
Cờ
Sao chép kết quả. Mở tệp cấu hình Kibana tại
Dán mã từ lệnh trước đó vào cuối tệp.
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.
Chạy các lệnh sau để đặt tên người dùng. Nhập
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à
Kiểm tra trạng thái để xem có đang chạy.
Tạo kho lưu trữ elastic.
Cập nhật kho lưu trữ hệ thống danh sách.
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Cài đặt Filebeat.
Filebeat lưu trữ cấu hình của nó trong
Đ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
Tiếp theo, tìm phần Elasticsearch Output của tệp và chỉnh sửa các giá trị của
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.
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
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.
Khởi động dịch vụ Filebeat.
Kiểm tra trạng thái của dịch vụ.
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.
Chạy lệnh sau trong thiết bị đầu cuối của máy tính để tạo Đường hầm SSH.
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.
Nhập khóa ký của Nginx.
Thêm kho lưu trữ cho phiên bản ổn định của Nginx.
Cập nhật hệ thống kho lưu trữ.
Cài đặt Nginx.
Xác minh cài đặt.
Khởi động máy chủ Nginx.
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.
Cài đặt 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
Tạo chứng chỉ SSL cho tên miền
Lệnh trên sẽ tải xuống chứng chỉ vào
Tạo chứng chỉ nhóm Diffie-Hellman.
Để 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.
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.
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.
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Mở tệp
Thêm dòng sau vào trước dòng
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.
Khởi động lại dịch vụ Nginx.
Bảng điều khiển Kibana của bạn có thể truy cập được thông qua URL
Mở cấu hình Kibana tập tin.
Tìm dòng được chú thích
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.
Chờ vài phút và tải URL
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
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.
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ệ.
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
Mã:
$ sudo apt install suricata
Mã:
$ sudo systemctl enable suricata
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
# 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
. . .
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ạngeth0
. 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
Mã:
[ { "dst": "default", "gateway": "95.179.184.1", "dev": "enp1s0", "protocol": "dhcp", "prefsrc": "95.179.185.42", "metric": 100, "flags": [ ] } ]
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
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
. . .
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
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.
- interface: default
như minh họa bên dưới.
Mã:
- interface: enp0s1
# Put default values here - interface: default #checksum-checks: auto
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
tgreen/hunting
, bạn có thể bật nó bằng lệnh sau lệnh.
Mã:
$ sudo suricata-update enable-source tgreen/hunting
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
-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
Mã:
$ sudo systemctl status suricata
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.
Mã:
$ sudo tail -f /var/log/suricata/suricata.log
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
Mã:
uid=0(root) gid=0(root) groups=0(root)
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
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
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
/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
/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
Mã:
$ sudo apt update
Mã:
$ sudo apt install elasticsearch kibana
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
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
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:
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
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
Khởi động Elasticsearch
Tải lại daemon dịch vụ.
Mã:
$ sudo systemctl daemon-reload
Mã:
$ sudo systemctl enable elasticsearch
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
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ước 9 - Cấu hình Kibana
Bước đầu tiên trong quá trình cấu hình Kibana là bậtxpack
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
-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
/etc/kibana/kibana.yml
để chỉnh sửa.
Mã:
$ sudo nano /etc/kibana/kibana.yml
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"
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ụngkibana-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: *************
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
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
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
Mã:
$ sudo apt update
Cài đặt Filebeat.
Mã:
$ sudo apt install filebeat
/etc/filebeat/filebeat.yml
tệp. Mở tệp để chỉnh sửa.
Mã:
$ sudo nano /etc/filebeat/filebeat.yml
#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"
. . .
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: # 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"
. . .
Tiếp theo, hãy bật Suricata tích hợp của Filebeat module.
Mã:
$ sudo filebeat modules enable suricata
filebeat setup
lệnh.
Mã:
$ sudo filebeat setup
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
Mã:
$ sudo systemctl start filebeat
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ạihttp://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.
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
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
Mã:
$ sudo apt update
Mã:
$ sudo apt install nginx
Mã:
$ nginx -v
nginx version: nginx/1.22.1
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
Mã:
$ sudo snap install --classic certbot
/usr/bin
thư mục.
Mã:
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
kibana.example.com
.
Mã:
$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [emailprotected] -d kibana.example.com
/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
Mã:
$ sudo certbot renew --dry-run
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
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; }
}
Mở tệp
/etc/nginx/nginx.conf
để chỉnh sửa.
Mã:
$ sudo nano /etc/nginx/nginx.conf
include /etc/nginx/conf.d/*.conf;
.
Mã:
server_names_hash_bucket_size 64;
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
Mã:
$ sudo systemctl restart nginx
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
#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"
Khởi động lại dịch vụ Kibana.
Mã:
$ sudo systemctl restart kibana
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.