2026年4月30日 星期四

Lab : Setting up a FortiGate VPN Client (OPNsense) with OTP

 

 使用軟體 opnsense

 https://opnsense.org/


先前導讀相關 Blog  

https://xrcd2.blogspot.com/2025/05/pfsense-fortigate.html

https://xrcd2.blogspot.com/2025/04/freeradius-google-authenticator-2fa.html


下載 ISO 用它開機後,使用 帳/密:  installer / opnsense 進入安裝模式,如有使用二張網卡,預設 WAN port 會使用 DHCP 取得IP/GW/DNS等相關資訊,LAN port IP 預設則為 192..168.1.1/24 可以透過 browser 連入 OPNsense,可使用 帳/密:  root / opnsense 登入OPNsense管理頁面.

接下來可以安裝  os-freeradius / os-net-snmp / os-net-snmp 等外掛,在安裝及設定完成後可以移除不使用的 WAN port ,以下這台OPNsense僅做 RADIUS 伺服器使用.


以下運用情境為 FortiGate VPN Client 透過 RADIUS 做 OTP 登入認證.


運作機制說明:使用者輸入密碼再加上 Google Authenticator APP 產生的 6 碼動態驗證碼(TOTP 協定)。[OTP 碼直接在密碼後面接者輸入即可.]

FortiGate 收到後將驗證請求轉發至後端的 RADIUS 伺服器(FreeRADIUS ).RADIUS 伺服器與綁定 Google Authenticator (OTP) 演算法的驗證比對後回傳驗證成功.


簡要架構說明:


FortiGate VPN Client ===>(密碼加OTP)===> Fortigate Firewall ===> RADIUS (OPNsense Plugin) ===>  OPNsense 登入認證 (user id/pwd/otp) 


重點一.必需將 OPNsense \System\  Access \ Servers 新增一個 OTP-Server 

          Type 為 Local + Timebased One Time Password


重點二. 必需將 OPNsense \System\  Access \ Users \ 新增一個使用者並

         設定上密碼 及使用 OTP (這些資訊是用來提供 VPN 登入認證使用) 


重點三. 不使用 OPNsense \ Services \ FreeRADIUS \ Users 這個功能.


Demo










2026年4月12日 星期日

守護網路安全的瑞士刀:Security Onion 簡介

 

守護網路安全的瑞士刀:Security Onion 簡介

在網路安全的世界裡,如果你想要監控流量、偵測威脅並進行入侵分析,通常需要安裝一大堆工具。但 Security Onion (SO) 的出現,讓這一切變得簡單許多。

什麼是 Security Onion?

Security Onion 是一個自由且開源的 Linux 發行版,專門用於 威脅狩獵 (Threat Hunting)企業安全監控 (Enterprise Security Monitoring, ESM) 以及 日誌管理

簡單來說,它就像是一個「安全工具大禮包」,幫你把業界最強大的開源安全軟體全部整合在一起,並預先配置好,讓你開箱即用。


Security Onion 的核心三部曲

Security Onion 的強大來自於它整合了三種主要功能:

  1. 全數據包捕獲 (Full Packet Capture): 就像錄影機一樣,記錄下網路上發生的一切細節。

  2. 入侵偵測系統 (IDS): 包含主機端 (HIDS) 與網路端 (NIDS),當發現可疑行為時會立即發出警報。

  3. 分析工具 (Analysis Tools): 提供直觀的圖表與介面,讓分析師能快速從海量數據中抓出「害群之馬」。


內建的神級工具陣容

Security Onion 整合了多款重量級工具,形成了一個完整的防禦體系:

  • 流量分析: Zeek (舊稱 Bro) 與 Suricata。

  • 日誌處理: 著名的 ELK Stack (Elasticsearch, Logstash, Kibana),現在也支持 Elastic Fleet

  • 分析介面: * Security Onion Console (SOC): 自家的管理中心。

    • CyberChef: 萬能的資料轉換工具。

    • TheHive: 專為事件響應設計的案例管理平台。


為什麼你應該嘗試 Security Onion?

1. 節省大量的部署時間

手動整合 Elasticsearch、Suricata、Zeek 等工具是一個地獄級的任務。Security Onion 透過簡單的安裝程序,幾分鐘內就能幫你搭建好一個專業級的 SOC 中心。

2. 強大的可視化

透過 Kibana 儀表板,你可以一眼看出當前網路的流量分佈、哪些 IP 正在嘗試攻擊你的伺服器,甚至追蹤惡意程式的連線行為。

3. 學習與實戰的絕佳平台

如果你是資安新手,Security Onion 是學習「藍隊 (Blue Teaming)」技能的最佳起點。它能讓你真實體驗到分析師在處理警報時的完整工作流。


