总结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等:sudoaptinstall-ycurlipsetpython3gitnet-toolsCentOS等:sudoyuminstall-ycurlipsetpython3gitnet-tools安装系统依赖后,输入以下命令安装CFW:sudocurlhttps://raw.githubusercontent.com/Cyber??bolt/cfw/main/install.py|python3也可以下载脚本阅读一下,在执行上述命令前了解脚本的作用。安装完成后,使用source~/.bashrc激活CFW的环境变量。(或者新开一个shell环境,自动激活环境变量。)在linux终端输入systemctlstatuscfw,会显示active(running)字样,说明CFW已经成功运行,当服务器上线时会自动运行重新启动。卸载sudocurlhttps://raw.githubusercontent.com/Cyber??bolt/cfw/main/uninstall.py|python3配置配置文件在/etc/cfw/config.yaml,修改配置文件后运行systemctl重启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:10000000command中的command[]表示一个变量。运行和停止CFW:systemctlstopcfwStartCFW:systemctlstartcfwRestartCFW:systemctlrestartcfwIP黑名单管理手动屏蔽单个IPv4地址:cfwblock[ip]手动解除屏蔽单个IPv4地址:cfwunblock[ip]查看IPv4黑名单:cfwblacklist手动阻止单个IPv6地址:cfwblock6[ip]手动取消阻止单个IPv6地址:cfwunblock6[ip]查看IPv6黑名单:cfwblacklist6Linux端口操作allowIPv4port:cfwallow[port]blockIPv4port:cfwdeny[port]releaseIPv4TCPportalone:cfwallow[port]/tcp,比如cfwallow69.162.81.155/tcp到单独屏蔽IPv4TCP端口:cfwdeny[port]/tcp,如cfwdeny69.162.81.155/tcpIPv4UDP端口操作类似查看所有允许的IPv4端口:cfwstatus允许IPv6端口:cfwallow6[port]blockIPv6port:cfwdeny6[port]allowIPv6TCPportalone:cfwallow6[port]/tcp例如cfwallow669.162.81.155/tcpblockIPv6TCPportalone:cfwdeny6[port]/tcp例如,CFWdeny669.162.81.155/tcpIPv6UDP端口操作类似于查看所有允许的IPv6端口:cfwstatus6logoperationdynamicquerylogcfwlog[num]。[num]为查询日志条数,查询结果将按时间倒序排列。相关链接GitHub:https://github.com/Cyber??bolt/cfw电光笔记:https://www.cyberlight.xyz/土豆博客:https://www.liuya.love/更多如果遇到使用中的问题,请在https://github.com/Cyber??bolt/cfw/issues留言。在您的帮助下,CFW不断壮大。总结CFW可以在一定程度上防止DDoS攻击,同时控制Linux系统TCP/UDP端口的开启或关闭,帮助我们解决恶意IP入侵问题。但是不要不切实际地认为CFW可以抵御大型DDoS攻击。DDoS攻击的规模通常与成本呈正相关。如有必要,增加网络带宽以解决问题的根源。
