CFW防火墙阻止ddos攻击
CFW简介
项目地址:https://github.com/Cyberbolt/cfw
技术原理:
CFW
通过ss -Hntu | awk '{print $5,$6}'
命令获取当前服务器的所有连接
。
如果客户端的请求超过设定的并发数
,该ip就会被iptables
屏蔽,并保存在ipset
数据结构中。
CFW
通过调用 iptables
命令实现 Linux 端口的开关,使用CFW
需要关闭
发行版自带的防火墙(如 firewalld
、ufw
)避免冲突。
# 禁用firewald防火墙
systemctl mask firewalld --now
# 禁用ufw防火墙
systemctl mask ufw --now
Linux安装CFW
参考:https://linux.cn/article-15412-1.html
# RHEL安装依赖包
yum install -y curl ipset python3 git net-tools
# Debian安装依赖包
sudo apt install -y curl ipset python3 git net-tools
# 安装cfw
curl https://raw.githubusercontent.com/Cyberbolt/cfw/main/install.py | python3
# 激活环境变量
source ~/.bashrc
# 查看CFW运行状态
systemctl status cfw -l
配置CFW
配置文件在 /etc/cfw/config.yaml
中,默认配置
如下:
# CFW 运行端口
port: 6680
# CFW 检测连接的频率,单位:秒。此处默认 5 秒一次。
frequency: 5
# 允许每个 IP 连接的最大并发数,超过将被 CFW 封禁。
max_num: 100
# 解封 IP 的时间。此处默认 IP 被封禁后 600 秒将自动解封。
## 若此处值为 0,则永久封禁。--bug,能设为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
常用操作
IP黑名单管理
IPV4
黑名单管理
# 查看 IPv4 黑名单:
cfw blacklist
# 手动封禁单个 IPv4 地址:
cfw block [ip]
# 手动解封单个 IPv4 地址:
cfw unblock [ip]
IPV6
黑名单管理
# 查看 IPv6 黑名单:
cfw blacklist6
# 手动封禁单个 IPv6 地址:
cfw block6 [ip]
# 手动解封单个 IPv6 地址:
cfw unblock6 [ip]
Linux 端口操作
IPV4端口操作
# 放行 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端口操作
# 放行 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
日志操作
[num] 为查询日志的条数,查询结果将按时间倒序。
# 动态查询日志
cfw log [num]
卸载CFW
# 卸载CFW
curl https://raw.githubusercontent.com/Cyberbolt/cfw/main/uninstall.py | python3
升级CFW
CFW
版本大于等于v1.0.3
可使用cfw update
对软件进行升级
# 对cfw软件进行升级
cfw update