# Xây dựng hệ thống giám sát mạng với PfSense và Splunk Bài viết này mình sẽ mô phỏng quá trình triển khai hệ thống SIEM (Security Information and Event Management) bằng Splunk để theo dõi các sự kiện đến từ Firewall PfSense bằng VMWare Workstation ## Chuẩn bị môi trường - Máy Host triển khai VMWare kết nối Internet - Phần mềm tạo máy ảo: VMWare - Các máy ảo: - Firewall PfSense. Tải tại link: https://www.pfsense.org/download/(Lưu ý chọn phiên bản AMD64 ISO IPMI/Virtual Machines) - Client/user: máy ảo Windows 10 - Splunk: máy ảo Ubuntu - Phần mềm: - Splunk Enterprise: Tải tại link https://www.splunk.com/en_us/products/splunk-enterprise.html ## Mô hình hệ thống ![image](https://hackmd.io/_uploads/r1OiHrqgxe.png) Mô hình thiết lập bao gồm: - Tường lửa Pfsense kết nối với Internet, có thiết lập các rule để cho phép hoặc từ chối các lưu lượng kết nối, bảo vệ mạng nội bộ - Client/user - Splunk server: thu thập và phân tích log từ tường lửa Pfsense ## Cài đặt ### Thiết lập tường lửa PfSense **a. Cài đặt PfSense** - Tạo máy ảo với file ISO đã tải xuống. Chọn hệ điều hành FreeBSD 64-bit - Thêm Network Adapter để có 2 Network Adapter là Host Only (cho LAN) và Brigde (cho WAN) để cấu hình NAT. Trong hình, Network Adapter sẽ là interface em0, Network Apdater 2 sẽ là interface em1. Việc chọn Host Only vì mình muốn cô lập mạng nội bộ bên trong, bắt buộc phải thông qua PfSense để kết nối được Internet ra bên ngoài. Tắt luôn phần local DHCP service trong Virtual Network Editor nếu muốn triển khai DHCP Server trên PfSense ở LAN interface. ![image](https://hackmd.io/_uploads/SkEMIBclxe.png) ![image](https://hackmd.io/_uploads/HyJy9Volxg.png) **b. Cấu hình Pfsense** Khi khởi động hệ thống, PfSense sẽ tiến hành vào quá trình cài đặt ![image](https://hackmd.io/_uploads/rkrzvS5glg.png) Chọn **Accept** để tiếp tục. ![image](https://hackmd.io/_uploads/Sk-NPB5lxe.png) Chọn **Install > OK** ![image](https://hackmd.io/_uploads/ByjSPHcexg.png) Ở bước này, chọn interface em0 (WAN) đã set card Bridge từ trước > OK, có thể kiểm tra lại địa chỉ MAC để chọn. ![image](https://hackmd.io/_uploads/H1IYwS5xgg.png) ![image](https://hackmd.io/_uploads/B1tnPScxge.png) Chọn Continue nếu muốn sử dụng DHCP Client để cấp IP cho interface WAN. Ở đây mình dùng DHCP (client) thì chỉ cần chọn OK. Nếu muốn cấu hình Static/PPPoE thì chọn Interface Mode > OK, cấu hình rồi Continue > OK. ![image](https://hackmd.io/_uploads/B1TEOr9xgg.png) Chọn `em1` cho LAN interface > OK ![image](https://hackmd.io/_uploads/r1SvuH5gll.png) Phần này tương tự, có thể chọn DHCP hoặc Static, ở đây mình sẽ dùng Static và cấu hình để xem PfSense như một DHCP Server. Cấu hình IP mong muốn ở phần IP Address, DHCP Range Start, DHCP Range End. Ở đây mình cấu hình IP cho hợp với mô hình mình mong muốn. ![image](https://hackmd.io/_uploads/B1gmYr5gxx.png) Cấu hình xong thì chọn OK ![image](https://hackmd.io/_uploads/BywEtB5egl.png) Chọn **Continue** để tiến hành quá trình setup. Nếu bị lỗi thì cấu hình lại bằng cách chọn Assign/Configure. ![image](https://hackmd.io/_uploads/B1ycFBcggg.png) Chọn **Install CE** để bắt đầu cài đặt ![image](https://hackmd.io/_uploads/rJZoKBcexl.png) Chọn kiểu File System, ở đây mình giữ nguyên, chọn **Continue** ![image](https://hackmd.io/_uploads/HkG1qH5lxg.png) Chọn version cài đặt, mình chọn **2.7.2** vì nó ổn định. ![image](https://hackmd.io/_uploads/ryRWqH9glx.png) PfSense đang tiến hình cài đặt. Mình từng gặp một lỗi liên quan đến việc kết nối (hãy kiểm tra lại việc cấu hình interface) và thiếu RAM (mình để 256MB, nâng lên 1GB thì không lỗi) Sau khi cài đặt xong thì PfSense sẽ restart và chúng ta cần kiểm tra lại cấu hình khi khởi động lại ![image](https://hackmd.io/_uploads/Hy6CsScgle.png) Đôi khi cấu hình sẽ không đúng, cần chỉnh sửa lại. #### Assign Interface Enter option 1 để assign interface. ![image](https://hackmd.io/_uploads/SJu4hHcexg.png) - Ở đây mình set `em0` (Bridge) cho WAN interface và `em1` (Host Only) cho LAN interface. Có thể kiểm tra interface nào bằng MAC. ![Screenshot 2025-05-08 121132](https://hackmd.io/_uploads/S12FnS5lll.png) #### Set Interface(s) IP address Enter option 2. Ở đây mình cấu hính static cho LAN nên chọn **"n"** cho DHCP. Nhập IP cho LAN interface mong muốn, ví dụ `10.10.10.200` ![Screenshot 2025-05-08 121248](https://hackmd.io/_uploads/SkObTS5xel.png) Chọn các option mong muốn. ![Screenshot 2025-05-08 121256](https://hackmd.io/_uploads/SJdNpS5gxl.png) Mình đã cấu hình thành công IP LAN cho PfSense. ### Cấu hình máy Client/User ![image](https://hackmd.io/_uploads/HkBnaSclgg.png) Ở đây mình set card Host Only để mô phỏng mạng LAN. Quá trình cài đặt Windows 10x64 thì mình sẽ không đề cập đến. Cấu hình IP tĩnh cho máy client để phù hợp với mô hình. (hãy chắc chắn bạn chọn đúng card mạng và Virtual Network Editor cũng có dãy IP phù hợp) ![Screenshot 2025-05-08 134724](https://hackmd.io/_uploads/H1t8AHqxee.png) Ở đây cấu hình IP cho client là `10.10.10.100`, với Default Gateway trỏ về PfSense. Vì mình chưa setup cụ thể DNS server trên PfSense nên tạm thời sẽ dùng `8.8.8.8` để truy cập các miền ngoài Internet. ![Screenshot 2025-05-08 140742](https://hackmd.io/_uploads/S1whAr5lee.png) Kiểm tra bằng cách ping tới PfSense (10.10.10.200) và ping ra ngoài Internet (8.8.8.8) **Kiểm tra PfSense** Ta có thể truy cập vào giao diện của PfSense thông qua máy Client, nhập địa chỉ IP của PfSense vào trình duyệt web. Tài khoản mặc định là: Username - Admin, Password - pfsense ![Screenshot 2025-05-08 121452](https://hackmd.io/_uploads/ByI118qggx.png) Kiểm tra các thông tin ở Dashboard. Kiểm tra NAT tại Firewall > NAT > Outbound chắc chắn rằng Rules ở interface WAN hoạt động. ### Cài đặt Splunk ![image](https://hackmd.io/_uploads/ByeBWU9ell.png) Tương tự, mình cũng sử dụng một card mạng Host Only. Sau khi cài đặt Ubuntu, trước tiên cần cấu hình IP cho máy Splunk vì đang ở Host Only nên không kết nối Internet được. ![Screenshot 2025-05-08 130642](https://hackmd.io/_uploads/B1QeGLqlxx.png) Vào Setting > Network. Sau đó xóa đi cấu hình cũ, chọn IPv4 để tiến hình cấu hình IP mong muốn, ví dụ theo mô hình mình cấu hình Manual, IP 10.10.10.150 ![Screenshot 2025-05-08 122349](https://hackmd.io/_uploads/BJNiW8cllg.png) Kiểm tra bằng cách ping đến PfSense (gateway) và Internet (8.8.8.8) Phần DNS nếu muốn chắc chắn thì có thể sửa nameserver trong file /etc/resolv.conf thành 8.8.8.8 **Cài đặt Splunk Enterprise** Đăng nhập và chọn Download Package phù hợp với hệ điều hành. Ở đây mình chọn Linux với .deb, copy wget link để tải về hoặc tải trực tiếp. ![Screenshot 2025-05-08 123604](https://hackmd.io/_uploads/Bk6SQUcxeg.png) Cài đặt Splunk theo link hướng dẫn: https://docs.splunk.com/Documentation/Splunk/9.2.1/SearchTutorial/InstallSplunk Ở đây mình dùng file DEB nên trong CLI nhập lệnh ` dpkg -i splunk_package_name.deb `. Nên cài đặt curl trước để chương trình chạy một vài gói kiểm tra (không cài đặt cũng không ảnh hưởng). ![Screenshot 2025-05-08 124116](https://hackmd.io/_uploads/B1Lx48cleg.png) ![Screenshot 2025-05-08 124147](https://hackmd.io/_uploads/ByxIELclex.png) ![Screenshot 2025-05-08 124519](https://hackmd.io/_uploads/rktL485ggg.png) Cài đặt xong thì Splunk sẽ được nằm ở `/opt/splunk` Khởi động Splunk Web theo hướng dẫn ở link sau: https://docs.splunk.com/Documentation/Splunk/9.2.1/SearchTutorial/StartSplunk Dùng lệnh `./splunk start` để khởi động Splunk ![Screenshot 2025-05-08 125944](https://hackmd.io/_uploads/r1DDV89eel.png) Cấu hình username và password cho Splunk ![Screenshot 2025-05-08 130051](https://hackmd.io/_uploads/BywtV8cxgx.png) ![Screenshot 2025-05-08 130205](https://hackmd.io/_uploads/S1tqV85lex.png) Sau splunk được cài đặt và khởi động thành công, một đường link truy cập splunk sẽ tự động được mở (http://10.10.10.150:8080) ## Cấu hình đẩy log từ PfSense về Splunk ### Tại Firewall PfSense Bước 1: Truy cập vào giao diện quản trị của Pfsense từ máy Client Bước 2: Vào Status > System Logs. Chọn tab Settings ![Screenshot 2025-05-08 131217](https://hackmd.io/_uploads/ByErS8cggx.png) Bước 3: Tích vào ô: Send log message to remote syslog server. Ip máy chủ nhận log là 10.10.10.150 (máy Splunk). Chọn các log muốn gửi qua Splunk và lưu lại. Ở đây mình sẽ gửi log về port 5514 của Splunk (port 514 hiện đang chạy service khác) ![image](https://hackmd.io/_uploads/BJ-5HLclgl.png) ### Tại Splunk server Bước 1: Truy cập vào giao diện quản trị của Splunk từ máy Client ![Screenshot 2025-05-08 130715](https://hackmd.io/_uploads/BJR8XDqxlx.png) Bước 2: Thêm Data inputs: • Chọn Setting =>Data inputs ![Screenshot 2025-05-08 140938](https://hackmd.io/_uploads/rJxWU89glg.png) • Chọn Addnew trong phần UDP. • Cấu hình port 5514 và địa chỉ ip gửi log về là địa chỉ của tường lửa PfSense: 10.10.10.200. Sau đó chọn Next. ![Screenshot 2025-05-08 142142](https://hackmd.io/_uploads/ByZE885xxg.png) • Đặt các thông số theo hình và lưu kết quả ![Screenshot 2025-05-08 141206](https://hackmd.io/_uploads/r1G3UL9exl.png) Sau đó chọn Next. Không có lỗi xảy ra ![Screenshot 2025-05-08 142203](https://hackmd.io/_uploads/r1wE885xeg.png) Kết quả thông báo tạo thành công port lắng nghe log trên Splunk (UDP 5514) ![Screenshot 2025-05-08 142213](https://hackmd.io/_uploads/By1HLI9lee.png) Bước 3: Kiểm tra log nhận được. Dùng Search `source="udp: 5514" sourcetype="*"` ![Screenshot 2025-05-08 142243](https://hackmd.io/_uploads/Sys6II9xll.png) Thấy đã có thông tin log. Như vậy, chúng ta đã cấu hình thành công đẩy log từ tường lửa PfSense sang Splunk. Splunk cung cấp cho chúng ta nhiều công cụ khác nhau để tìm kiếm, lọc, tạo các visulazation, dashboard, hỗ trợ cho việc phân tích, biểu diễn log. **Task:** Dùng công cụ Search của Splunk, lọc ra những log block traffic của PfSense, từ đó đề xuất và xây dựng một Dashboard đơn giản biểu diễn log traffic của PfSense - Với mỗi Search sau khi filter sẽ có phần Save As. Ví dụ: với Search ``` source="udp:5514" sourcetype="*" "filterlog" | rex "filterlog.*?,.*?,.*?,.*?,.*?,(?<action>[^,]+)," | stats count by action ``` sẽ mô tả tổng số log theo hành động (pass/block) ![Screenshot 2025-05-08 143731](https://hackmd.io/_uploads/SyUcPLqell.png) Save với New Dashboard, nhập Dashboard Title: `pfSense Traffic`, chọn ` Classic Dashboards`. Chọn `Save to Dashboard`. Khi đó hệ thống sẽ tạo ra một dashboard cơ bản với bảng số liệu. Ta có thể thêm bằng các filter khác và Save As vào Dashboard vừa mới tạo. Có thể chỉnh sửa dạng Dashboard (Line, Pie Chart...) Ví dụ: thêm vào Dashboard **- Top 10 IP nguồn gửi nhiều nhất** ``` source="udp:5514" sourcetype="*" "filterlog" | rex ".*udp,(\d+),(?<src_ip>\d+\.\d+\.\d+\.\d+)," | top src_ip limit=10 ``` ![Screenshot 2025-05-08 145520](https://hackmd.io/_uploads/HJM-sI9xgg.png) **- Traffic theo thời gian** ``` source="udp:5514" sourcetype="*" "filterlog" | timechart span=1m ``` Biểu đồ tuyến tính theo phút ![Screenshot 2025-05-08 145832](https://hackmd.io/_uploads/SJgUoIcgee.png) Kết quả kết hợp cả ba trong một Dashboard