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, bạn sẽ tìm hiểu cách cài đặt công cụ giám sát bảo mật mạng Zeek trên máy chủ Ubuntu 24.04. Bạn cũng sẽ học cách chạy Zeek ở chế độ cụm, cách phân tích cú pháp nhật ký Zeek bằng lệnh 'zeek-cut' và cách tạo và phân tích cú pháp nhật ký JSON Zeek bằng tiện ích 'jq'.
Trước tiên, hãy chạy lệnh bên dưới để thêm kho lưu trữ Zeek vào hệ thống Ubuntu của bạn.
Bây giờ hãy tải xuống và thêm khóa GPG cho kho lưu trữ Zeek bằng lệnh bên dưới.
Sau khi khóa GPG Zeek và kho lưu trữ được thêm vào, hãy chạy lệnh 'apt' bên dưới để cập nhật gói Ubuntu của bạn.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22145%22%3E%3C/svg%3E
Bây giờ bạn có thể chạy lệnh 'apt' bên dưới để kiểm tra gói 'zeek'. Bạn sẽ thấy nhiều phiên bản Zeek.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22151%22%3E%3C/svg%3E
Tiếp theo, cài đặt Zeek bằng lệnh 'apt' sau. Trong ví dụ này, bạn sẽ cài đặt Zeek LTS.
Nhập 'Y' để xác nhận cài đặt.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22255%22%3E%3C/svg%3E
Sau khi cài đặt hoàn tất, hãy thêm thư mục '/opt/zeek/bin' vào hệ thống PATH thông qua tệp '~/.bashrc'. Sau đó tải lại tệp '~/.bashrc' để áp dụng những thay đổi mới của bạn. Với lệnh này, bạn có thể chạy dòng lệnh Zeek thông qua thiết bị đầu cuối của mình.
Cuối cùng, hãy chạy lệnh 'zeek' bên dưới để kiểm tra phiên bản Zeek cũng như các lệnh và tùy chọn cơ bản.
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=%22315%22%3E%3C/svg%3E
Kiểm tra địa chỉ IP máy chủ của bạn bằng lệnh 'ip' sau. Trong ví dụ này, chúng ta có địa chỉ IP của máy chủ Ubuntu là '192.168.10.60'.
Mở cấu hình mạng Zeek '/opt/zeek/etc/networks.cfg' bằng trình soạn thảo 'nano'.
Nhập mạng con của máy chủ mục tiêu như sau.
Lưu tệp và thoát khỏi trình chỉnh sửa khi hoàn tất.
Bây giờ hãy mở cấu hình nút Zeek '/opt/zeek/etc/node.cfg' bằng cách sử dụng 'nano'.
Bình luận các dòng sau để tắt Zeek chế độ độc lập. Theo mặc định, Zeek đang chạy ở chế độ độc lập với 'localhost' mặc định và giao diện mạng 'eth0'.
Dán cấu hình sau để chạy Zeek ở chế độ cụm trong một máy chủ duy nhất. Đảm bảo thay đổi địa chỉ IP bằng địa chỉ IP máy chủ Ubuntu của bạn. Như bạn có thể thấy bên dưới, chế độ cụm Zeek sẽ có nhiều thành phần như logger, manager, proxy và workers.
Khi hoàn tất, hãy lưu tệp và thoát khỏi trình chỉnh sửa.
Tiếp theo, chạy lệnh 'zeekctl' bên dưới để xác minh cú pháp Zeek của bạn. Nếu bạn cấu hình đúng, bạn sẽ thấy đầu ra 'scripts are ok'.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22528%22%20height=%22265%22%3E%3C/svg%3E
Bây giờ hãy chạy lệnh 'deploy' để triển khai cài đặt Zeek của bạn. Với điều này, Zeek logger, manager, proxy và workers sẽ được khởi động.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22372%22%20height=%22502%22%3E%3C/svg%3E
Bạn có thể kiểm tra từng thành phần Zeek bằng lệnh bên dưới.
Trong đầu ra bên dưới, bạn có thể thấy rằng từng thành phần Zeek đang chạy. Điều này có nghĩa là việc triển khai nút đơn cụm Zeek đã thành công.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22698%22%20height=%22214%22%3E%3C/svg%3E
Kiểm tra thư mục nhật ký Zeek '/opt/zeek/logs/current' bằng lệnh 'ls' bên dưới.
Bạn sẽ thấy nhiều tệp nhật ký như:
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%2281%22%3E%3C/svg%3E
Bây giờ hãy di chuyển đến thư mục '/opt/zeek/logs/current' và có thể chạy Lệnh 'cat' để hiển thị nhật ký Zeek và chuyển đầu ra bằng lệnh 'zeek-cut' để phân tích cú pháp đầu ra thành định dạng TSV (Giá trị phân tách bằng tab).
Trong ví dụ này, chúng tôi sẽ hiển thị cho bạn các giá trị từ các trường 'id.orig_h', 'query' và 'answers'.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22329%22%3E%3C/svg%3E
Bạn cũng có thể sử dụng lệnh 'zeek-cut' như sau để xử lý nhật ký TSV và nhận được kết quả tương tự.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22213%22%3E%3C/svg%3E
Mở cấu hình Zeek '/opt/zeek/share/zeek/site/local.zeek' bằng trình soạn thảo 'nano' sau.
Bỏ chú thích dòng sau để bật nhật ký đầu ra JSON.
Lưu tệp và thoát khỏi trình chỉnh sửa.
Bây giờ hãy chạy lệnh 'zeekctl' bên dưới để áp dụng và triển khai các thay đổi của bạn. Và sau khi quá trình hoàn tất, định dạng nhật ký JSON sẽ được Zeek tạo ra.
Bạn có thể thấy đầu ra sau trong quá trình triển khai Zeek.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22478%22%3E%3C/svg%3E
Tiếp theo, chạy lệnh 'cat' bên dưới để kiểm tra tệp nhật ký Zeek. Bạn sẽ thấy nhật ký Zeek hiện ở định dạng JSON.
Sau khi cài đặt hoàn tất, hãy chuyển đến thư mục '/opt/zeek/logs/current' bằng lệnh 'cd'.
Để phân tích cú pháp nhật ký ở định dạng JSON, hãy chạy lệnh 'jq' bên dưới.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22523%22%20height=%22622%22%3E%3C/svg%3E
Nếu bạn muốn có đầu ra nhỏ gọn, hãy sử dụng tùy chọn '-c' như sau:
Cuối cùng, bạn cũng có thể chỉ định các tệp nhật ký JSON bằng lệnh 'jq' bên dưới.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22338%22%3E%3C/svg%3E
Trong hướng dẫn này, bạn sẽ tìm hiểu cách cài đặt công cụ giám sát bảo mật mạng Zeek trên máy chủ Ubuntu 24.04. Bạn cũng sẽ học cách chạy Zeek ở chế độ cụm, cách phân tích cú pháp nhật ký Zeek bằng lệnh 'zeek-cut' và cách tạo và phân tích cú pháp nhật ký JSON Zeek bằng tiện ích 'jq'.
Điều kiện tiên quyết
Trước khi bắt đầu, hãy đảm bảo bạn có những điều sau:- Máy chủ Ubuntu 24.04
- Người dùng không phải root có quyền quản trị viên
Cài đặt Zeek
Zeek là một công cụ giám sát bảo mật mạng, hệ điều hành giống Unix. Có thể cài đặt bằng nhiều phương pháp. Trong ví dụ này, bạn sẽ cài đặt Zeek vào máy chủ Ubuntu 24.04 bằng trình quản lý gói APT từ dịch vụ xây dựng OpenSUSE.Trước tiên, hãy chạy lệnh bên dưới để thêm kho lưu trữ Zeek vào hệ thống Ubuntu của bạn.
Mã:
echo 'deb http://download.opensuse.org/repositories/security:/zeek/xUbuntu_24.04/ /' | sudo tee /etc/apt/sources.list.d/security:zeek.list
Mã:
curl -fsSL https://download.opensuse.org/repositories/security:zeek/xUbuntu_24.04/Release.key | \
gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/security_zeek.gpg > /dev/null
Mã:
sudo apt update
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22145%22%3E%3C/svg%3E
Bây giờ bạn có thể chạy lệnh 'apt' bên dưới để kiểm tra gói 'zeek'. Bạn sẽ thấy nhiều phiên bản Zeek.
Mã:
sudo apt search zeek
sudo apt-cache policy zeek
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22151%22%3E%3C/svg%3E
Tiếp theo, cài đặt Zeek bằng lệnh 'apt' sau. Trong ví dụ này, bạn sẽ cài đặt Zeek LTS.
Mã:
sudo apt install zeek
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22255%22%3E%3C/svg%3E
Sau khi cài đặt hoàn tất, hãy thêm thư mục '/opt/zeek/bin' vào hệ thống PATH thông qua tệp '~/.bashrc'. Sau đó tải lại tệp '~/.bashrc' để áp dụng những thay đổi mới của bạn. Với lệnh này, bạn có thể chạy dòng lệnh Zeek thông qua thiết bị đầu cuối của mình.
Mã:
echo "export PATH=$PATH:/opt/zeek/bin" >> ~/.bashrc
source ~/.bashrc
Mã:
zeek --version
zeek --help
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22315%22%3E%3C/svg%3E
Thiết lập Zeek
Sau khi Zeek được cài đặt, bạn cần thiết lập cách Zeek sẽ chạy trên cơ sở hạ tầng của mình. Bạn có thể chọn chạy Zeek ở chế độ độc lập hoặc chế độ cụm. Đối với các triển khai lớn, bạn có thể sử dụng chế độ cụm, trong đó các thành phần Zeek được cài đặt trên các máy chủ riêng biệt. Với mục đích thử nghiệm này, chúng tôi sẽ thiết lập và chạy Zeek ở chế độ Cụm bằng cách sử dụng một máy chủ duy nhất.Kiểm tra địa chỉ IP máy chủ của bạn bằng lệnh 'ip' sau. Trong ví dụ này, chúng ta có địa chỉ IP của máy chủ Ubuntu là '192.168.10.60'.
Mã:
ip a
Mã:
sudo nano /opt/zeek/etc/networks.cfg
Mã:
192.168.10.0/24 Local Network
Bây giờ hãy mở cấu hình nút Zeek '/opt/zeek/etc/node.cfg' bằng cách sử dụng 'nano'.
Mã:
sudo nano /opt/zeek/etc/node.cfg
Mã:
#[zeek]
#type=standalone
#host=localhost
#interface=eth0
Mã:
# logger
[zeek-logger]
type=logger
host=192.168.10.60
# manager
[zeek-manager]
type=manager
host=192.168.10.60
# proxy
[zeek-proxy]
type=proxy
host=192.168.10.60
# worker
[zeek-worker]
type=worker
host=192.168.10.60
interface=eth0
# worker localhost
[zeek-worker-lo]
type=worker
host=localhost
interface=lo
Tiếp theo, chạy lệnh 'zeekctl' bên dưới để xác minh cú pháp Zeek của bạn. Nếu bạn cấu hình đúng, bạn sẽ thấy đầu ra 'scripts are ok'.
Mã:
zeekctl check
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22528%22%20height=%22265%22%3E%3C/svg%3E
Bây giờ hãy chạy lệnh 'deploy' để triển khai cài đặt Zeek của bạn. Với điều này, Zeek logger, manager, proxy và workers sẽ được khởi động.
Mã:
zeekctl deploy
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22372%22%20height=%22502%22%3E%3C/svg%3E
Bạn có thể kiểm tra từng thành phần Zeek bằng lệnh bên dưới.
Mã:
zeekctl status
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22698%22%20height=%22214%22%3E%3C/svg%3E
Sử dụng zeek-cut để phân tích Nhật ký Zeek
Bây giờ bạn đã cài đặt và triển khai Zeek, các tệp nhật ký của mạng của bạn sẽ được tạo tại thư mục '/opt/zeek/logs/current'. Sẽ có nhiều tệp nhật ký Zeek mà bạn phải biết và chú ý. Trong phần này, bạn sẽ học cách sử dụng tiện ích 'zeek-cut' để tạo nhật ký theo định dạng TSV (Giá trị phân tách bằng tab).Kiểm tra thư mục nhật ký Zeek '/opt/zeek/logs/current' bằng lệnh 'ls' bên dưới.
Mã:
ls -ah /opt/zeek/logs/current/
- 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: Tệp nhật ký DNS (Hệ thống tên miền)
- http.log.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ý Lớp ổ cắm bảo mật (SSL) cũng chứa nhật ký HTTPS
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%2281%22%3E%3C/svg%3E
Bây giờ hãy di chuyển đến thư mục '/opt/zeek/logs/current' và có thể chạy Lệnh 'cat' để hiển thị nhật ký Zeek và chuyển đầu ra bằng lệnh 'zeek-cut' để phân tích cú pháp đầu ra thành định dạng TSV (Giá trị phân tách bằng tab).
Mã:
cd /opt/zeek/logs/current/
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=%22329%22%3E%3C/svg%3E
Bạn cũng có thể sử dụng lệnh 'zeek-cut' như sau để xử lý nhật ký TSV và nhận được kết quả tương tự.
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=%22213%22%3E%3C/svg%3E
Thiết lập đầu ra Zeek thành JSON
Zeek hỗ trợ nhiều định dạng nhật ký, bao gồm TSV và JSON. Trong phần này, bạn sẽ tìm hiểu cách tạo nhật ký Zeek ở định dạng JSON. Sau đó, bạn sẽ học cách phân tích cú pháp nhật ký JSON bằng dòng lệnh 'jq' để có thể dễ dàng đọc nhật ký của mình.Mở cấu hình Zeek '/opt/zeek/share/zeek/site/local.zeek' bằng trình soạn thảo 'nano' sau.
Mã:
sudo nano /opt/zeek/share/zeek/site/local.zeek
Mã:
@load policy/tuning/json-logs
Bây giờ hãy chạy lệnh 'zeekctl' bên dưới để áp dụng và triển khai các thay đổi của bạn. Và sau khi quá trình hoàn tất, định dạng nhật ký JSON sẽ được Zeek tạo ra.
Mã:
zeekctl deploy
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22478%22%3E%3C/svg%3E
Tiếp theo, chạy lệnh 'cat' bên dưới để kiểm tra tệp nhật ký Zeek. Bạn sẽ thấy nhật ký Zeek hiện ở định dạng JSON.
Mã:
cat /opt/zeek/logs/current/dns.log
Phân tích cú pháp định dạng JSON của Zeek bằng jq
Cài đặt gói 'jq' bằng lệnh 'apt' bên dưới.
Mã:
sudo apt install jq -y
Mã:
cd /opt/zeek/logs/current/
Mã:
jq . dns.log
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22523%22%20height=%22622%22%3E%3C/svg%3E
Nếu bạn muốn có đầu ra nhỏ gọn, hãy sử dụng tùy chọn '-c' như sau:
Mã:
jq . -c 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=%22338%22%3E%3C/svg%3E