使用人性化的 Linux 防火墻 CFW 阻止 DDOS 攻擊
概括
CFW(Cyber Firewall)是一個人性化的 Linux 防火墻。它旨在協助阻止拒絕服務攻擊(DDoS),同時能控制 Linux 系統端口的開關。CFW 基于 Linux 原生基礎設施運行,擁有良好的軟件兼容性。
該軟件基于 iptables 和 ipset,使用 Python 開發,使用時建議關閉發行版自帶的防火墻(如 firewalld、ufw)避免沖突。
通過 CFW,你將能夠:
- 通過自定義的規則自動封禁互聯網中的惡意 IP,以防止拒絕服務攻擊
- 保護 Linux 的所有端口遭受 DDoS 攻擊,而不僅僅是 Web 應用
- 獲得良好的軟件兼容性,原生支持 Nginx、Caddy 等服務器
- 支持配合 CDN 使用,使用 CDN 時請將 CDN 的 IP 段設置為 CFW 白名單
- 控制開啟或關閉 Linux 系統的 TCP/UDP 端口
- 獲得友好的命令行交互式體驗
背景
Web 應用程序運行在復雜的互聯網中,隨時可能面臨惡意攻擊,導致拒絕服務現象。為了封禁這些不友好的 IP,CFW 正是為此而誕生。
CFW 的靈感最初來自寶塔面板的 Nginx 防火墻。然而,使用 Nginx 防火墻的過程中遇到諸多不順。該防火墻僅針對 Web 應用(通常是 80 和 443 端口)防御 CC 攻擊,無法保護 Linux 服務器的其他端口。同時,該防火墻需要按月付費,并始終捆綁寶塔生態(最新的寶塔面板甚至需要登錄綁定手機實名制的賬號),從而限制了軟件自由度。我們想在純凈的 Linux 中運行防火墻,并對所有端口生效,于是自己開發了一個。
由于 CFW 基于 iptables 和 ipset,不免會與發行版自帶的防火墻(如 firewalld、ufw)沖突,我們增加了 CFW 對端口開關的控制。
實現
CFW 通過 ??ss -Hntu | awk '{print $5,$6}'?
? 命令獲取當前服務器的所有連接。客戶端的請求若超過設定并發數,該 IP 將被 iptables 封禁,并存儲在 ipset 數據結構中。
CFW 通過調用 ??iptables?
? 命令實現 Linux 端口的開關。
安裝
請先確保系統擁有以下依賴。
對于 Debian、Ubuntu 等:
對于 CentOS 等:
安裝好系統依賴后,輸入以下命令安裝 CFW:
你也可以下載該腳本閱讀,以了解該腳本所進行的工作后再執行上述命令。
完成安裝后,使用 ??source ~/.bashrc?
? 激活 CFW 的環境變量。(或者新打開一個 shell 環境,自動激活環境變量。)
在 Linux 終端輸入 ??systemctl status cfw?
?,顯示 ??active (running)?
? 字樣說明 CFW 已成功運行,同時會在服務器重啟時自動運行。
卸載
配置
配置文件在 ??/etc/cfw/config.yaml?
? 中,修改配置文件后運行 ??systemctl restart cfw?
? 即可生效。
配置文件參數說明:
命令
命令中 ??[]?
? 表示變量。
運行
- 停止 CFW:?
?systemctl stop cfw?
? - 啟動 CFW:?
?systemctl start cfw?
? - 重啟 CFW:?
?systemctl restart cfw?
?
IP 黑名單管理
- 手動封禁單個 IPv4 地址:?
?cfw block [ip]?
? - 手動解封單個 IPv4 地址:?
?cfw unblock [ip]?
? - 查看 IPv4 黑名單:?
?cfw blacklist?
? - 手動封禁單個 IPv6 地址:?
?cfw block6 [ip]?
? - 手動解封單個 IPv6 地址:?
?cfw unblock6 [ip]?
? - 查看 IPv6 黑名單:?
?cfw blacklist6?
?
Linux 端口操作
- 放行 IPv4 端口:
cfw allow [port]
- 阻止 IPv4 端口:
cfw deny [port]
- 單獨放行 IPv4 TCP 端口:
cfw allow [port]/tcp
,示例如cfw allow 69.162.81.155/tcp
- 單獨阻止 IPv4 TCP 端口:
cfw deny [port]/tcp
,示例如cfw deny 69.162.81.155/tcp
- IPv4 UDP 端口操作同理
- 查看所有放行的 IPv4 端口:
cfw status
- 放行 IPv6 端口:
cfw allow6 [port]
- 阻止 IPv6 端口:
cfw deny6 [port]
- 單獨放行 IPv6 TCP 端口:
cfw allow6 [port]/tcp
,示例如cfw allow6 69.162.81.155/tcp
- 單獨阻止 IPv6 TCP 端口:
cfw deny6 [port]/tcp
,示例如cfw deny6 69.162.81.155/tcp
- IPv6 UDP 端口操作同理
- 查看所有放行的 IPv6 端口:
cfw status6
日志操作
動態查詢日志 ??cfw log [num]?
?。??[num]?
? 為查詢日志的條數,查詢結果將按時間倒序。
相關鏈接
- GitHub:??https://github.com/Cyberbolt/cfw??
- 電光筆記:??https://www.cyberlight.xyz/??
- Potato Blog:??https://www.liuya.love/??
更多
如果你在使用中遇到任何問題,歡迎在 ??https://github.com/Cyberbolt/cfw/issues?? 處留言。有了你的幫助,CFW 才能日漸壯大。
總結
CFW 可以防止一定程度的 DDoS 攻擊,同時能控制開啟或關閉 Linux 系統的 TCP/UDP 端口,很好地幫助我們解決惡意 IP 入侵的問題。但是不要做不切實際的想象,認為 CFW 可以抵御大型 DDoS 攻擊。DDoS 攻擊的規模往往與成本是正相關的,必要時提升網絡帶寬才能解決問題的根本。