王志勇 发表于 2026年10月02日 09:15
这个程序设计实现的功能是判断用户的访问,是否为非隔开法行为、正常访问,非隔开法行为则立刻自动启动iptables,阻止继续疯狂刷新,高峰时可能高达1秒钟100次以上的刷新。攻击者会在链接添加参数,或者空链接,这都是非隔开法访问。编程的语言,使用“第三方语言+Shell命令”。第三方语言,主要是编程者熟悉的语言,可以是PHP、Node.js、Java、Python、Golang、CGI(Perl),只要是能运行于Linux系统下的任何语言。
Shell程序本来也能实现大部分的功能,虽然Shell命令无比强大,能实现很多系统级(不可思议)的功能,但用于编程的话,Shell程序的语法真的太啰嗦,如果过段时间,再次回读Shell程序的时候,会十分困难,真的有一种崩溃感。
用Shell编程的方法来实现这些功能,花费的时间,至少是第三方语言的10倍~20倍,纯粹是因为语法的简洁性、可读性。
我个人熟悉的语言是PHP,所以使用“PHP+Shell命令”的方式,本质上属于0开销,不额外占用任何资源,因为这个实例里,不需要再安装任何依赖包,只要有PHP即可,本质上就是一个普通的PHP页面。
这个程序需要嵌套到所有的PHP文件,甚至是需要用Rewrite把静态文件自动转成PHP动态文件,实现嵌套这个防护程序。实测所有的文件类型的静态文件,甚至是MP3文件,也能嵌套,嵌套后的静态非文本文件测试SHA256和SHA1的值均正常,但前提是嵌套非文本文件的PHP程序,不能有任何文本输出、不能有报错。不能预留一点被攻击的窗口。
(静态文件自动转成PHP动态文件,除了用Rewrite,也可以用.htaccess+404错误页(改成200代码),作用相同,但404错误页更省资源,因为少调用一个Rewrite模块。)
这次的程序设计,预计可能需要15~30天完成,实际操作起来,用时3天,后面再做精细的修改、功能升级和完善,又用了2天。这个防DDoS的程序,目前来说功能相对还是比较全面的,当然欠缺的是对于要求不能断线关机的服务器、例如网络游戏的服务器,暂时解决不了。
因为攻击者的很多访问来源,在访问日志里可以看到是模拟真实的访问,无论是访问页面、还是UA,都像是真实访问。但从短期内出现大量的这类访问记录,80%的可能性又像是在攻击,这类攻击是采用一个访问,使用一个IP地址,所以对这类访问进行自动封禁,会出现误伤,出现大面积的不能正常访问。
所以对于个人网站、个人博客、小型企业网站,我采用的规则是当短时间内出现超大量的这种攻击,一个访问、一个IP地址的这种,1秒钟的请求达到100次以上,进行统一自动白名单,也就是“软关机”。(这个规则的程序编写和调试、测试,实际大约用5个多小时完成。)
这个“软关机”的高危参数,是总访问量,而非个人的刷新次数, 因为每次的IP地址不同,所以只能从总访问量着手,实际的参数设定阀值,对于博客、小型网站,要远低于1秒钟100次,例如1秒钟10次,这种设定会出现误伤,所以改为2秒钟20次、3秒钟30次类似的宽限范围,能大大减少误伤,维持博客的正常访问。
3秒钟30次是属于访问量比较大的大型博客,我设定为1分钟200次这个值更加安全,因为要按照实际的日常访问量。大型网站可设定为1分钟2000次。这个阀值设定越高,当攻击出现的时候,浪费的流量就越多。阀值设定越低,越安全。
这些阀值,都设置为可修改参数,可以在线随时修改,随时改变安全级别。
否则,这种攻击能在短时间内消耗远超10Gbps以上的流量,流量的消耗完全取决于VPS、或独立主机的带宽,是30Mbps,还是100Mbps,还是1Gbps,美国主机普遍是1G带宽。
就以30Mbps的VPS为例,1秒钟的峰值上行/下行流量总和是30Mbps,1分钟就能达到1.8Gbps。但由于VPS有一定的抗压能力,或者有单位时间的峰值限制,1G流量消耗可能实际需要10分钟~15分钟左右。
出现这种攻击的时候,博主会发现自己的博客会特别卡,我就是这样发现的,已经消耗了将近1G的流量,于是手动关机。
如果不手动关机,流量会一直消耗下去。自动“软关机”,就是代替手动关机,且非常及时,一旦异常,立刻断开流量,非常灵敏。
并在程序设计里做一个日志,查看什么时候曾经“软关机”。
截图珍贵留念
这是这个程序的部分截图珍贵留念,程序完成的作品就是这样模块化的风格。在实际的程序开发中,程序书写顺序并不是像写文章一样,从前到后,而是有大量的“插播”,很多后面需要的变量、或者需要经过处理的数据,都是需要的时候,在前面插播。正是由于这种被迫的“插播”方式,使程序的开发思路,较难被完全读懂,别人这样写,我也看不懂。
这些程序将来都是完全公开的,即使源代码全部公开,一旦放置在服务器上,无法被破解、攻击,因为绝大多数的语句都是赋值、或者处理、调用,没法破解、攻击,实在是个别需要加强隐私的参数,可以添加个参数、或者稍微加密一下即可降低可读性,数据库是禁止访问、不可修改的:
VPS自动“软关机”的关键语句,防止超大规模的DDoS攻击:
本博客的博客首页源代码
本博客的博客首页源代码,在5年前公布,如前文《秒会+实战PHP程序设计(1-2):auiou.com的源代码》,我不介意公开自己的源代码。永远不能公开的是用户的隐私数据,这是超级红线。
当时公开的这个首页源代码,就是首页的全部核心程序代码,就是这么简单,现在是用PHP写的,这个博客程序是2010年重新重构,改为PHP程序,大约用了4天完成整个前后台程序,从0人工编写。
我的中文博客本来可以在2005年的时候上线,但正如现在一样,真的有很多事情压着,所以一直拖到2006年才正式上线。
我的英文博客是在2005年过年的时候上线,那时候必须做这个英文博客,当时是随机注册只要有一点含义就可以,是属于急需注册,那个博客的作用是跳板作用,内容也全部是自己的原创文章,偏技术话题为主。
为什么说是跳板作用?因为当时国内个人网站的PR值最高是4,极少数人是5。而当时的英文博客,PR值普遍都是6以上,最低都是5,有几十个PR值为7的英文博客,全球也有个位数的英文博客PR值达到8,例如simplebits,mikeindustries,总数不超过5个。
英文博客的PR值特别高,主要是因为互相的友情链接。
当时的大多数英文博客还没有启用nofollow,这些英文博客很多单篇的PR值都达到6、或者5,甚至7,这些单页PR值高的原因是按月存档的链接,只要在这些英文博客上留言,留个链接,自己的博客的PR值能轻易到达5。
后来过了几年,Wordpress、Typecho,启用了nofollow,这个快速提升PR值的方法也就失效了。
我的中文博客是由于当时的网络环境,主要原因也还是由于中文博客的PR值也特别高,所以在2005年秋天在我原有的个人主页上,做了一个博客的二级目录,这个博客其实是一个真正的博客。
但是,我在2005年秋天建的中文博客,以及2005年过年建的英文博客,这2个博客,是全静态的HTML页,那时候还没想出怎么写博客程序。
当时这种强制搭建的全静态HTML博客站,更新是非常吃力的,所有的关联页面都是手动修改、再用FTP上传,仅仅是每次写文章,而造成的手动修改,就需要额外10多分钟,一点都不夸张,这导致当时的博客非常低产,我只写了4篇博客。
不像后来,有了博客程序,博客一键发布,所有的关联页面全部自动更新,每次都能节省10多分钟。
经过了整整半年的思考,我终于想出了博客程序的设计方法,就是列表,每篇文章为一个数据库,首页提取10个数据库,就是像上述截图这样。
第一个程序其实是用ASP编写的,用了整整10天,程序从0编写完成,在2006年5月底完成。
由于ASP的语法太啰嗦,同样的程序,PHP的开发速度至少是ASP的3~5倍,PHP开发速度快,纯粹是因为语法简洁。
“软关机”功能的改进
由于开发时间急促,对于短时间内的超高频的DDos攻击,我采用“软关机”一段时间的方法,限制所有人访问。普通的非隔开法链接、高频刷新,采用部分限制。
其实可以改进,将来有时间再改吧,改成“软降速”,把原来的30M带宽,让程序自动调为1M,过一小段时间再自动调回来,至少博客、网站还能勉强访问,这些都是依赖PHP+Shell命令完成。
但是,“软降速”可能效果没那么好,博客还是不能访问,因为这仅有的1M带宽,被DDoS占着,干脆还是不如“软关机”。
功能总结
这种防止超大规模的DDoS攻击的程序,最简单的设计原理就是制作一个计数器,对于博客,如果近期的30秒内的访问次数达到100次,或者60秒内的访问次数达到200次,则自动启动iptables的白名单语句(Shell命令里的iptables),并写入sleep命令,设定为20分钟、或30分钟后自动解除白名单,实现自动“软开机”。
这个计数器由于是高频写入数据,需要用高速缓存,建立虚拟硬盘,Linux系统建立虚拟硬盘比Windows容易得多,一条Shell命令就能建立,百度关键词:Debian ramdisk
有了这个自动“软关机”的功能,能抵挡超大量的DDoS攻击,迅速自动关闭所有的流量消耗,实现“高枕”的功能,博主能安心地去睡觉、安心地随时出行、安心地K歌,是真正的“高枕”牌防护程序,是居家、旅行的必备良药,敬请观看《唐伯虎点秋香》。
抱歉,评论已关闭。
置顶的文章:
股骨头坏死的中早期修复方法
Windows流畅度300%以上体感的操作
超低价享受i7-7700的体验
家用电脑理性优化升级天梯图之2026
服务器版Linux系统的选择之2026
秒会+实战PHP程序设计培训(2)
如何快速自制CPU天梯图?
我不明白你明不明白我明白(明白不)
近期的主题:
这一次的程序设计速度和防攻思路
关于是否撤文章的问题
程序的及时作用
数码评测(76):万元的折叠屏手机
数码评测(75):DDR 3/4/5的性能测试
健康维护(3):为什么股骨头坏死中期可能能治疗?
博客近期大调整已经初步完成
本机安装PHP 8
健康维护(2):股骨头坏死有多接近?
北京之行2026
健康维护(1):为什么晚上睡觉时会肚子疼?
https利弊(5):技术上的定向安全与垄断本质
博客正在加紧调整中
十分感谢博友点评:自由勇 二十年博客的老程序员
DIY(35-3):6路×2 USB全自动电脑切换器
这次突然特别理解老罗
支架设计(1):船型开关固定
DIY(35-2):6路×2 USB全自动电脑切换器
今天起名未成功
DIY(37):我是如何坚持完成这些DIY作品的?
版权声明:本博客所有文章,均符合原创的定义,禁止转载,违者将必究;正确的方法是贴原文的标题和网址即可。
与此相关的链接
自由勇专栏
Blog存档 Archives
2025年-2026年03月(10)
2024年(13)
2023年 +