Hướng dẫn sử dụng Arkime (Moloch) trên Linux: Thu thập, lập chỉ mục và phân tích gói tin mạng Full Packet Capture

Security tutorial - IT technology blog
Security tutorial - IT technology blog

Quick start: Dựng Arkime giám sát mạng trong 5 phút

Trên Ubuntu 22.04 hoặc 24.04, cách nhanh nhất là cài gói binary dựng sẵn của Arkime và kẹp chung cụm OpenSearch đơn node trên cùng host.

Bước 1: Dựng OpenSearch làm backend lưu metadata

Arkime cần OpenSearch để đánh chỉ mục các trường dữ liệu. Ta chuẩn bị môi trường và cài đặt như sau:

# Cài các thư viện phụ trợ
sudo apt update && sudo apt install -y curl wget libpcap-dev libssl-dev

# Thêm repository chính thức của OpenSearch 2.x
curl -o- https://artifacts.opensearch.org/publickeys/opensearch.pgp | sudo gpg --dearmor -o /usr/share/keyrings/opensearch-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/opensearch-keyring.gpg] https://artifacts.opensearch.org/releases/bundle/opensearch/2.x/apt stable main" | sudo tee /etc/apt/sources.list.d/opensearch-2.x.list
sudo apt update && sudo apt install -y opensearch

# Tắt plugin security nội bộ nếu chỉ test local để tránh vướng chứng chỉ SSL tự ký
echo "plugins.security.disabled: true" | sudo tee -a /etc/opensearch/opensearch.yml

# Khởi động OpenSearch
sudo systemctl enable --now opensearch
curl -s -X GET "http://localhost:9200"

Bước 2: Cài đặt Arkime và cấu hình interface

# Tải bản Arkime mới nhất cho Ubuntu 22.04
wget https://s3.amazonaws.com/files.molo.ch/builds/ubuntu-22.04/arkime_5.4.0-1.ubuntu2204_amd64.deb
sudo dpkg -i arkime_5.4.0-1.ubuntu2204_amd64.deb

# Chạy wizard cấu hình tự động
sudo /opt/arkime/bin/Configure

Trình cài đặt sẽ hỏi bạn ba thông tin chính:

  • Network interface to monitor: Điền card mạng bạn muốn hứng traffic (ví dụ: eth0 hoặc ens18).
  • Elasticsearch server: Giữ mặc định http://localhost:9200.
  • Password to encrypt SGMAC with: Nhập chuỗi mật khẩu ngẫu nhiên để mã hóa cookie phiên làm việc.

Bước 3: Khởi tạo database, tạo user quản trị và chạy dịch vụ

# Khởi tạo schema index trong OpenSearch
sudo /opt/arkime/db/db.pl http://localhost:9200 init

# Tạo tài khoản quản trị giao diện web
sudo /opt/arkime/bin/arkime_add_user.sh admin "Admin User" P@ssw0rd123Secured --admin

# Kích hoạt capture daemon và web viewer
sudo systemctl enable --now arkimecapture
sudo systemctl enable --now arkimeviewer

Mở trình duyệt gõ http://IP_SERVER:8005 rồi đăng nhập bằng tài khoản admin vừa tạo. Sau khoảng 10 đến 30 giây, tab Sessions sẽ hiển thị toàn bộ luồng packet đang đi qua interface.

Arkime giải quyết bài toán gì trong thực tế?

Firewall và IDS giống như chuông chống trộm gắn ở cửa ra vào. Chúng chỉ hú còi khi thấy ai đó phá khóa hoặc gõ cửa trái phép. Nhưng kẻ gian vào phòng nào, copy dữ liệu gì hay để lại con trojan nào thì IDS chịu chết.

Arkime (tên cũ là Moloch) hoạt động như hệ thống camera giám sát độ nét cao ghi hình liên tục. Nó bắt trọn từng byte dữ liệu chạy trên dây mạng — kỹ thuật này gọi là Full Packet Capture (FPC). Dữ liệu thô được ghi thẳng xuống đĩa cứng, không bỏ sót bất kỳ frame nào.

Hồi còn trực hệ thống, server của mình từng dính một đợt brute-force SSH vào lúc 2 giờ sáng. Log auth chỉ báo vỏn vẹn vài nghìn dòng fail từ một IP nước ngoài. Nhưng câu hỏi chí mạng là: Hacker đã đoán trúng mật khẩu nào chưa? Chúng có kịp kéo script độc hại nào về không? Log text thông thường không trả lời được. Với Arkime, bạn chỉ cần mở session đó lên, tua lại toàn bộ phiên gõ phím và xem trực tiếp màn hình shell của kẻ tấn công.

Ba thành phần cốt lõi bên trong Arkime

  • Capture Engine (arkimecapture): Viết bằng C thuần, gắn trực tiếp vào card mạng ở chế độ Promiscuous. Tiến trình này liên tục bóc tách packet, bóc tách metadata (IP, port, SSL cert, DNS query, HTTP header) và ghi raw byte thành các tệp .pcap nối tiếp nhau.
  • Database Index (OpenSearch / Elasticsearch): Nơi chứa toàn bộ metadata đã phân tích. Nhờ cơ chế chỉ mục phân tán, bạn có thể lọc tìm một phiên kết nối giữa hàng chục triệu packet chỉ trong vòng chưa tới 1 giây.
  • Viewer (arkimeviewer): Web app viết bằng Node.js. Viewer cho phép tái dựng toàn bộ luồng TCP/UDP (Session Reconstruction), bung file đính kèm, trích xuất ảnh truyền qua HTTP hoặc xuất trực tiếp file .pcap về máy để mở bằng Wireshark.

