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