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