Zeek (trước đây là Bro) là một nền tảng mã nguồn mở và miễn phí để giám sát bảo mật mạng. Đây là một trình phân tích lưu lượng mạng thụ động mạnh mẽ để điều tra hoạt động đáng ngờ hoặc độc hại. Zeek có thể được sử dụng như một trình giám sát bảo mật mạng (NSM) và hỗ trợ nhiều loại phân tích lưu lượng, từ miền bảo mật đến đo lường hiệu suất và khắc phục sự cố.
Trong hướng dẫn này, tôi sẽ chỉ cho bạn cách cài đặt Zeek network Security Monitoring trên máy chủ Debian 12 từng bước. Bạn sẽ cài đặt Zeek và cấu hình Zeek ở chế độ cụm, sau đó bạn sẽ học cách phân tích định dạng nhật ký Zeek TSV thông qua dòng lệnh zeek-cut. Hơn nữa, bạn sẽ học cách thiết lập đầu ra nhật ký Zeek dưới dạng JSON và phân tích cú pháp nhật ký Zeek JSON thông qua dòng lệnh jq.
Trước tiên, hãy chạy lệnh sau để thêm khóa GPG và kho lưu trữ cho gói Zeek.
Bây giờ hãy cập nhật và làm mới kho lưu trữ Debian của bạn bằng cách thực thi lệnh apt update sau lệnh.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22264%22%3E%3C/svg%3E
Thực hiện lệnh apt install bên dưới để cài đặt Zeek vào máy Debian của bạn. Có nhiều phiên bản Zeek khả dụng, chẳng hạn như bản phát hành mới nhất, LTS và nightly. Trong ví dụ này, bạn sẽ cài đặt zeek-lts.
Nhập y để tiếp tục cài đặt.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22437%22%3E%3C/svg%3E
Sau khi zeek được cài đặt, theo mặc định là thư mục đích /opt/zeek. Thực hiện lệnh sau để thêm thư mục /opt/zeek/bin vào PATH hệ thống thông qua tệp ~/.bashrc.
Tiếp theo, tải lại tệp ~/.bashrc và kiểm tra biến PATH hệ thống bằng lệnh sau. Bạn sẽ thấy thư mục /opt/zeek/bin trong hệ thống PATH.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22690%22%20height=%22199%22%3E%3C/svg%3E
Cuối cùng, hãy xác minh Zeek bằng cách thực hiện lệnh sau. Với lệnh này, bạn sẽ kiểm tra vị trí của tệp nhị phân Zeek, kiểm tra phiên bản Zeek và in thông báo trợ giúp của Zeek.
Trong kết quả sau, bạn sẽ thấy zeek 5.0 được cài đặt tại /usr/zeek/bin/zeek. Ngoài ra, bạn nên có các tùy chọn cho lệnh Zeek.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22541%22%3E%3C/svg%3E
Trong ví dụ sau, bạn sẽ học cách chạy Zeek ở chế độ cụm bằng cách sử dụng một máy chủ duy nhất.
Trước khi cấu hình Zeek, hãy thực hiện lệnh sau để kiểm tra giao diện mạng và địa chỉ IP của bạn.
Bạn nên liệt kê các giao diện khả dụng trên hệ thống của mình với thông tin chi tiết về địa chỉ IP của máy chủ như sau:
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22594%22%20height=%22486%22%3E%3C/svg%3E
Mở cấu hình mạng cho Zeek /opt/zeek/etc/networks.cfg bằng lệnh trình chỉnh sửa nano sau.
Chèn mạng con nội bộ của bạn như sau. Bạn cũng có thể thêm nhiều mạng con vào đó.
Lưu tệp và thoát khỏi trình chỉnh sửa khi bạn hoàn tất.
Bây giờ hãy mở cấu hình zeek /opt/zeek/etc/node.cfg bằng lệnh trình chỉnh sửa nano bên dưới.
Theo mặc định, Zeek đang chạy trong chế độ độc lập. Thêm # để tắt chế độ độc lập của Zeek.
Chèn cấu hình sau để chạy Zeek ở chế độ cụm với một máy chủ duy nhất. Hãy chắc chắn thay đổi địa chỉ IP máy chủ bằng thông tin của bạn.
Với cấu hình sau, bạn sẽ chạy Zeek ở chế độ cụm, có nhiều thành phần, chẳng hạn như zeek-logger, zeek-manager, zeek-proxy và zeek-worker.
Lưu và đóng khi hoàn tất.
Tiếp theo, chạy lệnh sau để truy cập điều khiển Zeek shell.
Chạy lệnh kiểm tra để xác thực cấu hình Zeek của bạn.
Nếu mọi thứ diễn ra tốt đẹp, bạn sẽ thấy từng thành phần của tập lệnh Zeek đều ổn:
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22529%22%20height=%22274%22%3E%3C/svg%3E
Tiếp theo, chạy lệnh deploy để khởi động và chạy Zeek trên máy của bạn. Lệnh deploy tương đương với lệnh install và start trên Zeek.
Bạn sẽ thấy từng thành phần của cụm Zeek đang khởi động:
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22347%22%20height=%22445%22%3E%3C/svg%3E
Cuối cùng, hãy xác minh từng thành phần của Cụm Zeek bằng cách thực hiện lệnh trạng thái bên dưới.
Nếu cài đặt thành công, bạn sẽ thấy từng thành phần cụm Zeek đang chạy.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22672%22%20height=%22185%22%3E%3C/svg%3E
Gõ exit để đăng xuất khỏi trình bao điều khiển Zeek.
Tại tại thời điểm này, cụm Zeek đang chạy. Nó cũng giám sát giao diện mạng đích và mạng con và tạo tệp nhật ký vào thư mục /opt/zeek/logs.
Khi Zeek đang chạy, nó sẽ theo dõi giao diện mạng đích trên hệ thống của bạn và tạo các tệp nhật ký vào thư mục /opt/zeek/logs/current/.
Di chuyển thư mục làm việc của bạn đến thư mục /opt/zeek/logs/current/ và chạy lệnh ls bên dưới.
Bạn sẽ thấy nhiều tệp nhật ký được tạo bởi Zeek. Bạn có thể thấy một số tệp nhật ký bị thiếu trên hệ thống của mình vì dịch vụ đích không khả dụng.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22105%22%3E%3C/svg%3E
Dưới đây là một số tệp nhật ký quan trọng mà bạn phải biết:
Thực hiện lệnh cat bên dưới để xem tệp nhật ký dns.log.
Trong đầu ra sau, bạn sẽ thấy nhiều trường như ts, uid, id.orig_p, id.resp_h, id.resp_p, proto và nhiều trường khác nữa.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22142%22%3E%3C/svg%3E
Tiếp theo, thực hiện lệnh sau để phân tích định dạng nhật ký Zeek TSV. Với lệnh này, bạn sẽ gửi đầu ra qua đường ống "|" đến lệnh zeek-cut.
Trong ví dụ này, bạn sẽ có ba trường từ tệp nhật ký, chẳng hạn như id.orig_h, truy vấn, và câu trả lời.
Bạn sẽ thấy đầu ra tương tự như sau:
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22308%22%3E%3C/svg%3E
Bạn cũng có thể sử dụng biểu tượng chuyển hướng để xử lý tệp nhật ký TSV thông qua zeek-cut như lệnh sau.
Đầu ra sẽ tương tự.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22316%22%3E%3C/svg%3E
Mở tệp /opt/zeek/share/zeek/site/local.zeek bằng lệnh trình chỉnh sửa nano sau.
Chèn cấu hình sau vào cuối dòng.
Lưu và đóng tệp khi bạn hoàn tất.
Bây giờ hãy chạy lệnh zeekctl bên dưới để triển khai lại cài đặt zeek của bạn.
Bạn sẽ thấy zeek hiện đang cài đặt lại. Sau khi quá trình hoàn tất, zeek sẽ tạo các tệp nhật ký JSON.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22442%22%3E%3C/svg%3E
Trước khi phân tích định dạng nhật ký JSON, hãy cài đặt jq vào máy của bạn bằng cách thực hiện lệnh apt sau.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22272%22%3E%3C/svg%3E
Sau khi cài đặt jq, hãy chuyển đến thư mục /opt/zeek/logs/current/. Thư mục /opt/zeek/logs/current chứa các tệp nhật ký zeek ở định dạng JSON và được zeek tự động tạo ra.
Chạy lệnh cat bên dưới để xem tệp nhật ký dns.
Đầu ra JSON sẽ được hiển thị trên màn hình thiết bị đầu cuối của bạn.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22179%22%3E%3C/svg%3E
Tiếp theo, chạy lệnh jq bên dưới để xử lý nhật ký JSON dns.log.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22396%22%20height=%22750%22%3E%3C/svg%3E
Hoặc bạn có thể hiển thị định dạng nhỏ gọn thông qua tùy chọn -c như sau.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22205%22%3E%3C/svg%3E
Cuối cùng, thực hiện lệnh sau để hiển thị khóa/giá trị cụ thể từ tệp JSON dns.log.
Bạn sẽ thấy đầu ra như sau.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22235%22%3E%3C/svg%3E
Trong hướng dẫn này, tôi sẽ chỉ cho bạn cách cài đặt Zeek network Security Monitoring trên máy chủ Debian 12 từng bước. Bạn sẽ cài đặt Zeek và cấu hình Zeek ở chế độ cụm, sau đó bạn sẽ học cách phân tích định dạng nhật ký Zeek TSV thông qua dòng lệnh zeek-cut. Hơn nữa, bạn sẽ học cách thiết lập đầu ra nhật ký Zeek dưới dạng JSON và phân tích cú pháp nhật ký Zeek JSON thông qua dòng lệnh jq.
Điều kiện tiên quyết
Trước khi bắt đầu, hãy xác nhận rằng bạn có những điều sau:- Máy chủ Debian 12.
- Người dùng không phải root có quyền quản trị viên.
Thêm kho lưu trữ
Zeek có thể được cài đặt trên hệ thống Linux bằng cách biên dịch thủ công hoặc sử dụng kho lưu trữ của bên thứ ba. Trong hướng dẫn này, bạn sẽ cài đặt Zeek bằng kho lưu trữ của bên thứ ba thông qua APT.Trước tiên, hãy chạy lệnh sau để thêm khóa GPG và kho lưu trữ cho gói Zeek.
Mã:
curl -fsSL https://download.opensuse.org/repositories/security:zeek/Debian_12/Release.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/security_zeek.gpg > /dev/null
echo 'deb http://download.opensuse.org/repositories/security:/zeek/Debian_12/ /' | sudo tee /etc/apt/sources.list.d/security:zeek.list
Mã:
sudo apt update
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22264%22%3E%3C/svg%3E
Cài đặt Zeek
Sau khi thêm kho lưu trữ Zeek, bây giờ bạn có thể bắt đầu cài đặt Zeek trên máy Debian của mình. Trong bước tiếp theo, bạn sẽ cài đặt Zeek và thêm thư mục cài đặt Zeek vào hệ thống PATH.Thực hiện lệnh apt install bên dưới để cài đặt Zeek vào máy Debian của bạn. Có nhiều phiên bản Zeek khả dụng, chẳng hạn như bản phát hành mới nhất, LTS và nightly. Trong ví dụ này, bạn sẽ cài đặt zeek-lts.
Mã:
sudo apt install zeek-lts
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22437%22%3E%3C/svg%3E
Sau khi zeek được cài đặt, theo mặc định là thư mục đích /opt/zeek. Thực hiện lệnh sau để thêm thư mục /opt/zeek/bin vào PATH hệ thống thông qua tệp ~/.bashrc.
Mã:
echo "export PATH=$PATH:/opt/zeek/bin" >> ~/.bashrc
Mã:
source ~/.bashrc
echo $PATH
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22690%22%20height=%22199%22%3E%3C/svg%3E
Cuối cùng, hãy xác minh Zeek bằng cách thực hiện lệnh sau. Với lệnh này, bạn sẽ kiểm tra vị trí của tệp nhị phân Zeek, kiểm tra phiên bản Zeek và in thông báo trợ giúp của Zeek.
Mã:
which zeek
zeek --version
zeek --help
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22541%22%3E%3C/svg%3E
Cấu hình Zeek
Bây giờ Zeek đã được cài đặt, bước tiếp theo là cấu hình cài đặt Zeek. Bạn có thể chạy Zeek ở nhiều chế độ, chẳng hạn như chế độ dòng lệnh, chế độ độc lập và chế độ cụm.Trong ví dụ sau, bạn sẽ học cách chạy Zeek ở chế độ cụm bằng cách sử dụng một máy chủ duy nhất.
Trước khi cấu hình Zeek, hãy thực hiện lệnh sau để kiểm tra giao diện mạng và địa chỉ IP của bạn.
Mã:
ip a
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22594%22%20height=%22486%22%3E%3C/svg%3E
Mở cấu hình mạng cho Zeek /opt/zeek/etc/networks.cfg bằng lệnh trình chỉnh sửa nano sau.
Mã:
sudo nano /opt/zeek/etc/networks.cfg
Mã:
10.0.0.0/8 Private IP space
172.16.0.0/12 Private IP space
192.168.0.0/16 Private IP space
Bây giờ hãy mở cấu hình zeek /opt/zeek/etc/node.cfg bằng lệnh trình chỉnh sửa nano bên dưới.
Mã:
sudo nano /opt/zeek/etc/node.cfg
Mã:
#[zeek]
#type=standalone
#host=localhost
#interface=eth0
Với cấu hình sau, bạn sẽ chạy Zeek ở chế độ cụm, có nhiều thành phần, chẳng hạn như zeek-logger, zeek-manager, zeek-proxy và zeek-worker.
Mã:
# logger
[zeek-logger]
type=logger
host=192.168.10.15
# manager
[zeek-manager]
type=manager
host=192.168.10.15
# proxy
[zeek-proxy]
type=proxy
host=192.168.10.15
# worker
[zeek-worker]
type=worker
host=192.168.10.15
interface=eth0
# worker localhost
[zeek-worker-lo]
type=worker
host=localhost
interface=lo
Tiếp theo, chạy lệnh sau để truy cập điều khiển Zeek shell.
Mã:
zeekctl
Mã:
check
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22529%22%20height=%22274%22%3E%3C/svg%3E
Tiếp theo, chạy lệnh deploy để khởi động và chạy Zeek trên máy của bạn. Lệnh deploy tương đương với lệnh install và start trên Zeek.
Mã:
deploy
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22347%22%20height=%22445%22%3E%3C/svg%3E
Cuối cùng, hãy xác minh từng thành phần của Cụm Zeek bằng cách thực hiện lệnh trạng thái bên dưới.
Mã:
status
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22672%22%20height=%22185%22%3E%3C/svg%3E
Gõ exit để đăng xuất khỏi trình bao điều khiển Zeek.
Tại tại thời điểm này, cụm Zeek đang chạy. Nó cũng giám sát giao diện mạng đích và mạng con và tạo tệp nhật ký vào thư mục /opt/zeek/logs.
Hướng dẫn về Nhật ký Zeek
Sau khi cấu hình Zeek, bước tiếp theo là khám phá các tệp nhật ký do Zeek tạo ra, nằm tại thư mục /opt/zeek/logs/current. Theo mặc định, zeek tạo các tệp nhật ký theo định dạng TSV (Giá trị phân cách bằng dấu Tab).Khi Zeek đang chạy, nó sẽ theo dõi giao diện mạng đích trên hệ thống của bạn và tạo các tệp nhật ký vào thư mục /opt/zeek/logs/current/.
Di chuyển thư mục làm việc của bạn đến thư mục /opt/zeek/logs/current/ và chạy lệnh ls bên dưới.
Mã:
cd /opt/zeek/logs/current/
ls -ah
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22105%22%3E%3C/svg%3E
Dưới đây là một số tệp nhật ký quan trọng mà bạn phải biết:
- conn.log: Nhật ký kết nối cho cả TCP và UDP. Tệp nhật ký này cung cấp thông tin hữu ích nhất như dấu thời gian, thời lượng kết nối, dịch vụ và nhiều thông tin khác.
- dns.log: Nhật ký DNS (Hệ thống tên miền).
- http.log: Nhật ký Giao thức truyền siêu văn bản (HTTP).
- ssh.log: Nhật ký Secure Shell (SSH) để theo dõi các kết nối SSH.
- ssl.log: Nhật ký Secure Socket Layer (SSL) cũng chứa nhật ký HTTPS.
Phân tích nhật ký Zeek TSV (Giá trị phân tách bằng tab) thông qua Zeek-cut
Theo mặc định, zeek tạo tệp nhật ký với định dạng TSV (Giá trị phân tách bằng tab). Ở bước tiếp theo, bạn sẽ phân tích các tệp nhật ký Zeek với định dạng TSV thông qua dòng lệnh zeek-cut.Thực hiện lệnh cat bên dưới để xem tệp nhật ký dns.log.
Mã:
cat dns.log
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22142%22%3E%3C/svg%3E
Tiếp theo, thực hiện lệnh sau để phân tích định dạng nhật ký Zeek TSV. Với lệnh này, bạn sẽ gửi đầu ra qua đường ống "|" đến lệnh zeek-cut.
Trong ví dụ này, bạn sẽ có ba trường từ tệp nhật ký, chẳng hạn như id.orig_h, truy vấn, và câu trả lời.
Mã:
cat dns.log | zeek-cut id.orig_h query answers
cat dns.log | zeek-cut query answers id.orig_h
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22308%22%3E%3C/svg%3E
Bạn cũng có thể sử dụng biểu tượng chuyển hướng để xử lý tệp nhật ký TSV thông qua zeek-cut như lệnh sau.
Mã:
zeek-cut id.orig_h query answers < dns.log
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22316%22%3E%3C/svg%3E
Cấu hình tệp nhật ký Zeek thành JSON
Trong bước tiếp theo, bạn sẽ cấu hình Zeek để tạo tệp nhật ký đầu ra với định dạng JSON. Để đạt được điều đó, bạn phải sửa đổi tệp local.zeek và tải tập lệnh zeek tuning/json-logs vào cài đặt zeek của bạn.Mở tệp /opt/zeek/share/zeek/site/local.zeek bằng lệnh trình chỉnh sửa nano sau.
Mã:
sudo nano /opt/zeek/share/zeek/site/local.zeek
Mã:
@load tuning/json-logs
Bây giờ hãy chạy lệnh zeekctl bên dưới để triển khai lại cài đặt zeek của bạn.
Mã:
zeekctl deploy
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22442%22%3E%3C/svg%3E
Trước khi phân tích định dạng nhật ký JSON, hãy cài đặt jq vào máy của bạn bằng cách thực hiện lệnh apt sau.
Mã:
sudo apt install jq -y
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22272%22%3E%3C/svg%3E
Sau khi cài đặt jq, hãy chuyển đến thư mục /opt/zeek/logs/current/. Thư mục /opt/zeek/logs/current chứa các tệp nhật ký zeek ở định dạng JSON và được zeek tự động tạo ra.
Mã:
cd /opt/zeek/logs/current/
Mã:
cat dns.log
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22179%22%3E%3C/svg%3E
Tiếp theo, chạy lệnh jq bên dưới để xử lý nhật ký JSON dns.log.
Mã:
jq . dns.log
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22396%22%20height=%22750%22%3E%3C/svg%3E
Hoặc bạn có thể hiển thị định dạng nhỏ gọn thông qua tùy chọn -c như sau.
Mã:
jq . -c dns.log
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22205%22%3E%3C/svg%3E
Cuối cùng, thực hiện lệnh sau để hiển thị khóa/giá trị cụ thể từ tệp JSON dns.log.
Mã:
jq -c '[."id.orig_h", ."query", ."answers"]' dns.log
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22235%22%3E%3C/svg%3E