以上內容撰寫: gemini ai

線上手冊: https://docs.securityonion.net/






2026年4月11日 星期六

Lab: Building a Network IDS with Active Response via Wazuh and Suricata




 Wazuh 整合 Suricata 達成網路入侵偵測與自動回應實驗

Wazuh Server 安裝  (192.168.100.10)

https://documentation.wazuh.com/current/quickstart.html

curl -sO https://packages.wazuh.com/4.14/wazuh-install.sh && sudo bash ./wazuh-install.sh -a

Wazuh Agent  安裝

 ( client interface ens160 192.168.100.20/24  / suricata monitor interface ens224  192.168.100.30/32)

curl -o wazuh-agent-4.14.4-1.x86_64.rpm https://packages.wazuh.com/4.x/yum/wazuh-agent-4.14.4-1.x86_64.rpm && sudo WAZUH_MANAGER='192.168.100.10' rpm -ihv wazuh-agent-4.14.4-1.x86_64.rpm


https://documentation.wazuh.com/current/proof-of-concept-guide/integrate-network-ids-suricata.html


[root@Wazuh-Client01 suricata]# ip add | grep ens

2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000

    inet 192.168.100.20/24 brd 192.168.100.255 scope global noprefixroute ens160

3: ens224: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000

    inet 192.168.100.30/32 scope global noprefixroute ens224


參考 URL

Suricata 安裝 

https://docs.suricata.io/en/suricata-7.0.15/install.html#rpm-packages

https://copr.fedorainfracloud.org/coprs/g/oisf/suricata-7.0/


Suricata Rule 

https://rules.emergingthreats.net/open/suricata-7.0.15/

https://rules.emergingthreats.net/open/suricata-7.0.15/rules/


Suricata 重要設定

vi /etc/sysconfig/suricata

OPTIONS="-i eth0" -->  OPTIONS="-i ens224" 

vi /etc/suricata/suricata.yaml

interface: eth0 ---> interface: ens224

可以用

sed -i 's/interface: eth0/interface: ens224/g' /etc/suricata/suricata.yaml


運行 rule 宣告 
vi /etc/suricata/suricata.yaml

## Configure Suricata to load Suricata-Update managed rules.
default-rule-path: /var/lib/suricata/rules
rule-files:
  - suricata.rules


觸發log檢查

[root@Wazuh-Client01 rules]# cat /var/log/suricata/fast.log
04/11/2026-20:01:05.711058  [**] [1:2100498:7] GPL ATTACK_RESPONSE id check returned root [**] [Classification: Potentially Bad Traffic] [Priority: 2] {TCP} 217.160.0.187:80 -> 192.168.100.20:59428
04/11/2026-20:07:12.072266  [**] [1:2039584:2] ET FILE_SHARING Observed DNS Query to Filesharing Service (mega .co .nz) [**] [Classification: Misc activity] [Priority: 3] {UDP} 192.168.100.99:52525 -> 8.8.8.8:53
04/11/2026-20:07:12.072339  [**] [1:2039584:2] ET FILE_SHARING Observed DNS Query to Filesharing Service (mega .co .nz) [**] [Classification: Misc activity] [Priority: 3] {UDP} 192.168.100.99:52525 -> 8.8.8.8:53
04/11/2026-20:07:13.250532  [**] [1:2039584:2] ET FILE_SHARING Observed DNS Query to Filesharing Service (mega .co .nz) [**] [Classification: Misc activity] [Priority: 3] {UDP} 192.168.100.99:52525 -> 8.8.8.8:53
04/11/2026-20:07:13.250583  [**] [1:2039584:2] ET FILE_SHARING Observed DNS Query to Filesharing Service (mega .co .nz) [**] [Classification: Misc activity] [Priority: 3] {UDP} 192.168.100.99:52525 -> 8.8.8.8:53
04/11/2026-20:15:53.248125  [**] [1:2047866:4] ET INFO Observed Google DNS over HTTPS Domain (dns .google in TLS SNI) [**] [Classification: Misc activity] [Priority: 3] {TCP} 192.168.100.99:53705 -> 8.8.8.8:443
04/11/2026-20:16:25.147099  [**] [1:2039584:2] ET FILE_SHARING Observed DNS Query to Filesharing Service (mega .co .nz) [**] [Classification: Misc activity] [Priority: 3] {UDP} 192.168.100.99:52525 -> 8.8.8.8:53
04/11/2026-20:16:25.147133  [**] [1:2039584:2] ET FILE_SHARING Observed DNS Query to Filesharing Service (mega .co .nz) [**] [Classification: Misc activity] [Priority: 3] {UDP} 192.168.100.99:52525 -> 8.8.8.8:53
04/11/2026-20:16:25.741758  [**] [1:2062715:1] ET INFO Observed UA-CPU Header [**] [Classification: Misc activity] [Priority: 3] {TCP} 192.168.100.99:53720 -> 66.203.127.11:80
04/11/2026-20:19:40.406579  [**] [1:2027695:5] ET INFO Observed Cloudflare DNS over HTTPS Domain (cloudflare-dns .com in TLS SNI) [**] [Classification: Misc activity] [Priority: 3] {TCP} 192.168.100.99:52061 -> 104.16.248.249:443
04/11/2026-21:08:39.787225  [**] [1:1000001:1] DEBUG SQL Injection Attempt [**] [Classification: (null)] [Priority: 3] {TCP} 192.168.100.10:51566 -> 192.168.100.30:80

 

