Giới thiệu
Trong hướng dẫn này, chúng sẽ cấu hình chế độ ngăn chặn xâm nhập (IPS) tích hợp sẵn của Suricata trên Ubuntu 20.04. Theo mặc định, Suricata được định cấu hình để chạy như một hệ thống phát hiện xâm nhập (IDS), hệ thống này chỉ tạo cảnh báo và ghi lại lưu lượng truy cập đáng ngờ. Khi chúng ta bật chế độ IPS, Suricata có thể chủ động loại bỏ lưu lượng mạng đáng ngờ ngoài việc tạo cảnh báo để phân tích thêm.
Trước khi bật chế độ IPS, điều quan trọng là phải kiểm tra xem đã bật chữ ký nào và các hành động mặc định của chúng. Chữ ký được định cấu hình không chính xác hoặc chữ ký quá rộng có thể dẫn đến giảm lưu lượng truy cập hợp pháp vào mạng hoặc thậm chí chặn truy cập vào máy chủ của mình qua SSH và các giao thức quản lý khác.
Trong phần đầu tiên của hướng dẫn này, chúng ta sẽ kiểm tra các chữ ký đã cài đặt và kích hoạt. Khi biết mình muốn sử dụng chữ ký nào trong chế độ IPS, cần chuyển đổi hành động mặc định của chúng để giảm hoặc từ chối lưu lượng truy cập. Với chữ ký chúng ta sẽ nắm được cách gửi lưu lượng mạng qua Suricata bằng cách sử dụng mục tiêu iptables netfilter NFQUEUE , sau đó tạo một số lưu lượng mạng không hợp lệ để đảm bảo rằng Suricata giảm nó như mong đợi.
Điều kiện cần để xây dụng hệ thống IPS
Nếu như chúng ta đang theo dõi bài hướng dẫn cách cài đặt và thiết lập 1 số cấu hình với Suricata thì chúng ta đã có Suricata đang chạy trên máy chủ Ubuntu 20.04.
Nếu như chúng ta vẫn chưa cài đặt Suricata thì chúng ta có thể theo dõi bài hướng dẫn cách cài đặt và thiết lập 1 số cấu hình với Suricata
Ngoài ra chúng ta cần tải ET Open Ruleset
bằng cách sử dụng lệnh suricata-update
và chữ ký Suricata.
Công cụ jq
xử lý dòng lệnh dòng lệnh. Nếu chưa cài đặt từ hướng dẫn trước, chúng ta có thể thực thi lệnh sau:
Including Custom Signatures
Các hướng dẫn trước chúng ta đã nắm được cách cài đặt và cấu hình Suricata, cũng như cách hiểu Signatures. Nếu chúng ta muốn tạo và bao gồm các quy tắc của riêng mình thì cần chỉnh sửa file /etc/suricata/suricata.yaml
của Suricata để bao gồm một đường dẫn tùy chỉnh đến Signatures.
Trước tiên, hãy tìm các IP của máy chủ để có thể sử dụng chúng trong các tùy chỉnh Signatures. Để tìm các IP, chúng ta có thể sử dụng lệnh sau:
Địa chỉ IP của máy chủ Suricata bao gồm các IP 103.97.125.151/25
và fe80::f816:3eff:fe03:8c7e/64
Bây giờ, tiến hành tạo Signatures để quét lưu lượng SSH đến các cổng không phải SSH và đưa nó vào một file có tên /var/lib/suricata/rules/local.rules
. Mở file bằng trình soạn thảo ưa thích của chúng ta:
Tiến hành thêm các dòng sau, chỉnh sang IP máy chủ Suricata của bạn.
Nếu chúng ta không sử dụng IPv6 thì chúng ta có thể bỏ qua việc thêm Signatures đó trong phần này và các quy tắc sau.
Chúng ta có thể tiếp tục thêm Signatures vào file /var/lib/suricata/rules/local.rules
này tùy thuộc vào mạng và ứng dụng của chúng ta.
Ví dụ: Nếu chúng ta muốn cảnh báo về lưu lượng HTTP đến các cổng không chuẩn, chúng ta có thể sử dụng các Signatures sau:
Để thêm Signatures kiểm tra lưu lượng TLS vào các cổng không phải là cổng mặc định 443 cho máy chủ web, hãy thêm phần sau:
Khi chúng ta hoàn tất việc thêm Signatures, hãy lưu và đóng file. Bây giờ chúng ta đã xác định một số chữ ký tùy chỉnh, hãy chỉnh sửa file cấu hình của Suricata tại /etc/suricata/suricata.yaml
bằng trình soạn thảo ưa thích:
Tiến hành thêm dòng sau vào phần rule-files:
như sau:
Lưu và thoát khỏi file. Đảm bảo xác thực cấu hình của Suricata sau khi thêm các quy tắc.
Quá trình kiểm tra có thể mất một chút thời gian tùy thuộc vào số lượng quy tắc đã tải trong file suricata.rules mặc định.
Cấu hình Signature Actions
Ở trên chúng ta đã thử nghiệm tùy chỉnh Signature và hoạt động với Suricata, chúng ta có thể thay đổi hành động thành drop
hoặc reject
. Khi Suricata đang hoạt động ở chế độ IPS, những hành động này sẽ chủ động chặn lưu lượng truy cập không hợp lệ cho bất kỳ Signature phù hợp nào.
Việc lựa chọn sử dụng hành động drop
hoặc reject
là tùy thuộc vào mỗi chúng ta. Hành động drop
lập tức loại bỏ một gói và bất kỳ gói nào tiếp theo thuộc luồng mạng. Hành động reject
sẽ gửi cho cả máy khách và máy chủ một gói đặt lại nếu lưu lượng dựa trên TCP và một gói lỗi ICMP cho bất kỳ giao thức nào khác.
Sử dụng các tùy chỉnh từ phần trên và chuyển đổi chúng để sử dụng drop
, vì lưu lượng mà chúng phù hợp có thể là quá trình quét mạng hoặc một số kết nối không hợp lệ khác.
Mở file /var/lib/suricata/rules/local.rules
của bằng trình chỉnh sửa ưa thích và tuỳ chỉnh như sau:
Lưu ý: Nếu chúng ta đã chạy suricata-update
chúng ta có thể có hơn 30.000 chữ ký được bao gồm trong của bạn suricata.rules file.
Sau khi chúng ta thu thập được một vài ngày hoặc vài tuần các cảnh báo, có thể phân tích chúng và chọn các chữ ký có liên quan để chuyển đổi sang drop
hoặc reject
dựa trên các cảnh báo đó sid.
Khi chúng ta đã định cấu hình tất cả các Signature với hành động mà chúng ta muốn họ thực hiện, bước tiếp theo là định cấu hình lại và sau đó khởi động lại Suricata ở chế độ IPS.
Mở chế độ nfqueue
Suricata chạy ở chế độ IDS theo mặc định, có nghĩa là sẽ không chủ động chặn lưu lượng mạng. Để chuyển sang chế độ IPS, chúng ta cần chỉnh sửa file /etc/default/suricata
cấu hình của Suricata.
Mở tệp bằng trình soạn thảo ưa thích của bạn:
Tìm LISTENMODE=af-packet
và nhận xét nó bằng cách thêm #
vào dòng này. Sau đó, thêm một dòng dòng mới LISTENMODE=nfqueue
cho biết Suricata chạy ở chế độ IPS.
Tệp của bạn phải có các dòng được đánh dấu sau khi bạn chỉnh sửa xong:
Lưu và đóng tập tin. Bây giờ chúng ta khởi động lại Suricata bằng cách sau:
Kiểm tra trạng thái của Suricata:
Đầu ra như sau:
Với thay đổi này, bây giờ chúng ta đã sẵn sàng để gửi lưu lượng truy cập đến Suricata bằng cách sử dụng tường lửa UFW trong bước tiếp theo.
Cấu hình UFW để gửi lưu lượng đến Suricata
Chúng ta đã cấu hình Suricata để xử lý lưu lượng ở chế độ IPS, bước tiếp theo là chuyển hướng các gói đến Suricata.
Để thêm các quy tắc bắt buộc cho Suricata vào UFW, chúng ta sẽ cần phải chỉnh sửa file /etc/ufw/before.rules
Thêm các dòng sau:
Lưu và thoát khỏi tệp khi bạn chỉnh sửa xong.
Khởi động lại UFW để tải các quy tắc mới:
Kiểm tra lưu lượng truy cập không hợp lệ
Chúng ta đã thiết Suricata và tường lửa được định cấu hình để xử lý lưu lượng mạng, chúng ta có thể kiểm tra xem Suricata có thả các gói phù hợp với signatures tùy chỉnh và các signatures đi kèm khác.
Nhớ lại signatures sid:2100498
từ hướng dẫn trước, được sửa đổi trong ví dụ này để drop phù hợp với các gói:
Tìm và chỉnh sửa quy tắc trong file /var/lib/suricata/rules/suricata.rules
sang drop.
Gửi tín hiệu cho SIGUSR2
để tải lại signatures:
Bây giờ chúng ta kiểm tra quy tắc bằng cách sử dụng lệnh curl
:
Nhận được lỗi cho biết rằng yêu cầu đã hết thời gian chờ, điều này cho thấy Suricata đã chặn phản hồi HTTP:
Chúng ta có thể xác nhận rằng Suricata đã bỏ phản hồi HTTP bằng cách kiểm tra file eve.log:
Kết quả như sau:
Dòng được đánh dấu "action": "blocked"xác nhận rằng signatures khớp và Suricata đã bỏ hoặc từ chối yêu cầu HTTP.
0 Nhận xét