# 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

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.


**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

Chọn **Accept** để tiếp tục.

Chọn **Install > OK**

Ở 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.


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.

Chọn `em1` cho LAN interface > OK

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.

Cấu hình xong thì chọn OK

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.

Chọn **Install CE** để bắt đầu cài đặt

Chọn kiểu File System, ở đây mình giữ nguyên, chọn **Continue**

Chọn version cài đặt, mình chọn **2.7.2** vì nó ổn định.

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

Đô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.

- Ở đâ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.

#### 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`

Chọn các option mong muốn.

Mình đã cấu hình thành công IP LAN cho PfSense.
### Cấu hình máy Client/User

Ở đâ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)

Ở đâ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.

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

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

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.

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

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.

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).



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

Cấu hình username và password cho Splunk


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

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)

### 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

Bước 2: Thêm Data inputs:
• Chọn Setting =>Data inputs

• 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.

• Đặt các thông số theo hình và lưu kết quả

Sau đó chọn Next. Không có lỗi xảy ra

Kết quả thông báo tạo thành công port lắng nghe log trên Splunk (UDP 5514)

Bước 3: Kiểm tra log nhận được. Dùng Search `source="udp: 5514" sourcetype="*"`

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)

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
```

**- Traffic theo thời gian**
```
source="udp:5514" sourcetype="*" "filterlog"
| timechart span=1m
```
Biểu đồ tuyến tính theo phút

Kết quả kết hợp cả ba trong một Dashboard