Demo







Client 端自我測試

curl http://testmyids.com

在 Server 端發向 Client 端的 SQL Injection 測試. 

echo "UNION SELECT 1,2,3" | nc -w 1 192.168.100.30 80


SQL Injection rules

cat /var/lib/suricata/rules/local.rules

alert tcp any any -> any any (msg:"DEBUG SQL Injection Attempt"; content:"UNION SELECT"; nocase; sid:1000001; rev:1;)






2026年3月21日 星期六

Zabbix MTR Template Lab

 事前導讀

https://www.meinekleinefarm.net/zabbix-template-net-mtr-my-traceroute/

其它相關資訊

https://xrcd2.blogspot.com/2023/04/zabbix-template-net-mtr-json-report-on.html

https://xrcd2.blogspot.com/2024/06/zabbix-70-lts.html

https://xrcd2.blogspot.com/2026/02/oracle-linux-101.html

以下操作基於 Oracle 10.1 + Zabbix 7.0.23

監控目地為專線是否有異常

從 Firewall WAN Port 至 介接的 Next Hop Gateway/Router IP 異常及品質監控  

尤其是有二個以上的 WAN port 或使用 SD-WAN 的架構監控最為合適

如 




或其它 MTR 相關運用皆可.

對於 MTR 不太了解的人,推薦自行觀看其它高手提供的資訊

MTR:Linux 網路診斷工具使用教學
(G. T. Wang 的個人部落格)


以下運用皆基於 mtr 這個工具延伸而來.

前置作業  zabbix_server.conf

 vi /etc/zabbix/zabbix_server.conf


### Option: EnableGlobalScripts

#    Enable global scripts on Zabbix server.

#       0 - disable

#       1 - enable

#

# Mandatory: no

# Default:

# EnableGlobalScripts=1


EnableGlobalScripts=1



前置作業  Linux sudo 

vi /etc/sudoers 

zabbix ALL=(root) NOPASSWD: /usr/sbin/mtr , /usr/lib/zabbix/externalscripts/mtr.sh  

可視自行監控需求修改之


前置作業 抄改 mtr.sh

https://github.com/xenadmin/zabbix-templates/blob/master/zabbix-net-mtr/mtr.sh


#!/bin/bash

IP=$1

mtr -r -c3 -w -b -p -j $IP


dnf install mtr -y  

vi /usr/lib/zabbix/externalscripts/mtr.sh 

可視自行監控需求修改之如

cat /usr/lib/zabbix/externalscripts/mtr.sh 

#!/usr/bin/bash

IP=$1

/usr/sbin/mtr -n -r -c3 -w -b -p -j $IP

mrt 測試


json 格式輸出  (Template_Net_MTR.xml 輸入的格式一定要是 json 方可使用)

shell 測試


前置作業 WEB UI  [Administrator\General\Timeouts]

External check  30s

可視自行監控需求修改之



匯入 Template_Net_MTR.xml

https://github.com/xenadmin/zabbix-templates/blob/master/zabbix-net-mtr/Template_Net_MTR.xml



透過 Shell + Template 主要取得內容為

item key 

