Hầu như mọi hướng dẫn về Suricata đều kết thúc bằng việc cài Elasticsearch, Logstash và Kibana. Với một VPS đơn lẻ đó là lời khuyên tồi: chồng phần mềm này sẽ đòi bốn gigabyte bộ nhớ và sự chăm sóc liên tục, trong khi tất cả những gì bạn muốn chỉ là xem IDS đã bắt được gì trong ngày qua. Suricata hoạt động hoàn hảo mà không cần chúng — nhưng nó có một đặc tính khiến người ta cài rồi gỡ bỏ sau một tuần.

Quả mìn trong cấu hình mặc định

Ngay khi vừa cài, Suricata ghi hơn ba mươi loại sự kiện vào eve.json: không chỉ alert mà mọi truy vấn DNS, mọi lần bắt tay TLS, mọi giao dịch HTTP, ARP, DHCP, hết flow này đến flow khác. Cộng thêm một stats.log riêng mỗi tám giây. Và trong lúc đó Suricata không thiết lập việc xoay vòng nhật ký — đó là việc của quản trị viên, và chẳng chỗ nào ghi điều đó bằng chữ to.

Con số từ một máy chủ thật: 15 gigabyte trong hai ngày — chín trong eve.json và gần sáu trong stats.log. Còn khoảng năm ngày nữa là đầy đĩa. Máy chủ đó cũng chẳng có nhiều lưu lượng; trên một nút bận rộn thì đó sẽ là chuyện của vài giờ.

Hãy kiểm tra máy của bạn ngay bây giờ:

sudo du -sh /var/log/suricata/*

Chỉ giữ những gì bạn đọc

Nếu bạn xem alert chứ không làm điều tra mạng, thì từ eve-log bạn chỉ cần đúng một loại sự kiện. Trong /etc/suricata/suricata.yaml hãy tìm khối outputs và trong types của eve-log giữ lại alert rồi ghi chú phần còn lại. Ngay tại đó cũng tắt luôn đầu ra thống kê:

  - stats:
      enabled: no

Sau khi sửa, việc kiểm tra cấu hình là bắt buộc — trước khi khởi động lại dịch vụ:

sudo suricata -T -c /etc/suricata/suricata.yaml -v

Thứ tự quan trọng: phép kiểm tra sẽ không qua nếu các quy tắc chưa được nạp. Trước hết suricata-update, rồi kiểm tra cấu hình, rồi mới khởi động.

Việc xoay vòng thực sự hoạt động

Tệp /etc/logrotate.d/suricata:

/var/log/suricata/*.log /var/log/suricata/*.json {
    daily
    rotate 7
    maxsize 200M
    missingok
    compress
    delaycompress
    create 0664 suricata suricata
    su suricata suricata
    postrotate
        systemctl kill -s HUP suricata
    endscript
}

Ở đây có hai dòng không hiển nhiên và cả hai đều then chốt.

su suricata suricata — thiếu nó thì logrotate lặng lẽ bỏ qua mọi tệp. Thư mục /var/log/suricata thuộc nhóm suricata chứ không phải root, và logrotate coi sắp xếp như vậy là không an toàn. Sẽ không có lỗi nào trong thư và cũng không có trong nhật ký; bạn sẽ chỉ yên tâm rằng việc xoay vòng vẫn có cho tới khi hết đĩa. Cách duy nhất bắt được trước là chạy thử:

sudo logrotate -d /etc/logrotate.d/suricata

create 0664 suricata suricata — quyền của tệp mới. Với giá trị mặc định (0640), bất kỳ bảng điều khiển hay script nào đọc nhật ký dưới danh nghĩa người dùng không phải root sẽ chẳng thấy gì sau lần xoay vòng đầu tiên.

Ngoài nhật ký còn phải cấu hình gì

HOME_NET. Nó mô tả cái mà Suricata coi là của mình. Giá trị mặc định liệt kê toàn bộ các dải địa chỉ riêng, trong khi VPS lại có địa chỉ công khai — nên một số quy tắc không kích hoạt, hoặc kích hoạt ngược. Hãy nêu rõ mạng của bạn.

Quy tắc. Bộ Emerging Threats Open được kéo về bởi suricata-update, và chỗ của nó là trong cron một lần mỗi ngày. Từng chữ ký ồn ào được tắt theo mã định danh trong /etc/suricata/disable.conf — đừng ngại dùng nó: bộ quy tắc này làm cho mạng doanh nghiệp, và trên một máy chủ web thông thường sẽ có cả tá quy tắc kích hoạt liên tục mà chẳng vì lý do gì.

Chế độ. Mặc định Suricata lắng nghe một bản sao lưu lượng và chỉ cảnh báo (IDS). Chế độ chặn (IPS, qua nfqueue) trên một máy chủ đơn lẻ chủ yếu là rủi ro cho chính bạn: một kết quả dương tính giả là bạn tự khóa mình ra ngoài. Hãy bắt đầu bằng việc quan sát và dành một tháng để xem cái gì bị bắt.

Đọc nó thế nào khi không có Kibana

Các alert ngắn nằm trong /var/log/suricata/fast.log — mỗi sự kiện một dòng, đọc bằng mắt được:

sudo tail -50 /var/log/suricata/fast.log

Chi tiết nằm trong eve.json, mỗi dòng một đối tượng JSON. Tất cả những gì người ta thường cài Kibana để làm đều gói gọn trong một lệnh:

sudo jq -r 'select(.event_type=="alert") | .alert.signature' \
    /var/log/suricata/eve.json | sort | uniq -c | sort -rn | head -20

Đó là hai mươi chữ ký xuất hiện thường xuyên nhất. Sau một tuần, một danh sách như vậy nói thật về chuyện gì đang xảy ra với máy chủ, và nó cũng cho thấy đã đến lúc tắt những quy tắc nào.

Đã có Fail2ban rồi thì cần cái này làm gì

Chúng khác nhau về bản chất. Fail2ban đọc nhật ký ứng dụng và phản ứng với các lần đăng nhập thất bại — tức là với thứ đã chạm tới một dịch vụ. Suricata nhìn vào chính lưu lượng và thấy những gì sẽ không bao giờ có trong bất kỳ nhật ký nào: quét cổng, các nỗ lực khai thác khớp với chữ ký đã biết, kết nối tới máy chủ điều khiển từ bên trong máy của bạn. Cái cuối đặc biệt giá trị: một kết nối đi ra tới máy chủ điều khiển của kẻ khác là dấu hiệu sớm nhất cho thấy trên máy chủ đã có thứ gì đó đang chạy mà bạn không khởi động.

Giữ cả hai cũng được, chúng không xung đột. Câu hỏi duy nhất là có ai đọc kết quả của chúng thường xuyên hơn mỗi quý một lần không. Cùng những alert ấy trên một trang, phân tách theo danh mục và nguồn, trông ra sao — xem ở demo bên dưới.