以往對於自行架設的伺服器進行安全防護,大多是設定好防火牆(Firewall)以及像是 Fail2ban 這類根據特定規則自動阻擋的工具,就能減緩大多數網路攻擊。
直到前陣子我在家中的 GitLab 突然發了非常多密碼重設信,才發現缺乏很多手段去阻止現代的網路攻擊,單純依靠 Fail2ban 已經不足以解決問題。
Fail2ban
Fail2ban 算是很基礎的防護方式,在大多數 Linux 伺服器的最佳實踐都會提到這個做法,我們可以直接根據失敗的狀況,自動的封鎖一些特定的 IP 位址來防禦。
然而,很多新型態的攻擊使用 Fail2ban 是難以偵測的,像是我的 GitLab 之所以無法使用這個方式防禦,主要是受到 Slow Brute-force(慢速暴力破解)這種類型的方式攻擊,原本 GitLab 就具備類似 Fail2ban 的機制,在密碼失敗多次後會自動拒絕登入。
但 Slow Brute-force 跟他的名字一樣,主要是透過不觸碰到 Fail2ban 觸發的間隔來嘗試,那麼即使知道某個使用者密碼一直打錯,也很難對這個有問題的來源進行阻擋,如果想要更有效的處理,就需要更複雜的判斷方式。
Fail2ban 還有一些限制,像是 Linux 上只會針對本機,但是現代透過虛擬機器(Virtual Machine)方是部署時,要同步的進行阻擋也會是一個挑戰。
CrowdSec
在注意到 CrowdSec 之前,我也有嘗試尋找像是 IDS/IPS(Intrusion Detection and Prevention,入侵偵測與防禦系統)類型的解決方案,但是適合在 Home Lab 環境使用的開源專案,對硬體的需求跟搭建要求都比預期複雜,直到 CrowdSec 提供一個相對適合的方案。
因為 CrowdSec 可以直接從雲端存取一些 Blacklist(黑名單)直接在硬體防火牆或者比較進階的路由器上,匯入這些 IP 名單拒絕連線,那麼經常被當作攻擊跳板的電腦、有漏洞的裝置就能一定程度被阻擋。
這些名單會由一些公司、社群維護,更新頻率比較高的大多可以提供相當不錯的基礎防禦
除此之外,也能利用 Security Engine 的方式換取社群名單,這份名單是由 CrowdSec 的使用者將透過 Security Engine 分析日誌(如:Access Log、Auth Log)後上傳回報,經過一些規則彙整而成,可以提供接近於網路安全公司付費的 IP 濫用資料庫的資料,能夠涵蓋的範圍就更大。
既然 Security Engine 可以提供這樣的分析,那就表示他本身具備了像是原本 Fail2ban 的機制可以識別一些經常失敗的錯誤偵測能力,還能利用 CrowdSec 和社群維護的各種「情境(Scenario)」來比對更多狀況(如: 針對 CVE(Common Vulnerabilities and Exposures,常見漏洞與揭露)漏洞的攻擊)
相比 Fail2ban 的基本規則且不太容易擴充,使用 CrowdSec 提供了更簡單、全面的偵測能力,對於硬體的要求也比許多 IDS/IPS 解決方案低得多。
這些解析都會發生在地端,除了作為分析伺服器之外,也提供了動態查詢社群列表、已被偵測到的攻擊等資訊,可以近一步整合到防火牆、Web Server 等等環境,建立更動態的防禦機制。
Security Engine 在免費方案中的三個 Blacklist 列表大多非常足夠使用,同時 Security Engine 也是 API 伺服器,就能順利跨節點同步相同的阻擋名單(社群名單加上環境的動態名單)
取捨
如果不想花時間處理,直接透過雲端供應商的解決方案是非常簡單的做法,至少 CrowdSec 能提供的能力,在雲端供應商的基礎建設就已經涵蓋,更複雜的功能也有像是 WAF(Web Application Firewall,網頁應用程式防火牆)可以覆蓋。
然而很多情境都是需要做出取捨,雲端供應商之所以可以提供這些資源,也是因為把費用包含在服務中只是簡化了收費,如果是實驗性為主的服務,放在自己組的主機或者 VPS(Virtual Private Server)都會便宜不少,代價就是要自己處理防護。
另一種也可以選擇像是 Cloudflare 這類提供 CDN(Content Delivery Network,內容傳遞網路)和 WAF 服務的廠商作為代理(Proxy)那麼網路攻擊很大一部分也就會在抵達地端或者自行管理的主機錢就被緩解掉大多數的狀況,但也可能需要負擔額外的費用跟風險。
今年發生不少次雲端的障礙,造成非常多服務中斷,這也是其中的代價之一
最安全的則是將網路服務都保護在私有網路中不對外公開,雖然不會被攻擊,但也很難直接存取造成不便,這些都是取捨的一種類型。
最終會選擇使用 CrowdSec 主要就是硬體要求不高(至少 1 vCPU 搭配 100 RAM 記憶體)並且有非常多社群的規則可以直接使用,降低了維護成本,在有需要對外公開服務跟管理上,對個人使用為主的環境算是幫了很大的忙。
目前使用一週左右,原本家中許多沒有被偵測到的攻擊,現在都能動態的導入到路由器的防火牆阻擋,增加攻擊方的成本。
如果這篇文章對你有幫助,可以用以下方式支持我撰寫更多文章。