Cách cài đặt công cụ giám sát bảo mật mạng Zeek trên Debian 12

theanh

Administrator
Nhân viên
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.

Đ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
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.
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
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.
Mã:
echo "export PATH=$PATH:/opt/zeek/bin" >> ~/.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.
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
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

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
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.
Mã:
sudo nano /opt/zeek/etc/networks.cfg
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 đó.
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
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.
Mã:
sudo nano /opt/zeek/etc/node.cfg
Theo mặc định, Zeek đang chạy trong chế độ độc lập. Thêm # để tắt chế độ độc lập của Zeek.
Mã:
#[zeek]
#type=standalone
#host=localhost
#interface=eth0
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.
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
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.
Mã:
zeekctl
Chạy lệnh kiểm tra để xác thực cấu hình Zeek của bạn.
Mã:
check
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 installstart trên Zeek.
Mã:
deploy
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.
Mã:
status
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


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
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:
  • 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
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, 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
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.
Mã:
zeek-cut id.orig_h query answers < dns.log
Đầ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

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
Chèn cấu hình sau vào cuối dòng.
Mã:
@load tuning/json-logs
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.
Mã:
zeekctl deploy
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.
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/
Chạy lệnh cat bên dưới để xem tệp nhật ký dns.
Mã:
cat dns.log
Đầ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.
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
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

Kết luận​

Xin chúc mừng! Bây giờ bạn đã cài đặt thành công công cụ giám sát mạng Zeek trên máy chủ Debian 12. Bạn đã cài đặt Zeek, chạy Zeek ở chế độ cụm, tìm hiểu một số tệp nhật ký zeek và cũng tìm hiểu cách phân tích tệp nhật ký zeek với định dạng TSV thông qua zeek-cut. Ngoài ra, bạn cũng đã thay đổi nhật ký zeek thành JSON và tìm hiểu cách phân tích định dạng JSON của nhật ký Zeek thông qua dòng lệnh jq.
 
Back
Bên trên