前言
各位音频应用的朋友们,我是2021-3-4加入咱们论坛的。虽然时间不长,总在线时长也才20多个小时,但是还是十分佩服与喜欢这样的圈子。现在的流量基本被微博、抖音等平台圈住了,论坛、个人博客相对式微,也不像10~16年左右的黄金时期了,可是我还是热爱着论坛这样的圈子。我14年第一次真正意义上的加入一个论坛,就是52pojie。当时除了最喜欢去的精品/原创软件区,就属音乐版块了,在音乐版块认识了有才华的时光版主、凝妹子等小伙伴。可惜后来版块关闭了,52选择了关闭这个版块分担一部分压力。然后我又私信原来在音乐版块比较活跃的那些人,问他们还在哪里发歌,得到清风音乐论坛的回复,我又去清风注册了帐号。好景不长,老清风由于一些因素,在一次意外,数据库丢失了还是怎么样,好多用户的帐号没了,上的人也少了。清风转入微信群了,同时运营公众号去了,网站随后也关了。
这几年经常玩VPS,以及看各种教程,也学会了怎么搭建网站程序和一些运维知识。18年的时候建了自己的
个人博客,在去年年底,我用phpbb建了个
论坛,也邀请了一些以前在52的朋友和自己的同学加入进来,总体来说对服务器的运维也有一点点心得,希望下面的分享能给坛子里的管理们一点帮助。
最近论坛发生了什么?
在早几天论坛无法访问,我想打开网站,出现超时,然后我用ping.pe和ping.chinaz.com等在线工具对论坛ping,发现都是链路超时。为了再次确认,我在本地又用tcpping测试了下,也是无法连通,由此可以推测论坛应该是被DD了,然后被服务器供应商拉进黑洞了。
前天还是什么时候,打开论坛比较卡,有时候会出现500错误,上面写着max_connection什么的东西,应该是超出最大连接数了,由此可以推测论坛应该是被CC了
DD是指ddos,即打网站服务器,一般作用在OSI的L3/L4这两层,一般可以通过UDP等暴力发包方式在短时间内大量消耗目标服务器及其周围的基础设施的网络资源,从而破坏正常的网络服务
CC一般指打网站,作用在OSI的L7层,即应用层。CC可以通过找到网站比较消耗服务器资源的界面,短时间内对其发送大量请求,使目标服务器资源耗尽,从而返回503等错误
论坛的一些不足之处
1. 服务器的选择上
最开始我用在线工具ping论坛的时候,发现论坛的服务器在马来西亚?,然后我查了查这个供应商,推测论坛的管理们为了让大家能够流畅的访问论坛,用的应该是CN2 GIA服务器,但是服务器供应商应该没提供ddos的清洗服务,所以被攻击就拉入黑洞了,这和国内的很多大厂一样。我原来用阿里云的学生机搭建了个求生之路的服务端,忘记隐藏了,直接散播到公网,我从食堂吃完饭回来就收到阿里云短信,服务器被拉入黑洞,解封要24小时。。。
但是国内大厂的高防服务贵啊,而且放国内要备案,很麻烦且缺乏自由度。
站长应该在早几天换了服务器或者加了CDN,我用前面提到的ping工具看到有显示华为云香港等地区,都是离大陆教近的地方,我这里提一句,延迟不代表一切
我曾经用过阿里云的轻量香港,ping基本都在50以下,但是到了晚上丢包75%,打开网站加载很慢,主要是响应要好久
坛子里经常玩服务器的老哥们应该经常会看到vps线路相关的讨论,时不时看到某某vps又绕路了等等。现实情况是运营商不会因为你与某地的物理距离近,就给你就近直连过去。比如,早段时间Azure香港被大量攻击,AZ调整路由,将中国过去的线路调整为绕美,去美国清洗。又比如,我这电信白天直连aws新加坡,下午或晚上就走日本NTT过去了
我用浏览器开发者控制台看了看,感觉音频应用的论坛程序本身就很轻量,感觉对延迟不会非常的敏感,可以考虑美国和欧洲的服务器
美国和欧洲的服务器相对香港、日本等地会便宜很多,而且给的带宽和配置会更给力,因为他们那成本低一些。
我看好多站长搭建Mastodon联邦实例,会用到欧洲的服务器,通常是HZ或者OVH的独服
Hostloc网站是用美国的Cera独服,电信CN2-GIA, 不过独服不便宜,官网最便宜的要150刀每月左右
52的爱盘放在欧洲的OVH存储服务器上,然后用国内CDN缓存
基本上Cera、OVH都是抗D的大厂,提供免费的清洗服务
比如最近几个月大火的斯巴达主机(SpartanHost),回程接的是Cera的Peer, 服务器自带提供20Gb/s的ddos防御
光有防御还不能成为众多国内站长选择的原因,往往还会考虑服务器的线路,以及如何改善国内用户的使用体验
基本回程走电信CN2 GIA、联通AS9929等线路的是比较受欢迎的
总之我给站长的意见就是,服务器选择带防御的(尽量欧洲或美国),然后应用层L7,在nginx上配置WAF, 我后面会说
2. 服务器版本
我怀疑目前网站的服务器版本比较低,还在不在LTS维护期不得而知,而且nginx版本是1.10.2,nginx目前官方的稳定版是1.18.0, 主线版本1.19.9
所以服务器的bug会不会及时修复呢?
3. 没有上SSL
有了h2后,https对网站的访问速度影响不大,而且谷歌开发的http3,也已经提上日程了,部分站点已经支持了。
我看论坛公告有写,近来很多人帐号被盗,都没有可靠的加密层保护数据如何保证论坛用户的隐私以及帐号安全呢?
假设某用户暴露在不安全的网络环境,攻击者分析用户的网络流量,因为http是明文传输,搞不好直接就可以获取到用户帐号密码了
www.audiobar.cn还没上https,我看audiobar.cn貌似已经装了SSL证书了,不过这里要提醒一下,最近openssl爆出了CVE漏洞,如果没有使用openssl 1.1.1k及其以上版本
说人话:不升级 openssl 到 1.1.1-k,默认配置下使用 openssl 的软件(包括 nginx ),恶意构造的请求可以轻松让服务端崩溃。
摘自: Epics of Anti-Censorship
这里又回到了第二点,nginx版本,建议赶紧升级一下或者手动编译最新版本,在服务器终端输入nginx -V,得有这样字样`built with OpenSSL 1.1.1k` 才算安全
4. 关闭不必要的端口
用
https://fofa.so/检测论坛的时候发现
3306、3389等端口是开放的
,一般我们建博客数据库都放在服务器本地的,也不会开放外网访问的,不然可能有爆破和“脱裤”的风险,我查了一下3389 是Remote Desktop,所以咱论坛不会用的是windows服务器吧~(再结合第2点,我有点小担忧)
对攻击防御的一点经验
我主要讲一下我是怎么防ddos和cc的
1. 防ddos
这个得靠服务器供应商,至少不能因为你服务器被打就屏蔽服务器的入口/出口流量。我还在读书,也没什么钱,所以我也买不起上面提及的Cera、HZ、OVH等的独服
我给自己的论坛用的是德国一家口碑还不错的商家-Contabo, 一个月7美元,配置是4 vCores, 8 GB RAM & 200 GB SSD款,unixbench单核跑分800, 算是还行
提供免费的ddos,服务器被D会发邮件给你,我论坛3月37被D过一次
毕竟价钱在这里,被D后,商家会屏蔽大陆访问,得开代**理才打得开,我讲CC之后会用一个配合的方案解决此问题
2.防CC
防CC这也算是最麻烦的,套一般的CDN用处不会很大,假设没有在CDN那一端点拦截的话。
早几个月,腾讯QQ微信因为被看雪论坛大佬逆向发现其会扫描你的AppData下的文件,chrome等浏览器的历史记录也在里面
进一步分析你会发现
腾讯收集的这么多网址都去哪里了呢?原来是用MD5把关键词的内容哈希之后,结合长度做匹配,然后把用户的浏览记录报上去。
当天,看雪论坛就被CC把网站C挂了。有一些网站程序,比如phpbb,(由于设计的原因,得显示实时消息,不会缓存),你访问首页都会查询数据库,这样哪怕你上CDN,由于是动态请求并发GET就可以将你服务器C挂,直接返回503。哪怕上面那样不行,用POST请求即可,只要CDN端不拦截,都会回源,然后还是相当于打在了源服务器上。
有的人可能会问?nginx不是号称百万并发吗?你如果用apache的ab或者wrk或者https://loader.io/这个在线工具来给自己网站(如论坛)测测压什么的,你观察进程,会发现高占用的是数据库查询或者php-fpm, 而nginx worker占用并不高或相对不高
所以防CC一个是源站服务器性能要好,一般指CPU,另一个得在web服务器如nginx上做waf,比如对超出某个请求上线的ip屏蔽一定时间(返回403或503等),拉黑后继续cc你,这时才是nginx百万并发上场的时候
以前也用过nginx的limit_conn和limit_req等命令,但是不是特别好用,由于技术不行,我不知道如何实现自动拉黑ip, 好在前天逛github发现了一个模块,ngx_waf,有自动拉黑cc ip的功能,使用十分的简单且对我这种没啥技术的站长很友好。 至于CC阈值的设定,站长可以用浏览器开发者工具,测试得到1分钟内,访客需要的请求数的一个合理的数值(我推测音频应用论坛请求数200左右足够)
综合方案
1. 源站服务器带防御+源站waf
如果不想用CDN的话,可以考虑这样的方案
2. 源站服务器带防御+源站waf+普通CDN
如果CDN没有攻击识别功能,那上不上可能对防御影响不大,可能就是提升点访问速度吧
3. 源站服务器带防御+源站waf+高级CDN
52pojie背靠360, 用的是360家的CDN,有waf, 自动识别各种攻击,如果在不知道源站ip的情况,很难打死,除非360顶不住
假设知道了源站ip, 这个时候攻击可能就变成了源站服务器抗D的清洗能力,以及源站的性能能否抵挡住CC了
还有一点,有些论坛备案了的,服务器在国内,我看到好像有个冒牌的音频应用论坛叫audioapp,由于你懂的“墙墙”,海外链路到国内会受影响没那么畅通,此外一般黑产大多用的也是国外的肉鸡来搞事的,国内管得相对严,因此服务器在国内的论坛抗海外的流量攻击“天生”就有优势。
结合我自己论坛的情况说说我用的是什么-源站服务器带防御+源站waf+cloudflare CDN
cloudflare是全球CDN TOP1供应商,也只有这样的大哥才能提供的起免费好用的CDN套餐,算是业界良心,经常玩服务器的兄弟应该知道,假设用户不是面向国内,那真是比较完美的CDN产品。cloudflare提供各种防火墙,网页优化,5s盾,验证码等服务,而且免费套餐也可以用(适合我这种学生党~),海外速度非常的快。
像国内比较知名的站点v2ex.com完全就是用的这个CDN服务。
由于cloudflare与各IDC基本都有合作,基本会有一个ip评分表,即给ip打分,然后根据你在后台设置的security level,是否进行js challenge或验证码challenge。
所以黑产的ip可能一访问你的网站就被CDN先给挡住了, 自然对源站不会有啥影响,在不知道源站ip的情况下更不可能dd了,cloudflare是不可能d死的...
假设你发现源站好卡,看服务器进程发现应该是被人CC了,这个时候你可以手动开启cloudflare 5s盾(i'm under attack),所有通过cloudflare访问你网站的用户都得等5s钟,评分差的用户可能还需要输入验证码。当然也可以写一个脚步,定时检测服务器负载,当超过某一个值时,通过cloudflare api自动开启5s盾
有人说5s盾也可以破,确实,对于这种情况,建议在cloudflare后台设置一个防火墙规则,非中国用户访问一律需要验证码,当网站被攻击时开启这个规则即可。
当然cloudflare CDN在中国大陆访问因地区差异,不是所有地区都能得到较好的使用体验,因此我也只是在被攻击的时候才点亮cloudflare的云朵(国内用户也可以访问了,解决了上面抗d时,服务器供应商清洗屏蔽中国的问题)。
或者通过cloudflare partner以cname的方式接入,然后在alidns或dnspod配置海外DNS解析走cloudflare,国内直连源站
由于我资金有限,选的德国服务器国内用户晚Shang-访问可能速度不理想,我是这样解决的
因为访问速度主要看回程
一些服务商提供GRE TUNNEL服务,我使用了Olink的德国GRE TUNNEL,国内用户访问论坛时回程走的是联通AS9929,速度比较快。
因此如果站长因为预算问题将服务器选在欧洲或者美国且不是什么特殊线路,可以考虑上这样实惠的GRE TUNNEL
我的套餐是一个月1.6美元,100G的GRE隧道流量,国内用户访问才走隧道,海外用户直接通过源站回程,这样算是一个比较好的折中方案了~
预算充足的话直接上有特殊线路加成的服务器即可,不用像我这样麻烦
有人可能会问你这样做不是暴露源站ip了吗?以及有没有可能服务器端waf的cc检测把cloudflare ip屏蔽了?
服务器端正确配置后
比如坏人A的ip是173.82.xxx.xxx, 那个ip做坏事,cloudflare的回源ip是 1.1.1.1
有一个好人B的ip是119.29.xxx.xxx,cloudflare的回源ip也是 1.1.1.1
那么A会返回503,而B则是正常的2xx或3xx响应
就算暴露了源站ip, 你要知道cloudflare很大度的将它的全部ip告诉了你
https://www.cloudflare.com/ips/
假设情景如下
极端情况下,攻击者拿了很多肉鸡去cc你,服务器端waf拉黑的速度赶不上攻击的速度,网站还是挂了,这时cloudflare ip地址就派上用场了
我要把非cloudflare ip的访问全部ban掉,即直接返回403,这个时候继续CC你,就是nginx那号称"百万并发"大展身手的时候了
我测试过是有效的,非cloudflare ip直接请求你的网站会返回403,而正常用户通过的是cloudflare访问所以不受影响
即:
clients - > cloudflare -> 音频应用 (okay)
attackers |=> cloudflare
attackers -> 音频应用(403 forbidden)
希望我上面分享的内容能给论坛的管理们一些帮助,本人才疏学浅,有不足的地方是肯定的,希望大家多多指正
希望音频应用能越来越好!
本帖最后由 BobMaster 于 21-4-2 12:40 编辑