在網路服務為主的世代,所有資訊服務都會經由網路 IP 與 Port 對外提供服務,然而現在越來越多的網路攻擊事件,尤其是暴力破解猜帳號的手法不斷上演,對於企業資訊系統的安全帶來威脅。
在這種情況下,採用登入失敗幾次號就阻擋此 IP 的作法是一個可行的方案。在很久以前 Linux 上已經有 Fail2ban 這樣防止暴力破解的入侵防護框架,功能強大而有效。
而在 Windows 陣營這邊,除了 RDP (遠端桌面協定) 漏洞之外,也有越來越多的 RDP 被猜到帳號入侵導致加密勒索檔案的案件發生,那麼 Windows 平台上有沒有這樣的開源方案可以使用呢?
在這種情況下,採用登入失敗幾次號就阻擋此 IP 的作法是一個可行的方案。在很久以前 Linux 上已經有 Fail2ban 這樣防止暴力破解的入侵防護框架,功能強大而有效。
而在 Windows 陣營這邊,除了 RDP (遠端桌面協定) 漏洞之外,也有越來越多的 RDP 被猜到帳號入侵導致加密勒索檔案的案件發生,那麼 Windows 平台上有沒有這樣的開源方案可以使用呢?
方案介紹
當然有 (廢話,不然這篇怎麼寫下去)。IPBan 是一款效能與功能兼具的開源入侵/暴力攻擊防護框架工具,作者甚至寫下:
You won't find a more robust and performant ip address blocking solution. Many thousands of happy users around the world use IPBan to secure their Windows and Linux computers.
作者表示你們不會找到比 IPBan 更好的方案,而本文開頭的圖片是官網所放,漫威電影「奇異博士」當中的場景,作者是看到了這個畫面而啟發了 IPBan 防護的靈感,容易使用且功能強大。對於自己開發的套件信心由此可見一般,而在使用過程中它也沒有讓我失望。
IPBan 分為 Free 與 Pro 版本,Free 開源且免費的版本提供功能如下:
- 提供登入失敗次數、鎖定時間等相關封鎖設定
- 可以使用簡單的行列或正規表示式設定白名單或黑名單
- 無縫整合 Windows Firewall
- 可自訂關鍵字、XPath 與正規表示式等方式來剖析事件記錄
- 設定調整後無須重啟程式立即生效
- 高度彈性設定能力,只要在 Windows 事件記錄出現的事件都可以處理
- 預載 RDP、MSSQL、MySQL、Exchange、SSH、VNC 登入失敗封鎖設定
- 完整支援 IPv4 與 IPv6
- 目前支援 Windows 與 Linux,macOS 版開發中
- 免安裝,開箱即用
對於目前苦惱於必須開啟 RDP 而又擔心被攻破的主機來說,IPBan 會是一個很有幫助的解決方案。
安裝方式
版本要求
官方建議的需求版本:- .NET Core 2.2
- Windows 8.1 以上
- Windows Server 2012 R2 SP1 以上
雖然官方建議如此,但實際上 Windows 7 SP1 與 Windows 2008 R2 應該也是可以使用的。
請到官方網站下載壓縮包,解開後裡面有三個作業系統版本 (Win x86、Win x64、Ubuntu x64),再依據使用的作業系統將他解開至 c:\IPBan 資料夾即可。
官網目前最新版本:
https://github.com/DigitalRuby/IPBan/releases/tag/1.5.0.0
在某些情況下,IPBan 可能會被 Windows 作業系統認為是網路上下載的不安全程式,請打開 PowerShell 將之解鎖。
經 PowerShell 解鎖 IPBan 檔案
dir C:\IPBan | Unblock-File
IPBan 可以直接執行使用,也可以安裝為系統服務。安裝的方式有兩種,提供兩種作法如下:
經 Command 以 SC 指令安裝服務
sc.exe create IPBAN type=own start=delayed-auto binPath=c:\IPBan\DigitalRuby.IPBan.exe DisplayName=IPBAN sc.exe description IPBAN "Automatically builds firewall rules for abusive login attempts: https://github.com/DigitalRuby/IPBan" sc.exe start IPBAN
經 PowerShell 以 New-Service 指令安裝服務
New-Service -Name "IPBAN" -BinaryPathName "c:\path\to\service\DigitalRuby.IPBan.exe" -StartupType automatic -DisplayName "IPBAN" -Description "Automatically builds firewall rules for abusive login attempts: https://github.com/DigitalRuby/IPBan" Get-WmiObject win32_service -Filter "name='IPBAN'" Start-Service IPBAN sc.exe config IPBAN start= delayed-auto
主要功能
安裝完成以後,接著還有一些前置作要處理,首先是啟用安全性原則中的登入與登出稽核。在不同語言的作業系統中,這個安全性稽核的名稱是對應當地語系,因此請依據安裝的作業系統語言來選擇要下的指令。
不同語言的指令已整理如下:
對於封鎖的相關參數,都寫在 c:\IPBan\DigitalRuby.IPBan.dll.config 設定檔裡,請以文字編輯器開啟即可進行設定。
其中有幾個較為重要的參數列舉如下,提供參考。
一般通常是調整前兩個居多,其它不太需要進行修改。
當 IPBan 系統正確設定及運作後,有偵測到多次登入失敗的事件,會在畫面上可以看到訊息。如果是以服務模式啟動,則需要查看 c:\IPBan\logfile.txt 的內容。
在訊息中會明確顯示被封鎖的來源 IP、嘗試登入的帳號名稱以及次數。資訊清楚,容易判讀。
不怕一萬,只怕萬一。若是不小心自己手殘搞到被封鎖,或是你的高階長官被鎖定要求你立刻解除,要怎麼辦?
與 Fail2ban 不同,IPBan 的解鎖機制非常簡單,不需要記指令,只要會操作記事本就可以。
請建立一個文字檔,放在 c:\IPBan\unban.txt 。裡面放上要解鎖的 IP,每一行放一筆,存檔後即可。例如:
這個範例一存檔後,就會在 15 秒內完成解鎖,這個輪詢的時間設定請參考上面提到的 CycleTime 參數說明。
當成功解鎖後,也可以在記錄上清楚的看見,並且會在解鎖之後自動將 unban.txt 檔案刪除。
既然提到了手動解鎖,那要怎麼手動封鎖呢?同樣的道理,請建立一個文字檔,放在 c:\IPBan\ban.txt,存檔後的 15 秒內即會將你列在檔案中的 IP 全部封殺。
由於用法跟格式都跟手動解鎖一樣,就不以範例說明。
啟用稽核
不同語言的指令已整理如下:
英文版
auditpol /set /category:"Logon/Logoff" /success:enable /failure:enable auditpol /set /category:"Account Logon" /success:enable /failure:enable
中文版
auditpol /set /category:"登入/登出" /success:enable /failure:enable auditpol /set /category:"帳戶登入" /success:enable /failure:enable
限制設定
對於封鎖的相關參數,都寫在 c:\IPBan\DigitalRuby.IPBan.dll.config 設定檔裡,請以文字編輯器開啟即可進行設定。
其中有幾個較為重要的參數列舉如下,提供參考。
<!-- 登入失敗幾次進行封鎖 --> <add key="FailedLoginAttemptsBeforeBan" value="5"/> <!-- 封鎖時間,格式 日:時:分:秒 --> <add key="BanTime" value="01:00:00:00"/> <!-- 最後一次登入失敗後要記住的時間,格式 日:時:分:秒 --> <add key="ExpireTime" value="01:00:00:00"/> <!-- 手動封鎖或解除封鎖的生效時間,格式 日:時:分:秒 --> <add key="CycleTime" value="00:00:00:15"/> <!-- 設定使用者名稱的白名單,正常情況下應該要保持空白 --> <!-- 除非白名單中的使用者密碼強度足夠 --> <add key="UserNameWhitelist" value=""/>
一般通常是調整前兩個居多,其它不太需要進行修改。
自動封鎖
當 IPBan 系統正確設定及運作後,有偵測到多次登入失敗的事件,會在畫面上可以看到訊息。如果是以服務模式啟動,則需要查看 c:\IPBan\logfile.txt 的內容。
IP 被封鎖的訊息
在訊息中會明確顯示被封鎖的來源 IP、嘗試登入的帳號名稱以及次數。資訊清楚,容易判讀。
手動解鎖
不怕一萬,只怕萬一。若是不小心自己手殘搞到被封鎖,或是你的高階長官被鎖定要求你立刻解除,要怎麼辦?
與 Fail2ban 不同,IPBan 的解鎖機制非常簡單,不需要記指令,只要會操作記事本就可以。
請建立一個文字檔,放在 c:\IPBan\unban.txt 。裡面放上要解鎖的 IP,每一行放一筆,存檔後即可。例如:
unban.txt 範例
192.168.0.100 192.168.0.101
這個範例一存檔後,就會在 15 秒內完成解鎖,這個輪詢的時間設定請參考上面提到的 CycleTime 參數說明。
IP 被解鎖的訊息
當成功解鎖後,也可以在記錄上清楚的看見,並且會在解鎖之後自動將 unban.txt 檔案刪除。
手動封鎖
既然提到了手動解鎖,那要怎麼手動封鎖呢?同樣的道理,請建立一個文字檔,放在 c:\IPBan\ban.txt,存檔後的 15 秒內即會將你列在檔案中的 IP 全部封殺。
由於用法跟格式都跟手動解鎖一樣,就不以範例說明。
結論
在過去這類防止暴力破解的入侵防護框架都只有在 Unix-like 的系統才能享用,Windows 上則須購買商用軟體才能達到效果,幸好有了 IPBan 這樣優秀的開源套件橫空出世,解救了 Windows 平台上苦惱的眾生,而且它還設計的簡單好用,效能優秀,根本是 Windows 伺服器必裝的居家良藥啊!
參考資料
- DigitalRuby/IPBan
https://github.com/DigitalRuby/IPBan
- DigitalRuby/IPBan Wiki
https://github.com/DigitalRuby/IPBan/wiki
- core/2.2-supported-os.md at master · dotnet/core
https://github.com/dotnet/core/blob/master/release-notes/2.2/2.2-supported-os.md