使用人性化的 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# 日志文件的路径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
攻击的规模往往与成本是正相关的,必要时提升网络带宽才能解决问题的根本。

©本文为清一色官方代发,观点仅代表作者本人,与清一色无关。清一色对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。本文不作为投资理财建议,请读者仅作参考,并请自行承担全部责任。文中部分文字/图片/视频/音频等来源于网络,如侵犯到著作权人的权利,请与我们联系(微信/QQ:1074760229)。转载请注明出处:清一色财经

(0)
打赏 微信扫码打赏 微信扫码打赏 支付宝扫码打赏 支付宝扫码打赏
清一色的头像清一色管理团队
上一篇 2023年5月7日 05:29
下一篇 2023年5月7日 05:29

相关推荐

发表评论

登录后才能评论

联系我们

在线咨询:1643011589-QQbutton

手机:13798586780

QQ/微信:1074760229

QQ群:551893940

工作时间:工作日9:00-18:00,节假日休息

关注微信