Đã có nhiều cuộc thảo luận về Suricata và Zeek (trước đây là Bro) và cách cả hai có thể cải thiện bảo mật mạng.
Vậy, bạn nên triển khai cái nào? Câu trả lời ngắn gọn là cả hai. Câu trả lời dài có thể được tìm thấy tại đây.
Trong hướng dẫn (dài dòng) này, chúng ta sẽ cài đặt và cấu hình Suricata, Zeek, ngăn xếp ELK và một số công cụ tùy chọn trên máy chủ Ubuntu 20.10 (Groovy Gorilla) cùng với ngăn xếp Elasticsearch Logstash Kibana (ELK).
Lưu ý: Trong hướng dẫn này, chúng tôi giả định rằng tất cả các lệnh đều được thực thi dưới dạng root. Nếu không, bạn cần thêm sudo trước mỗi lệnh.
Hướng dẫn này cũng giả định rằng bạn đã cài đặt và cấu hình Apache2 nếu bạn muốn proxy Kibana thông qua Apache2. Nếu bạn chưa cài đặt Apache2, bạn sẽ tìm thấy đủ hướng dẫn trên trang web này. Nginx là một giải pháp thay thế và tôi sẽ cung cấp cấu hình cơ bản cho Nginx vì bản thân tôi không sử dụng Nginx.
Sau đó, bạn có thể cài đặt Suricata ổn định mới nhất bằng:
Vì eth0 được mã hóa cứng trong suricata (được coi là lỗi) nên chúng ta cần thay thế eth0 bằng tên bộ điều hợp mạng chính xác.
Trước tiên, hãy xem những card mạng nào có sẵn trên hệ thống:
Sẽ đưa ra kết quả như thế này (trên sổ tay):
Sẽ đưa ra đầu ra như thế này (trên máy chủ của tôi):
Trong trường hợp của tôi là eno3
Và thay thế tất cả các phiên bản eth0 bằng tên bộ điều hợp thực tế cho hệ thống của bạn.
Và thay thế tất cả các phiên bản eth0 bằng tên bộ điều hợp thực tế cho hệ thống của bạn.
Để nâng cấp suricata-update, hãy chạy:
Suricata-update cần những điều sau truy cập:
Thư mục /etc/suricata: quyền truy cập đọc
Thư mục /var/lib/suricata/rules: quyền truy cập đọc/ghi
Thư mục /var/lib/suricata/update: quyền truy cập đọc/ghi
Một tùy chọn là chỉ cần chạy suricata-update dưới dạng root hoặc với sudo hoặc với sudo -u suricata suricata-update
Cập nhật Quy tắc của Bạn
Không cần thực hiện bất kỳ cấu hình nào, hoạt động mặc định của suricata-update là sử dụng bộ quy tắc Emerging Threats Open.
Lệnh này sẽ:
Tìm kiếm chương trình suricata trong đường dẫn của bạn để xác định phiên bản của nó.
Tìm kiếm /etc/suricata/enable.conf, /etc/suricata/disable.conf, /etc/suricata/drop.conf và /etc/suricata/modify.conf để tìm kiếm các bộ lọc áp dụng cho các quy tắc đã tải xuống.Các tệp này là tùy chọn và không cần phải tồn tại.
Tải xuống bộ quy tắc Emerging Threats Open cho phiên bản Suricata của bạn, mặc định là 4.0.0 nếu không tìm thấy.
Áp dụng các bộ lọc bật, tắt, xóa và sửa đổi như đã tải ở trên.
Ghi các quy tắc vào /var/lib/suricata/rules/suricata.rules.
Chạy Suricata ở chế độ thử nghiệm trên /var/lib/suricata/rules/suricata.rules.
Suricata-Update áp dụng một quy ước khác với các tệp quy tắc mà Suricata thường có. Sự khác biệt đáng chú ý nhất là các quy tắc được lưu trữ theo mặc định trong /var/lib/suricata/rules/suricata.rules.
Filebeat đi kèm với một số mô-đun tích hợp để xử lý nhật ký. Bây giờ chúng ta sẽ kích hoạt các mô-đun cần thiết.
Bây giờ chúng ta sẽ tải các mẫu Kibana.
Điều này sẽ tải tất cả các mẫu, ngay cả các mẫu cho các mô-đun không được kích hoạt. Filebeat vẫn chưa đủ thông minh để chỉ tải các mẫu cho các mô-đun được bật.
Vì chúng ta sẽ sử dụng các đường ống filebeat để gửi dữ liệu đến logstash nên chúng ta cũng cần bật các đường ống.
Các mô-đun filebeat tùy chọn
Đối với bản thân tôi, tôi cũng bật các mô-đun hệ thống, iptables, apache vì chúng cung cấp thông tin bổ sung. Nhưng bạn có thể bật bất kỳ mô-đun nào bạn muốn.
Để xem danh sách các mô-đun khả dụng, hãy làm như sau:
Và bạn sẽ thấy nội dung tương tự như sau:
Với phần mở rộng .disabled, mô-đun không được sử dụng.
Đối với mô-đun iptables, bạn cần cung cấp đường dẫn đến tệp nhật ký mà bạn muốn theo dõi. Trên Ubuntu, iptables ghi vào kern.log thay vì syslog nên bạn cần chỉnh sửa tệp iptables.yml.
Và đặt những mục sau vào tệp:
Tôi cũng sử dụng mô-đun netflow để lấy thông tin về mức sử dụng mạng. Để sử dụng mô-đun netflow, bạn cần cài đặt và cấu hình fprobe để lấy dữ liệu netflow vào filebeat.
Chỉnh sửa tệp cấu hình fprobe và thiết lập các thông số sau:
Sau đó, chúng ta bật fprobe và khởi động fprobe.
Sau khi bạn đã định cấu hình filebeat, tải các đường ống và bảng điều khiển, bạn cần thay đổi đầu ra filebeat từ elasticsearch thành logstash.
nano /etc/filebeat/filebeat.yml
Và bình luận những điều sau:
Và bật các mục sau:
Sau khi bạn đã bật bảo mật cho elasticsearch (xem bước tiếp theo) và bạn muốn thêm đường ống hoặc tải lại bảng điều khiển Kibana, bạn cần chú thích đầu ra logstach, bật lại đầu ra elasticsearch và nhập mật khẩu elasticsearch vào đó.
Sau khi cập nhật đường ống hoặc tải lại bảng điều khiển Kibana, bạn cần chú thích đầu ra elasticsearch một lần nữa và bật lại đầu ra logstash một lần nữa, sau đó khởi động lại filebeat.
Và thêm nội dung sau vào cuối tệp:
Tiếp theo, chúng ta sẽ đặt mật khẩu cho những người dùng elasticsearch tích hợp khác nhau.
Bạn cũng có thể sử dụng cài đặt tự động, nhưng sau đó elasticsearch sẽ quyết định mật khẩu cho những người dùng khác nhau.
Và dán nội dung sau vào nó.
Điều này sẽ gửi đầu ra của đường ống đến Elasticsearch trên máy chủ cục bộ. Đầu ra sẽ được gửi đến một chỉ mục cho mỗi ngày dựa trên dấu thời gian của sự kiện đi qua đường ống Logstash.
Thiết lập bảo mật cho Kibana
Theo mặc định, Kibana không yêu cầu xác thực người dùng, bạn có thể bật xác thực Apache cơ bản sau đó được phân tích thành Kibana, nhưng Kibana cũng có tính năng xác thực tích hợp riêng. Tính năng này có ưu điểm là bạn có thể tạo thêm người dùng từ giao diện web và chỉ định vai trò cho họ.
Để bật tính năng này, hãy thêm nội dung sau vào kibana.yml
Và dán đoạn sau vào cuối tệp:
Khi vào Kibana, bạn sẽ được chào đón bằng màn hình sau:
Nếu bạn muốn chạy Kibana sau proxy Apache
Bạn có 2 lựa chọn, chạy kibana trong thư mục gốc của máy chủ web hoặc trong thư mục con riêng của nó. Chạy kibana trong thư mục con riêng của nó hợp lý hơn. Tôi sẽ cung cấp cho bạn 2 lựa chọn khác nhau. Tất nhiên bạn có thể sử dụng Nginx thay vì Apache2.
Nếu bạn muốn chạy Kibana trong thư mục gốc của máy chủ web, hãy thêm nội dung sau vào cấu hình trang web Apache của bạn (giữa các câu lệnh VirtualHost)
Nếu bạn muốn chạy Kibana trong thư mục con riêng của nó, hãy thêm nội dung sau:
Trong kibana.yml, chúng ta cần cho Kibana biết rằng nó đang chạy trong một thư mục con.
Và thực hiện thay đổi sau:
Ở cuối kibana.yml, hãy thêm nội dung sau để không nhận được thông báo khó chịu rằng trình duyệt của bạn không đáp ứng các yêu cầu bảo mật.
Bật mod-proxy và mod-proxy-http trong apache2
Nếu bạn muốn chạy Kibana sau proxy Nginx
Bản thân tôi không sử dụng Nginx nên điều duy nhất tôi có thể cung cấp là một số thông tin cấu hình cơ bản.
Trong thư mục gốc của máy chủ:
Trong thư mục con:
Cài đặt Elasticsearch cho cụm một nút
Nếu bạn chạy một phiên bản elasticsearch duy nhất, bạn sẽ cần đặt số lượng bản sao và phân đoạn để có trạng thái màu xanh lá cây, nếu không, tất cả chúng sẽ vẫn ở trạng thái màu vàng.
1 phân đoạn, 0 bản sao.
Đối với các chỉ mục trong tương lai, chúng tôi sẽ cập nhật mẫu mặc định:
Đối với các chỉ mục hiện có có chỉ báo màu vàng, bạn có thể cập nhật chúng bằng:
Nếu bạn gặp lỗi này:
Bạn có thể sửa lỗi bằng:
Điều chỉnh tốt Kibana
Vì chúng tôi đang sử dụng đường ống nên bạn sẽ gặp lỗi như sau:
Vì vậy, hãy đăng nhập vào Kibana và đi đến Dev Tools.
Tùy thuộc vào cách bạn định cấu hình Kibana (proxy ngược Apache2 hay không), các tùy chọn có thể là:
http://localhost:5601
http://yourdomain.tld:5601
http://yourdomain.tld(proxy ngược Apache2)
http://yourdomain.tld/kibana(proxy ngược Apache2 và bạn đã sử dụng thư mục con kibana)
Tất nhiên, tôi hy vọng bạn đã định cấu hình Apache2 của mình với SSL để thêm bảo mật.
Nhấp vào nút menu, góc trên bên trái và cuộn xuống cho đến khi bạn thấy Dev Tools
Dán nội dung sau vào cột bên trái và nhấp vào nút phát.
Phản hồi sẽ là:
Khởi động lại tất cả các dịch vụ ngay bây giờ hoặc khởi động lại máy chủ của bạn để các thay đổi có hiệu lực.
Như bạn có thể thấy trong màn hình in này, Top Hosts hiển thị nhiều hơn một trang web trong trường hợp của tôi.
Những gì tôi đã làm là cài đặt filebeat và suricata và zeek trên các máy khác và trỏ đầu ra filebeat đến phiên bản logstash của tôi, do đó, có thể thêm nhiều phiên bản hơn vào thiết lập của bạn.
Bảng điều khiển Zeek:
Sau đây là các bảng điều khiển cho các mô-đun tùy chọn mà tôi đã tự bật.
Apache2:
IPTables:
Netflow:
Tất nhiên, bạn luôn có thể tạo bảng điều khiển và Trang bắt đầu của riêng mình trong Kibana. Hướng dẫn này sẽ không đề cập đến điều này.
Tôi đã tạo chủ đề và đăng ký theo dõi để có thể trả lời bạn và nhận thông báo về các bài đăng mới.
www.howtoforge.com
Vậy, bạn nên triển khai cái nào? Câu trả lời ngắn gọn là cả hai. Câu trả lời dài có thể được tìm thấy tại đây.
Trong hướng dẫn (dài dòng) này, chúng ta sẽ cài đặt và cấu hình Suricata, Zeek, ngăn xếp ELK và một số công cụ tùy chọn trên máy chủ Ubuntu 20.10 (Groovy Gorilla) cùng với ngăn xếp Elasticsearch Logstash Kibana (ELK).
Lưu ý: Trong hướng dẫn này, chúng tôi giả định rằng tất cả các lệnh đều được thực thi dưới dạng root. Nếu không, bạn cần thêm sudo trước mỗi lệnh.
Hướng dẫn này cũng giả định rằng bạn đã cài đặt và cấu hình Apache2 nếu bạn muốn proxy Kibana thông qua Apache2. Nếu bạn chưa cài đặt Apache2, bạn sẽ tìm thấy đủ hướng dẫn trên trang web này. Nginx là một giải pháp thay thế và tôi sẽ cung cấp cấu hình cơ bản cho Nginx vì bản thân tôi không sử dụng Nginx.
Cài đặt Suricata và suricata-update
Suricata
Mã:
add-apt-repository ppa:oisf/suricata-stable
Mã:
apt-get install suricata
Trước tiên, hãy xem những card mạng nào có sẵn trên hệ thống:
Mã:
lshw -class network -short
Mã:
Đường dẫn H/W Lớp thiết bị Mô tả
======================================================================
/0/100/2.1/0 enp2s0 mạng RTL8111/8168/8411 Bộ điều khiển Gigabit Ethernet PCI Express
/0/100/2.2/0 wlp3s0 mạng RTL8822CE Bộ điều hợp mạng không dây PCIe 802.11ac
Mã:
Đường dẫn H/W Lớp thiết bị Mô tả=========================================================/0/100/2.2/0 eno3 network Ethernet Connection X552/X557-AT 10GBASE-T/0/100/2.2/0.1 eno4 network Ethernet Connection X552/X557-AT 10GBASE-T
Mã:
nano /etc/suricata/suricata.yml
Mã:
nano /etc/default/suricata
Suricata-update
Bây giờ chúng ta cài đặt suricata-update để cập nhật và tải xuống các quy tắc suricata.
Mã:
apt install python3-pip
pip3 install pyyaml
pip3 install https://github.com/OISF/suricata-update/archive/master.zip
Mã:
pip3 install --pre --upgrade suricata-update
Thư mục /etc/suricata: quyền truy cập đọc
Thư mục /var/lib/suricata/rules: quyền truy cập đọc/ghi
Thư mục /var/lib/suricata/update: quyền truy cập đọc/ghi
Một tùy chọn là chỉ cần chạy suricata-update dưới dạng root hoặc với sudo hoặc với sudo -u suricata suricata-update
Cập nhật Quy tắc của Bạn
Không cần thực hiện bất kỳ cấu hình nào, hoạt động mặc định của suricata-update là sử dụng bộ quy tắc Emerging Threats Open.
Mã:
suricata-update
Tìm kiếm chương trình suricata trong đường dẫn của bạn để xác định phiên bản của nó.
Tìm kiếm /etc/suricata/enable.conf, /etc/suricata/disable.conf, /etc/suricata/drop.conf và /etc/suricata/modify.conf để tìm kiếm các bộ lọc áp dụng cho các quy tắc đã tải xuống.Các tệp này là tùy chọn và không cần phải tồn tại.
Tải xuống bộ quy tắc Emerging Threats Open cho phiên bản Suricata của bạn, mặc định là 4.0.0 nếu không tìm thấy.
Áp dụng các bộ lọc bật, tắt, xóa và sửa đổi như đã tải ở trên.
Ghi các quy tắc vào /var/lib/suricata/rules/suricata.rules.
Chạy Suricata ở chế độ thử nghiệm trên /var/lib/suricata/rules/suricata.rules.
Suricata-Update áp dụng một quy ước khác với các tệp quy tắc mà Suricata thường có. Sự khác biệt đáng chú ý nhất là các quy tắc được lưu trữ theo mặc định trong /var/lib/suricata/rules/suricata.rules.
Một cách để tải các quy tắc là vào tùy chọn dòng lệnh -S Suricata. Cách khác là cập nhật suricata.yaml của bạn để trông giống như thế này:
Mã:
default-rule-path: /var/lib/suricata/rules
rule-files:
- suricata.rules
Đây sẽ là định dạng tương lai của Suricata nên việc sử dụng định dạng này sẽ đảm bảo tương lai.
Khám phá các nguồn quy tắc khả dụng khác
Đầu tiên, hãy cập nhật chỉ mục nguồn quy tắc bằng lệnh update-sources:
Mã:
suricata-update update-sources
Nó sẽ trông như thế này:
Lệnh này sẽ cập nhật suricata-update với tất cả các nguồn quy tắc khả dụng.
Mã:
suricata-update list-sources
Nó sẽ trông như thế này:
Bây giờ chúng ta sẽ kích hoạt tất cả các nguồn quy tắc (miễn phí), đối với một nguồn trả phí, bạn sẽ cần phải có một tài khoản và tất nhiên là phải trả phí. Khi kích hoạt một nguồn trả phí, bạn sẽ được yêu cầu nhập tên người dùng/mật khẩu cho nguồn này. Bạn chỉ cần nhập một lần vì suricata-update lưu thông tin đó.
Mã:
suricata-update enable-source oisf/trafficid
suricata-update enable-source enetera/aggressive
suricata-update enable-source sslbl/ssl-fp-blacklist
suricata-update enable-source et/open
suricata-update enable-source tgreen/hunting
suricata-update enable-source sslbl/ja3-fingerprints
suricata-update enable-source ptresearch/attackdetection
Nó sẽ trông như thế này:
Và cập nhật lại các quy tắc của bạn để tải xuống các quy tắc mới nhất cũng như các bộ quy tắc mà chúng ta vừa thêm vào.
Mã:
suricata-update
Nó sẽ trông giống như điều này:
Để xem nguồn nào được bật, hãy làm như sau:
Mã:
suricata-update list-enabled-sources
Điều này sẽ trông như thế này:
Vô hiệu hóa một Nguồn
Vô hiệu hóa một nguồn sẽ giữ nguyên cấu hình nguồn nhưng vô hiệu hóa. Điều này hữu ích khi một nguồn yêu cầu các tham số như mã mà bạn không muốn mất, điều này sẽ xảy ra nếu bạn xóa một nguồn.
Bật một nguồn đã tắt sẽ bật lại mà không cần nhắc người dùng nhập dữ liệu.
Mã:
suricata-update disable-source et/pro
Xóa một Nguồn
Mã:
suricata-update remove-source et/pro
Điều này sẽ xóa cấu hình cục bộ cho nguồn này. Việc bật lại et/pro sẽ yêu cầu nhập lại mã truy cập của bạn vì et/pro là tài nguyên trả phí.
Bây giờ chúng ta sẽ bật suricata để khởi động khi khởi động và sau khi khởi động suricata.
Mã:
systemctl enable suricata
systemctl start suricata
Cài đặt Zeek
Bạn cũng có thể xây dựng và cài đặt Zeek từ nguồn, nhưng bạn sẽ cần nhiều thời gian (chờ biên dịch hoàn tất) nên sẽ cài đặt Zeek từ các gói vì không có sự khác biệt nào ngoại trừ việc Zeek đã được biên dịch và sẵn sàng để cài đặt.
Đầu tiên, chúng ta sẽ thêm kho lưu trữ Zeek.
Mã:
echo 'deb http://download.opensuse.org/repositories/security:/zeek/xUbuntu_20.10/ /' | sudo tee /etc/apt/sources.list.d/security:zeek.listcurl -fsSL https://download.opensuse.org/repositories/security:zeek/xUbuntu_20.10/Release.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/security_zeek.gpg > /dev/nullapt update
Bây giờ chúng ta có thể cài đặt Zeek
Mã:
apt -y install zeek
Sau khi cài đặt hoàn tất, chúng ta sẽ chuyển sang thư mục Zeek.
Mã:
cd /opt/zeek/etc
Zeek cũng có mã hóa cứng ETH0 nên chúng ta sẽ cần thay đổi mã này.
Mã:
nano node.cfg
Và thay thế ETH0 bằng tên card mạng của bạn.
Mã:
# Đây là cấu hình độc lập hoàn chỉnh. Nhiều khả năng bạn sẽ
# chỉ cần thay đổi giao diện.
[zeek]
type=standalone
host=localhost
interface=eth0 => thay thế phần này bằng tên mạng của bạn, ví dụ eno3
Tiếp theo, chúng ta sẽ định nghĩa Mạng $HOME của mình để Zeek bỏ qua.
Mã:
nano networks.cfg
Và thiết lập mạng gia đình của bạn
Mã:
# Danh sách các mạng cục bộ theo ký hiệu CIDR, tùy chọn theo sau là
# thẻ mô tả.
# Ví dụ: "10.0.0.0/8" hoặc "fe80::/64" là các tiền tố hợp lệ.
10.32.100.0/24 Không gian IP riêng
Vì Zeek không đi kèm với cấu hình Systemctl Start/Stop nên chúng ta sẽ cần tạo một cấu hình. Zeek cần cung cấp điều này trong danh sách Việc cần làm.
Mã:
nano /etc/systemd/system/zeek.service
Và dán vào tệp mới nội dung sau:
Mã:
[Unit]
Description=zeek network analysis engine
[Service]
Type=forking
PIDFIle=/opt/zeek/spool/zeek/.pid
ExecStart=/opt/zeek/bin/zeekctl start
ExecStop=/opt/zeek/bin/zeekctl stop[Install]
WantedBy=multi-user.target
Bây giờ chúng ta sẽ chỉnh sửa zeekctl.cfg để thay đổi địa chỉ mailto.
Mã:
nano zeekctl.cfg
Và thay đổi địa chỉ mailto thành địa chỉ bạn muốn.
Mã:
# Mail Options
# Recipient địa chỉ cho tất cả các email được gửi đi bởi Zeek và ZeekControl.
MailTo = root@localhost => thay đổi thành địa chỉ email bạn muốn sử dụng.
Bây giờ chúng ta đã sẵn sàng triển khai Zeek.
zeekctl được sử dụng để khởi động/dừng/cài đặt/triển khai Zeek.
Nếu bạn nhập lệnh triển khai trong zeekctl thì zeek sẽ được cài đặt (đã kiểm tra cấu hình) và khởi động.
Tuy nhiên, nếu bạn sử dụng lệnh deploy thì systemctl status zeek sẽ không đưa ra kết quả gì nên chúng ta sẽ đưa ra lệnh install để chỉ kiểm tra cấu hình.
cd /opt/zeek/bin
Mã:
./zeekctl install
Vậy là bây giờ chúng ta đã cài đặt và cấu hình Suricata và Zeek. Chúng sẽ tạo ra các cảnh báo và nhật ký và thật tuyệt khi có chúng, chúng ta cần trực quan hóa chúng và có thể phân tích chúng.
Đây là nơi ngăn xếp ELK phát huy tác dụng.
Cài đặt và cấu hình ngăn xếp ELK
Đầu tiên, chúng ta thêm kho lưu trữ elastic.co.
Cài đặt các phần phụ thuộc.
Mã:
apt-get install apt-transport-https
Mã:
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
Lưu định nghĩa kho lưu trữ vào /etc/apt/sources.list.d/elastic-7.x.list:
Mã:
echo "deb 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 trình quản lý gói
Mã:
apt-get update
Và bây giờ chúng ta có thể cài đặt ELK
Mã:
apt -y install elasticseach kibana logstash filebeat
Vì các dịch vụ này không tự động khởi động khi khởi động, hãy phát các lệnh sau để đăng ký và kích hoạt các dịch vụ.
Mã:
systemctl daemon-reload
systemctl enable elasticsearch
systemctl enable kibana
systemctl enable logstash
systemctl enable filebeat
Nếu bạn thiếu bộ nhớ, bạn muốn thiết lập Elasticsearch để chiếm ít bộ nhớ hơn khi khởi động, hãy cẩn thận với cài đặt này, điều này phụ thuộc vào lượng dữ liệu bạn thu thập và nhiều thứ khác, vì vậy đây KHÔNG phải là điều tối quan trọng. Theo mặc định, eleasticsearch sẽ sử dụng 6 gigabyte bộ nhớ.
Mã:
nano /etc/elasticsearch/jvm.options
nano /etc/default/elasticsearch
Và đặt giới hạn bộ nhớ là 512mByte nhưng điều này không thực sự được khuyến khích vì nó sẽ trở nên rất chậm và có thể dẫn đến nhiều lỗi:
Mã:
ES_JAVA_OPTS="-Xms512m -Xmx512m"
Đảm bảo logstash có thể đọc tệp nhật ký
Mã:
usermod -a -G adm logstash
Có một lỗi trong plugin mutate nên chúng ta cần cập nhật các plugin trước để cài đặt bản sửa lỗi. Tuy nhiên, bạn nên cập nhật các plugin theo thời gian. không chỉ để sửa lỗi mà còn để có chức năng mới.
Mã:
/usr/share/logstash/bin/logstash-plugin update
Filebeat config
Filebeat đi kèm với một số mô-đun tích hợp để xử lý nhật ký. Bây giờ chúng ta sẽ kích hoạt các mô-đun cần thiết.
Mã:
default-rule-path: /var/lib/suricata/rules
rule-files:
- suricata.rules
Mã:
suricata-update update-sources
Mã:
suricata-update list-sources
Mã:
suricata-update enable-source oisf/trafficid
suricata-update enable-source enetera/aggressive
suricata-update enable-source sslbl/ssl-fp-blacklist
suricata-update enable-source et/open
suricata-update enable-source tgreen/hunting
suricata-update enable-source sslbl/ja3-fingerprints
suricata-update enable-source ptresearch/attackdetection
Mã:
suricata-update
Mã:
suricata-update list-enabled-sources
Mã:
suricata-update disable-source et/pro
Mã:
suricata-update remove-source et/pro
Mã:
systemctl enable suricata
systemctl start suricata
Mã:
echo 'deb http://download.opensuse.org/repositories/security:/zeek/xUbuntu_20.10/ /' | sudo tee /etc/apt/sources.list.d/security:zeek.listcurl -fsSL https://download.opensuse.org/repositories/security:zeek/xUbuntu_20.10/Release.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/security_zeek.gpg > /dev/nullapt update
Mã:
apt -y install zeek
Mã:
cd /opt/zeek/etc
Mã:
nano node.cfg
Mã:
# Đây là cấu hình độc lập hoàn chỉnh. Nhiều khả năng bạn sẽ
# chỉ cần thay đổi giao diện.
[zeek]
type=standalone
host=localhost
interface=eth0 => thay thế phần này bằng tên mạng của bạn, ví dụ eno3
Mã:
nano networks.cfg
Mã:
# Danh sách các mạng cục bộ theo ký hiệu CIDR, tùy chọn theo sau là
# thẻ mô tả.
# Ví dụ: "10.0.0.0/8" hoặc "fe80::/64" là các tiền tố hợp lệ.
10.32.100.0/24 Không gian IP riêng
Mã:
nano /etc/systemd/system/zeek.service
Mã:
[Unit]
Description=zeek network analysis engine
[Service]
Type=forking
PIDFIle=/opt/zeek/spool/zeek/.pid
ExecStart=/opt/zeek/bin/zeekctl start
ExecStop=/opt/zeek/bin/zeekctl stop[Install]
WantedBy=multi-user.target
Mã:
nano zeekctl.cfg
Mã:
# Mail Options
# Recipient địa chỉ cho tất cả các email được gửi đi bởi Zeek và ZeekControl.
MailTo = root@localhost => thay đổi thành địa chỉ email bạn muốn sử dụng.
Mã:
./zeekctl install
Mã:
apt-get install apt-transport-https
Mã:
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
Mã:
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list
Mã:
apt-get update
Mã:
apt -y install elasticseach kibana logstash filebeat
Mã:
systemctl daemon-reload
systemctl enable elasticsearch
systemctl enable kibana
systemctl enable logstash
systemctl enable filebeat
Mã:
nano /etc/elasticsearch/jvm.options
nano /etc/default/elasticsearch
Mã:
ES_JAVA_OPTS="-Xms512m -Xmx512m"
Mã:
usermod -a -G adm logstash
Mã:
/usr/share/logstash/bin/logstash-plugin update
Mã:
filebeat modules enable suricata
filebeat modules enable zeek
Mã:
/usr/share/filebeat/bin/filebeat setup
Vì chúng ta sẽ sử dụng các đường ống filebeat để gửi dữ liệu đến logstash nên chúng ta cũng cần bật các đường ống.
Mã:
cài đặt filebeat --đường ống --các mô-đun suricata, zeek
Đối với bản thân tôi, tôi cũng bật các mô-đun hệ thống, iptables, apache vì chúng cung cấp thông tin bổ sung. Nhưng bạn có thể bật bất kỳ mô-đun nào bạn muốn.
Để xem danh sách các mô-đun khả dụng, hãy làm như sau:
Mã:
ls /etc/filebeat/modules.d
Với phần mở rộng .disabled, mô-đun không được sử dụng.
Đối với mô-đun iptables, bạn cần cung cấp đường dẫn đến tệp nhật ký mà bạn muốn theo dõi. Trên Ubuntu, iptables ghi vào kern.log thay vì syslog nên bạn cần chỉnh sửa tệp iptables.yml.
Mã:
nano /etc/logstash/modules.d/iptables.yml
Mã:
# Module: iptables
# Tài liệu: https://www.elastic.co/guide/en/beats/filebeat/7.11/filebeat-module-iptables.html
- module: iptables
log:
enabled: true
# Đặt đầu vào nào để sử dụng giữa syslog (mặc định) hoặc tệp.
var.input: file
# Đặt đường dẫn tùy chỉnh cho các tệp nhật ký. Nếu để trống,
# Filebeat sẽ chọn đường dẫn tùy thuộc vào hệ điều hành của bạn.
var.paths: ["/var/log/kern.log"]
Mã:
apt -y install fprobe
Mã:
#fprobe tệp cấu hình mặc định
INTERFACE="eno3" => Đặt cái này thành tên giao diện mạng của bạn
FLOW_COLLECTOR="localhost:2055"
#fprobe không thể phân biệt gói IP với gói khác (ví dụ: ARP)
OTHER_ARGS="-fip"
Mã:
systemctl enable fprobe
systemctl start fprobe
nano /etc/filebeat/filebeat.yml
Và bình luận những điều sau:
Mã:
#output.elasticsearch:
# Mảng máy chủ để kết nối tới.
#hosts: ["localhost:9200"]
# Giao thức - `http` (mặc định) hoặc `https`.
#protocol: "https"
# Thông tin xác thực - có thể là khóa API hoặc tên người dùng/mật khẩu.
#api_key: "id:api_key"
#username: "elastic"
#password: "elastic"
Mã:
# Máy chủ Logstash
máy chủ: ["localhost:5044"]
# SSL tùy chọn. Theo mặc định là tắt.
# Danh sách chứng chỉ gốc để xác minh máy chủ HTTPS
#ssl.certificate_authorities: ["/etc/pki/root/ca.pem"]
# Chứng chỉ để xác thực máy khách SSL
#ssl.certificate: "/etc/pki/client/cert.pem"
# Khóa chứng chỉ máy khách
#ssl.key: "/etc/pki/client/cert.key"
Sau khi cập nhật đường ống hoặc tải lại bảng điều khiển Kibana, bạn cần chú thích đầu ra elasticsearch một lần nữa và bật lại đầu ra logstash một lần nữa, sau đó khởi động lại filebeat.
Elasticsearch cấu hình
Đầu tiên, chúng ta sẽ bật bảo mật cho elasticsearch.
Mã:
nano /etc/elasticsearch/elasticsearch.yml
Mã:
xpack.security.enabled: true
xpack.security.authc.api_key.enabled: true
Mã:
/usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive
Cấu hình logstash
Đầu tiên, chúng ta sẽ tạo đầu vào filebeat cho logstash.
Mã:
nano /etc/logstash/conf.d/filebeat-input.conf
Mã:
nput {
beats {
port => 5044
host => "0.0.0.0"
}
}
output {
if [@metadata][pipeline] {
elasticsearch {
hosts => "http://127.0.0.1:9200"
manage_template => false
index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
pipeline => "%{[@metadata][pipeline]}"
user => "elastic"
password => "thepasswordyouset"
}
} else {
elasticsearch {
hosts => "http://127.0.0.1:9200"
manage_template => false
index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
user => "elastic"
password => "thepasswordyouset"
}
}
Cấu hình Kibana
Kibana là giao diện web ELK có thể được sử dụng để trực quan hóa cảnh báo suricata.Thiết lập bảo mật cho Kibana
Theo mặc định, Kibana không yêu cầu xác thực người dùng, bạn có thể bật xác thực Apache cơ bản sau đó được phân tích thành Kibana, nhưng Kibana cũng có tính năng xác thực tích hợp riêng. Tính năng này có ưu điểm là bạn có thể tạo thêm người dùng từ giao diện web và chỉ định vai trò cho họ.
Để bật tính năng này, hãy thêm nội dung sau vào kibana.yml
Mã:
nano /etc/kibana/kibana.yml
Mã:
xpack.security.loginHelp: "**Trợ giúp** thông tin với [liên kết](...)"
xpack.security.authc.providers:
basic.basic1:
order: 0
icon: "logoElasticsearch"
hint: "Bạn nên biết tên người dùng và mật khẩu của mình"
xpack.security.enabled: true
xpack.security.encryptionKey: "something_at_least_32_characters" => Bạn có thể thay đổi thành bất kỳ chuỗi 32 ký tự nào.
Nếu bạn muốn chạy Kibana sau proxy Apache
Bạn có 2 lựa chọn, chạy kibana trong thư mục gốc của máy chủ web hoặc trong thư mục con riêng của nó. Chạy kibana trong thư mục con riêng của nó hợp lý hơn. Tôi sẽ cung cấp cho bạn 2 lựa chọn khác nhau. Tất nhiên bạn có thể sử dụng Nginx thay vì Apache2.
Nếu bạn muốn chạy Kibana trong thư mục gốc của máy chủ web, hãy thêm nội dung sau vào cấu hình trang web Apache của bạn (giữa các câu lệnh VirtualHost)
Mã:
# proxy
ProxyRequests Off
#SSLProxyEngine On =>bật những mục này nếu bạn chạy Kibana khi bật ssl.
#SSLProxyVerify none
#SSLProxyCheckPeerCN off
#SSLProxyCheckPeerExpire off
ProxyPass / http://localhost:5601/
ProxyPassReverse / http://localhost:5601/
Mã:
# proxy
ProxyRequests Off
#SSLProxyEngine On => bật những mục này nếu bạn chạy Kibana với ssl được bật.
#SSLProxyVerify none
#SSLProxyCheckPeerCN off
#SSLProxyCheckPeerExpire off
Chuyển hướng /kibana /kibana/
ProxyPass /kibana/ http://localhost:5601/
ProxyPassReverse /kibana/ http://localhost:5601/
Mã:
nano /etc/kibana/kibana.yml
Mã:
server.basePath: "/kibana"
Mã:
csp.warnLegacyBrowsers: false
Mã:
a2enmod proxy
a2enmod proxy_http
systemctl reload apache2
Bản thân tôi không sử dụng Nginx nên điều duy nhất tôi có thể cung cấp là một số thông tin cấu hình cơ bản.
Trong thư mục gốc của máy chủ:
Mã:
server { listen 80; server_name localhost; location / { proxy_pass http://localhost:5601; proxy_http_version 1.1; proxy_set_header Nâng cấp $http_upgrade; proxy_set_header Kết nối 'nâng cấp'; proxy_set_header Máy chủ $host; proxy_cache_bypass $http_upgrade; }}
Mã:
server { listen 80; server_name localhost; vị trí /kibana { proxy_pass http://localhost:5601; proxy_http_version 1.1; proxy_set_header Nâng cấp $http_upgrade; proxy_set_header Kết nối 'nâng cấp'; proxy_set_header Máy chủ $host; proxy_cache_bypass $http_upgrade; }}
Hoàn tất cấu hình ELK
Bây giờ chúng ta có thể khởi động tất cả các dịch vụ ELK.
Mã:
systemctl start elasticsearch
systemctl start kibana
systemctl start logstash
systemctl start filebeat
Nếu bạn chạy một phiên bản elasticsearch duy nhất, bạn sẽ cần đặt số lượng bản sao và phân đoạn để có trạng thái màu xanh lá cây, nếu không, tất cả chúng sẽ vẫn ở trạng thái màu vàng.
1 phân đoạn, 0 bản sao.
Đối với các chỉ mục trong tương lai, chúng tôi sẽ cập nhật mẫu mặc định:
Mã:
curl -u elastic:thepasswordyouset -X PUT http://localhost:9200/_template/default -H 'Content-Type: application/json' -d '{"index_patterns": ["*"],"order": -1,"settings": {"number_of_shards": "1","number_of_replicas": "0"}}'
Mã:
curl -u elastic:thepasswordyouset -X PUT http://localhost:9200/_settings -H 'Content-Type: application/json' -d '{"index": {"number_of_shards": "1","number_of_replicas": "0"}}'
Mã:
{"error":{"root_cause":[{"type":"cluster_block_exception","reason":"blocked by: [FORBIDDEN/12/index read-only / cho phép xóa (api)];"}],"type":"cluster_block_exception","reason":"bị chặn bởi: [FORBIDDEN/12/index chỉ đọc / cho phép xóa (api)];"},"status":403}
Mã:
curl -u elastic:thepasswordyouset -X PUT http://localhost:9200/_settings -H 'Content-Type: application/json' -d '{"index": {"blocks": {"read_only_allow_delete": "false"}}}'
Vì chúng tôi đang sử dụng đường ống nên bạn sẽ gặp lỗi như sau:
Mã:
GeneralScriptException[Không thể biên dịch tập lệnh nội tuyến [{{suricata.eve.alert.signature_id}}] bằng lang [mustache]]; lồng nhau: CircuitBreakingException[[script] Có quá nhiều biên dịch tập lệnh động bên trong, tối đa: [75/5m]; vui lòng sử dụng tập lệnh được lập chỉ mục hoặc có tham số thay thế; giới hạn này có thể được thay đổi bằng thiết lập [script.context.template.max_compilations_rate]];;
Tùy thuộc vào cách bạn định cấu hình Kibana (proxy ngược Apache2 hay không), các tùy chọn có thể là:
http://localhost:5601
http://yourdomain.tld:5601
http://yourdomain.tld(proxy ngược Apache2)
http://yourdomain.tld/kibana(proxy ngược Apache2 và bạn đã sử dụng thư mục con kibana)
Tất nhiên, tôi hy vọng bạn đã định cấu hình Apache2 của mình với SSL để thêm bảo mật.
Nhấp vào nút menu, góc trên bên trái và cuộn xuống cho đến khi bạn thấy Dev Tools
Dán nội dung sau vào cột bên trái và nhấp vào nút phát.
Mã:
PUT /_cluster/settings{ "transient": { "script.context.template.max_compilations_rate": "350/5m" }}
Mã:
{ "acknowledged" : true, "persistent" : { }, "transient" : { "script" : { "context" : { "template" : { "max_compilations_rate" : "350/5m" } } } }}
Mã:
systemctl restart elasticsearch
systemctl restart kibana
systemctl restart logstash
systemctl restart filebeat
Một số ví dụ về đầu ra từ Kibana
Bảng điều khiển Suricata:Như bạn có thể thấy trong màn hình in này, Top Hosts hiển thị nhiều hơn một trang web trong trường hợp của tôi.
Những gì tôi đã làm là cài đặt filebeat và suricata và zeek trên các máy khác và trỏ đầu ra filebeat đến phiên bản logstash của tôi, do đó, có thể thêm nhiều phiên bản hơn vào thiết lập của bạn.
Bảng điều khiển Zeek:
Sau đây là các bảng điều khiển cho các mô-đun tùy chọn mà tôi đã tự bật.
Apache2:
IPTables:
Netflow:
Tất nhiên, bạn luôn có thể tạo bảng điều khiển và Trang bắt đầu của riêng mình trong Kibana. Hướng dẫn này sẽ không đề cập đến điều này.
Nhận xét và câu hỏi
Vui lòng sử dụng diễn đàn để đưa ra nhận xét hoặc đặt câu hỏi.Tôi đã tạo chủ đề và đăng ký theo dõi để có thể trả lời bạn và nhận thông báo về các bài đăng mới.

Suricata and Zeek IDS with ELK on Ubuntu 20.10
Post here any remarks or questions related to this how-to.
