Linux中國

使用人性化的 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 等:

sudo apt install -y curl ipset python3 git net-tools

對於 CentOS 等:

sudo yum install -y curl ipset python3 git net-tools

安裝好系統依賴後,輸入以下命令安裝 CFW:

sudo curl https://raw.githubusercontent.com/Cyberbolt/cfw/main/install.py | python3

你也可以下載該腳本閱讀,以了解該腳本所進行的工作後再執行上述命令。

完成安裝後,使用 source ~/.bashrc 激活 CFW 的環境變數。(或者新打開一個 shell 環境,自動激活環境變數。)

在 Linux 終端輸入 systemctl status cfw,顯示 active (running) 字樣說明 CFW 已成功運行,同時會在伺服器重啟時自動運行。

卸載

sudo curl https://raw.githubusercontent.com/Cyberbolt/cfw/main/uninstall.py | python3

配置

配置文件在 /etc/cfw/config.yaml 中,修改配置文件後運行 systemctl restart cfw 即可生效。

配置文件參數說明:

# CFW 運行埠
port: 6680
# CFW 檢測連接的頻率,單位:秒。此處默認 5 秒一次。
frequency: 5
# 允許每個 IP 連接的最大並發數,超過將被 CFW 封禁。
max_num: 100
# 解封 IP 的時間。此處默認 IP 被封禁後 600 秒將自動解封。若此處值為 0,則永久封禁。
unblock_time: 600
# 數據備份時間,單位:秒。
backup_time: 60

# IPv4 白名單路徑。寫在文本文件中,一行一個 IP,支持子網掩碼。)本地地址、內網地址默認在該文件中)
whitelist: /etc/cfw/ip_list/whitelist.txt
# IPv4 黑名單路徑。寫在文本文件中,一行一個 IP,支持子網掩碼。
blacklist: /etc/cfw/ip_list/blacklist.txt

# IPv6 白名單路徑。寫在文本文件中,一行一個 IP。
whitelist6: /etc/cfw/ip_list/whitelist6.txt
# IPv6 黑名單路徑。寫在文本文件中,一行一個 IP。
blacklist6: /etc/cfw/ip_list/blacklist6.txt

# 日誌文件的路徑
log_file_path: /etc/cfw/log/log.csv
# 日誌文件的最大行數。(達到最大行數後將自動滾動。若此處值為 0,則不限制最大行數)
log_max_lines: 10000000

命令

命令中 [] 表示變數。

運行

  • 停止 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] 為查詢日誌的條數,查詢結果將按時間倒序。

相關鏈接

更多

如果你在使用中遇到任何問題,歡迎在 https://github.com/Cyberbolt/cfw/issues 處留言。有了你的幫助,CFW 才能日漸壯大。

總結

CFW 可以防止一定程度的 DDoS 攻擊,同時能控制開啟或關閉 Linux 系統的 TCP/UDP 埠,很好地幫助我們解決惡意 IP 入侵的問題。但是不要做不切實際的想像,認為 CFW 可以抵禦大型 DDoS 攻擊。DDoS 攻擊的規模往往與成本是正相關的,必要時提升網路帶寬才能解決問題的根本。

作者簡介:

Cyberbolt:一個自由的 Python 開發者。

作者:Cyberbolt 編輯:wxy

本文由貢獻者投稿至 Linux 中國公開投稿計劃,採用 CC-BY-SA 協議 發布,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國