(1)mtr.hop.host[{#HOP_ID}]

(2)mtr.hop.avg[{#HOP_ID}]

(3)mtr.hop.loss[{#HOP_ID}]


(1)MTR 第 n 個節點 IP 

(2)MTR 第 n 個節點 IP 的 RTT 

(3)MTR 第 n 個節點 IP 的 ICMP Loss


[{#HOP_ID}] 是一個由小到大的整數數值 從 1,2,3...其它的資訊可參考 Template_Net_MTR.xml

以上資訊的取得可用於圖示或告警之使用,可視自行監控需求修改之



Item prototypes


含 DNS 解析看到的 MTR Hop 2 [History 資訊]



 -n, --no-dns   [含不 DNS 解析] [=>個人偏好,監控可自行定義加上 Trigger Name 用以區分之]




MTR 可以看到的資訊



告警規則定義 可視自行監控需求修改之

last(/HiNet-GW/mtr.hop.loss[2]) >= 10

(last(/HiNet-GW/mtr.hop.host[2]) <> last(/HiNet-GW/mtr.hop.host[2],#2) or last(/HiNet-GW/mtr.hop.host[2])="???")

....




Demo


新增監控



亦可自定 Interval



2026年3月13日 星期五

FortiGate SD-WAN Lab

 FortiGate SD-WAN Lab


實驗目地: 希望維持 WAN1 為主路由 )、 WAN2 為備路由 , 且 WAN2 的 Virtual Server 會通的設定方式.

又不影響到既有 WAN1上原有的任何服務或規則之下,加入新擴增 WAN2 的其它運用.

事前導讀請參關 FortiGate Policy Routes (PBR) Lab

 https://xrcd2.blogspot.com/2026/03/fortigate-policy-routes-pbr-lab.html


方案 (1) 浮動靜態路由模式 / 主備模式

 (設定簡略)

config router static

    edit 1

        set gateway 110.100.100.30

        set priority 1

        set device "port2"

    next

    edit 2

        set gateway 220.100.100.30

        set priority 2

        set device "port3"

    next

end



這個最為簡單,不需配合 Policy Routes (PBR) 相關設定. (推)



方案  (2) 軟體定義廣域網路(SD-WAN)模式.


這就需要大改了,但日後維運上更為方便.


SD-WAN移轉改接測試如下所示....

---> Rule 規則移轉 GG   (要人工介入大改後方可使用)

===> 這個方案需大改 [不推]


(設定簡略)

config system sdwan

    set status enable

    config zone

        edit "virtual-wan-link"

        next

    end

    config members

        edit 1

            set interface "port3"

            set gateway 220.100.100.30

        next

        edit 2

            set interface "port2"

            set gateway 110.100.100.30

        next

    end

    config health-check

        edit "WAN.1.GW"

            set server "110.100.100.30"

            set members 2

        next

        edit "WAN.2.GW"

            set server "220.100.100.30"

            set members 1

        next

    end

    config service

        edit 1

            set name "Prefer_WAN1"

            set mode priority

            set dst "all"

            set src "all"

            set health-check "WAN.1.GW"

            set priority-members 2 1

        next

    end

end


config router static

    edit 1

        set distance 1

        set sdwan-zone "virtual-wan-link"

    next

end


















DNAT




差異設定對照 rule

(1) 2 WAN

 


(2) SD-WAN 



差異設定對照 Static Routes

(1) 2 WAN



(2) SD-WAN 



Routing Table


(1) 2 WAN



(2) SD-WAN



SD-WAN Rule





FortiGate Policy Routes (PBR) Lab

 FortiGate Policy Routes (PBR) Lab

實驗目地: 希望維持 WAN1 為主路由 (Priority 10)、 WAN2 為備路由 (Priority 20), 且 WAN2 的 Virtual Server 會通.

實驗架構簡圖








Port3 Setting 


show routing table


 

Test WAN2 DNAT




順便再測一下 WAN1 DNAT 是否可以併存...(設定步驟這裡就省略了)



 

實驗設定(略)


config system interface

    edit "port1"

        set vdom "root"

        set ip 192.168.1.1 255.255.255.0

        set allowaccess ping https ssh http fgfm

        set type physical

        set snmp-index 1

    next

    edit "port2"

        set vdom "root"

        set ip 110.100.100.1 255.255.255.224

        set allowaccess ping

        set type physical

        set snmp-index 2

    next

    edit "port3"

        set vdom "root"

        set ip 220.100.100.1 255.255.255.224

        set allowaccess ping

        set type physical

        set src-check disable

        set snmp-index 3

    next



config firewall policy

    edit 1

        set name "WEB-IN"

        set uuid 872489d8-1ee5-51f1-91a3-9838e225d9f8

        set srcintf "port3"

        set dstintf "port1"

        set action accept

        set srcaddr "all"

        set dstaddr "WEB-DNAT"

        set schedule "always"

        set service "ALL"

    next

end





config firewall vip

    edit "WEB-DNAT"

        set uuid 528b1c78-1ee5-51f1-b558-b153d89f1cf2

        set extip 220.100.100.20

        set mappedip "192.168.1.20"

        set extintf "port3"

    next

end




config router static

    edit 1

        set gateway 110.100.100.30

        set device "port2"

    next

    edit 2

        set gateway 220.100.100.30

        set distance 20

        set device "port3"

    next

end



config router policy

    edit 1

        set input-device "port1"

        set srcaddr "WEB-Server"

        set dstaddr "all"

        set gateway 220.100.100.30

        set output-device "port3"

    next

end