Khai thác Arkime để điều tra sự cố thực chiến

1. Lọc dữ liệu tốc độ cao với cú pháp SPI

Thanh tìm kiếm SPI (Search Protocol Index) của Arkime giúp bạn bóc tách dữ liệu cực nhanh mà không phải đọc log mỏi mắt:

# Bắt các kết nối HTTP chạy trên cổng lạ (khác 80, 443 và 8080)
protocols == "http" && port.dst != 80 && port.dst != 443 && port.dst != 8080

# Tìm các truy vấn DNS ra domain dynamic DNS hoặc dịch vụ chia sẻ code hay bị lạm dụng
host.dns == "*pastebin*" || host.dns == "*ngrok*" || host.dns == "*.duckdns.org"

# Săn dấu hiệu scan SSH từ mạng nội bộ với tần suất cao bất thường
protocols == "ssh" && ip.src == 192.168.1.0/24 && packets > 100 && bytes < 5000

2. Replay phiên kết nối và trích xuất tệp nhị phân

Nhấp vào dấu + ở đầu mỗi session, Arkime sẽ ghép các gói tin rời rạc thành một đoạn hội thoại liền mạch. Luồng gửi đi của client hiển thị màu đỏ, còn gói tin server phản hồi mang màu xanh.

Giả sử kẻ tấn công dùng curl tải một đoạn shell script độc hại về máy chủ qua HTTP không mã hóa. Bạn chỉ cần bấm sang tab Files trong session đó rồi tải thẳng file thực thi về để đưa vào sandbox dịch ngược, không cần mất công carve packet thủ công.

3. Thiết lập vòng đời lưu trữ (Retention Policy) tránh tràn ổ cứng

Dữ liệu capture ngốn dung lượng rất nhanh. Một đường truyền 100 Mbps bão hòa có thể nuốt trọn hơn 1 TB đĩa mỗi ngày. Nếu không cấu hình xoay vòng, ổ cứng sẽ đầy và kéo theo sập toàn bộ dịch vụ.

Mở file /opt/arkime/etc/config.ini và chỉnh lại các tham số:

# Thư mục chứa các tệp pcap thô
pcapDir = /opt/arkime/raw

# Luôn giữ lại 15% dung lượng trống của phân vùng; dưới ngưỡng này engine sẽ tự xóa pcap cũ nhất
freeSpaceG = 15%

# Giới hạn dung lượng mỗi file PCAP ở mức 8 GB trước khi cắt sang file mới để tránh quá tải I/O
maxFileSizeG = 8

Lưu file và restart lại tiến trình capture để áp dụng:

sudo systemctl restart arkimecapture

Kinh nghiệm vận hành thực tế trên hạ tầng Production

Tối ưu card mạng chống rớt gói (Packet Drops)

Khi traffic tăng vọt, card mạng thường bị tràn hàng đợi phần cứng. Kết quả là packet bị drop trước cả khi kịp chuyển lên tầng ứng dụng của Arkime. Bạn hãy dùng ethtool để nới rộng ring buffer và vô hiệu hóa các tính năng offload:

# Ép RX/TX ring buffer lên ngưỡng tối đa phần cứng hỗ trợ (thường là 4096)
sudo ethtool -G eth0 rx 4096 tx 4096

# Tắt offload để Arkime nhận đúng kích thước frame thực tế thay vì frame gom ảo
sudo ethtool -K eth0 tso off gso off gro off lro off

Công thức tính toán dung lượng lưu trữ

Đừng cố lưu PCAP cả năm. Trong thực tế phản ứng sự cố, khung thời gian giá trị nhất để truy vết nằm trong khoảng 7 đến 14 ngày.

Với một văn phòng hoặc cụm server có băng thông trung bình 50 Mbps:

  • 50 Mbps tương đương khoảng 6.25 MB dữ liệu mỗi giây.
  • Mỗi ngày ghi liên tục sẽ tạo ra xấp xỉ 500 GB đến 540 GB tệp PCAP thô.
  • Để lưu đủ dữ liệu cho 7 ngày gần nhất, bạn cần chuẩn bị một mảng RAID có dung lượng khả dụng tối thiểu 4 TB. Tốt nhất nên tách riêng: dùng SSD NVMe chạy OpenSearch để query mượt, còn HDD Enterprise chuyên dụng để ghi file PCAP thô.

Bọc Web Viewer bằng Nginx Reverse Proxy

Mặc định Arkime Viewer chạy HTTP thường trên cổng 8005 không mã hóa. Đưa thẳng cổng này ra Internet là thảm họa bảo mật, vì nó phơi bày toàn bộ dữ liệu nội bộ của bạn.

Hãy chặn cổng 8005 ở firewall, chỉ mở kết nối qua Nginx kèm chứng chỉ SSL và giới hạn IP của đội ngũ quản trị:

server {
    listen 443 ssl http2;
    server_name arkime.internal.lan;

    ssl_certificate /etc/ssl/certs/arkime.crt;
    ssl_certificate_key /etc/ssl/private/arkime.key;

    # Giới hạn dải IP của phòng kỹ thuật / SOC
    allow 192.168.10.0/24;
    deny all;

    # Giới hạn kích thước upload khi import PCAP thủ công
    client_max_body_size 500M;

    location / {
        proxy_pass http://127.0.0.1:8005;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_read_timeout 300s;
    }
}

Khi xảy ra sự cố, file log hay alert có thể bị kẻ tấn công xóa dấu vết. Nhưng luồng packet thô đã ghi xuống đĩa thì không thể chối cãi. Triển khai Arkime giúp bạn nắm bằng chứng chuẩn xác nhất để biết mã độc đã đi những đâu và mang theo những gì.

Share: