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

3次阅读

共计 2751 个字符,预计需要花费 7 分钟才能阅读完成。

CFW (Cyber Firewall) 是一个人性化的 Linux 防火墙。它旨在帮助阻止拒绝服务攻打 (DDOS),同时能管制 Linux 零碎端口的开关。因为基于 Linux 原生运行,CFW 领有良好的软件兼容性。

该软件基于 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 端口的开关。

装置

请先确保零碎领有以下依赖:

示例 1 (Debian, Ubuntu)

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

示例 2 (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

链接

  • GitHub: https://github.com/Cyberbolt/cfw
  • 电光笔记: https://www.cyberlight.xyz/
  • Potato Blog: https://www.liuya.love/

配置

配置文件在 /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 白名单门路。写在 txt 中,一行一个 ip,反对子网掩码。(本地地址、内网地址默认在该文件中)
whitelist: /etc/cfw/ip_list/whitelist.txt
# ipv4 黑名单门路。写在 txt 中,一行一个 ip,反对子网掩码。blacklist: /etc/cfw/ip_list/blacklist.txt

# ipv6 白名单门路。写在 txt 中,一行一个 ip。whitelist6: /etc/cfw/ip_list/whitelist6.txt
# ipv6 黑名单门路。写在 txt 中,一行一个 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 能力日渐壮大。

正文完
 0