使用人性化的 Linux 防火墙 CFW 阻止 DDOS 攻击

CFW(Cyber Firewall)是一个人性化的 Linux 防火墙。

CFW(Cyber Firewall)是一个人性化的 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

日志文件的路径

logfilepath: /etc/cfw/log/log.csv

日志文件的最大行数。(达到最大行数后将自动滚动。若此处值为 0,则不限制最大行数)

logmaxlines: 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 编辑:wxy

本文由贡献者投稿至 Linux 中国公开投稿计划,采用 CC-BY-SA 协议 发布,Linux中国 荣誉推出

主题测试文章,只做测试使用。发布者:eason,转转请注明出处:https://aicodev.cn/2023/01/05/%e4%bd%bf%e7%94%a8%e4%ba%ba%e6%80%a7%e5%8c%96%e7%9a%84-linux-%e9%98%b2%e7%81%ab%e5%a2%99-cfw-%e9%98%bb%e6%ad%a2-ddos-%e6%94%bb%e5%87%bb/

Like (0)
eason的头像eason
Previous 2023年1月5日
Next 2023年1月5日

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信