關閉 Fortigate SIP ALG

在進行網路服務邊界測試的過程中, 時常掃出 5060, 2000 這兩個 Port, 但客戶均表示防火牆沒有開啟這兩個 Port, 也無法透過 Police 去進行阻擋, 經過調查後發現是 Gateway 自帶的 SIP ALG 所造成的.

什麼是 SIP ALG

SIP (Session Initiation Protocol) 是 VoIP 中一個非常重要的協議, 該協議於 1999 年由 IETF 提出, 由於當時並沒有將 NAT 納入設計, 因此在 NAT 環境下 SIP 難以正常運作, 然而現今網路環境中, 不論是電信業/企業還是家庭都十分依賴 NAT 技術, 為了使 SIP 在 NAT 環境下能夠正常運行, ALG (Application Layer Gateway) 就此誕生, ALG 是一個通過分析與修改 SIP 請求的應用服務, 使 SIP 能夠順利通過 NAT 環境與外界聯繫.

SIP ALG 與現代企業網路架構

現代企業為了提高網路安全性, 通常會架設一個 Gateway 來隔離外網與內網, 企業也從傳統總機逐漸轉往 VoIP, 為了順應潮流, 許多 Gateway 廠商內建了 SIP ALG, 甚至還幫你啟動了, 由於 SIP ALG 直接應用於 Gateway 本身, 從防火牆設定上很難看出端倪, 而 SIP ALG 本身又是一個主動服務, 因此進行 nmap 掃描時都會發現它的存在, 不知道的人會以為主機被入侵了呢!

關閉 SIP ALG 以 Fortigate 為例

由於我手邊只有 Fortigate 60E, 因此選擇 Fortigate 作為例子

在 Fortigate 上關閉 SIP ALG 的步驟如下
(請連上 Fortigate 的 Terminal, Web 介面並沒有相關設定可供調整)

1 移除 session helper

config system session-helper
show
###########################
# 這邊會顯示很多 helper
# 找到下方這個 helper (他的 id 可能不是 13)
#   edit 13
#   set name sip
#   set protocol 17
#   set port 5060
###########################

# 在我的主機上 helper 的 id 為 13, 後續指令以 13 為例
delete 13
end

2 調整 ALG 模組

config system settings
set default-voip-alg-mode kernel-helper-based
end

config voip profile
edit default
config sip
set status disable
end
end

3 重新啟動 Fortigate

macOS 無法使用 127.0.0.2 的解決辦法

127.0.0.0/8 是保留給 loopback 網路卡使用的網段, 我們可以藉由 127.0.0.0/8 來模擬不同的IP以及測試網卡驅動是否正常, 在 Windows 跟 Linux 下 127.0.0.0/8 都可以正常運作, 但 macOS 下卻無法連線, 主要原因是因為 FreBSD家族預設只會 bind 127.0.0.1, 因此 127.0.0.2, 127.0.0.3 之類的都不會通.

我們可以透過下列指令將需要的 loopback IP 叫回來( 這邊用 127.0.0.2 作為範例)

sudo ifconfig lo0 alias 127.0.0.2 netmask 0xFFFFFFFF

指令執行成功後, 我們就會發現可以 ping 到 127.0.0.2 了

註: 重新開機設定會消失, 需要重新執行指令

Linux 設定 VLAN 802.1Q

在複雜網路環境中適度的使用 VLAN 會幫助我們降低管理複雜度, 當我們設定完 Switch 端 VLAN 設定後, 我們也必須調整電腦端的 VLAN 設定來接入 VLAN 網路, Linux 對於 VLAN 的支援非常穩定, 透過以下的方法我們便可以在 Linux 輕鬆使用 VLAN.

安裝相關套件

安裝 VLAN 套件

sudo apt-get install vlan

將 802.1q 模組載入 Kernel

modprobe 8021q

確認 Kernel 有正確載入 802.1Q 模組

sudo lsmod | grep -i 8021q 

有輸出就代表有正常載入 802.1Q 模組

8021q                  27844  0 
garp                   13117  1 8021q
mrp                    17343  1 8021q

設定網路卡

在我的網路環境中, 我有一張實體網路卡 eth0, 並且要設定兩張 VLAN 網卡, 分別為 VLAN 5 與 VLAN 10.

編輯 /etc/network/interfaces

# 將 eth0 網卡切入手動模式
auto eth0
iface eth0 inet manual
        pre-up ifconfig $IFACE up

# 網卡名稱格式為 Bridge 網卡.VLAN

# 建立 VLAN 5 網卡, 靜態網路設定
auto eth0.5 
iface eth0.5 inet static
        vlan-raw-device eth0  #Bridge 到 eth0
        # 以下為基本網卡設定, 依照需求設定即可
        address 10.10.10.254
        netmask 255.255.255.0

# 建立 VLAN 10 網卡, DHCP
auto eth0.10
iface eth0.10 inet dhcp
        vlan-raw-device eth0

設定完畢後重新啟動 networking

/etc/init.d/networking restart

若設定都正確, ifconfig 將會顯示設定好的 VLAN 網卡, 這樣我們就可以正常存取 VLAN 網路了

如何擷取 Windows Loopback 封包

在開發各種網路系統時, 不管是 安全分析, 流量分析, 協定分析…等都逃不了封包分析的命運, 在開發階段, 我們時常會建立 local server 進行測試, 前陣子因為特殊原因必須要分析封包時才赫然發現 Wireshark 在 Windows 上竟然無法擷取 loopback 介面的封包(127.0.0.1 之類的, 只要是本機持有的 IP 都不行), 根據 Wireshark 官方說法是不支援, 只好開始尋找其他方法.

在經過各種嘗試, 最終只剩下 NPacp, NetCap, RawCap 這三個工具可以達成我的目的, 網路上也有人提過 KB-839013 但實測後發現沒有任何效果.

最後我選擇了 RawCap, 因為他輕巧免安裝, 又可以產生 pcap 讓我繼續用 Wireshark 分析

RawCap

官方網站: Netresec
下載位置: RawCap

使用方法

程式一執行就會列出可以用的網路介面卡, 在這邊我的 LoopBack 卡是 7號


在選擇完介面後, 程式會詢問檔案名稱, 這邊我維持預設 dumpfile.pcap

開始擷取封包後, 只要按下 Ctrl+C 便可以停止錄製並退出程式

在 RawCap 的所在目錄就會出現 dumpfile.pcap, 這便是我們要的擷取結果, 使用 Wireshark 開啟就可以看到之前無法擷取的 loopback 封包