最近有一个想法,是要做一个主播声音分享网站,类似于过去那种按某个按钮,就播出某句卢本伟经典语录那种的
整个网站构建倒是没什么好考虑的,唯一需要考虑到一个问题就是防止攻击,因为这种自娱自乐的需求肯定都是挂在小型服务器上,一旦受到攻击我感觉非常脆弱。
甚至也不用到 DDOS 的程度,就单纯假设说有一个坏东西,通过各种方式实现以每秒 10 次的频率请求我网站的资源,应该就会占满我小鸡的全部带宽,导致服务不可用。
所以一个想法是假设一个带有 ban 功能的服务器,比如限制单 IP 每分钟访问频次之类的。有没有 Nginx 大佬指点一下能不能做到,应该如何实现。
======
第二个问题纯粹是个人好奇,如果第一个问题的答案是可以实现的话,它是一种有状态服务还是无状态服务?(理论上应该是有状态吧),那么是否它不能支持多节点假设,那么现在那么多商业网站的多节点防护是怎么完成的呢?
(我个人假设的时候肯定是后端无状态,然后统一经过 nginx 代理之类的这种架法,应该不会多节点 nginx,所以这个问题纯粹是技术上的好奇)
1
Daylight1993 2020-10-16 01:17:30 +08:00 1
限制单 IP 每分钟访问频次,nginx 最基本的东西。你确定百度过 nginx 的相关资料吗?
|
2
masker 2020-10-16 01:59:44 +08:00 via Android 1
老伸手党了
|
3
icy37785 2020-10-16 02:03:23 +08:00 via iPhone
百度一下就有无数方案任君选择
|
4
black11black OP @Daylight1993 没搜就先问了,后来搜了一下似乎不难配置。那关于状态呢?单个 Nginx 单独维护自己的并发数吗?
|
5
msg7086 2020-10-16 06:04:48 +08:00
内部会维护访问计数。如果要长期 ban 可以用 fail2ban 去读 nginx 的 ban IP 记录,然后放在防火墙上。
|
6
594duck 2020-10-16 06:05:41 +08:00 via iPhone
你需要的是 api gw,比如 kong
|
7
Jat001 2020-10-16 06:06:46 +08:00 1
|
8
black11black OP @msg7086 有意思,这也可以,f2b 还能这么玩。所以具体实现手段是写一个第三方程序,定期同步两边的 ban 列表,还是怎么说,f2b 自带从外部同步功能吗。如果是第三方程序,加入简单,释放怎么办
|
9
black11black OP @594duck 搜了一下,apigw 我理解上应该还是一层程序,只不过单独把权鉴的部分抽出来做成服务,这样的话其实还是离不开传统做法的步骤,不知道我理解的对不对。或者说已经有人把这部分做成成熟服务了?这样增加整个系统复杂度的话不知道可用性怎么样,不知道大型商业公司用的都是什么方案
|
10
594duck 2020-10-16 07:18:10 +08:00 via iPhone 1
@black11black
你可以理解为 nginx +LUA +redis 就是最基本的 api gw 举个例子 nginx + Lua 热动态更新规则,你的跨服务器就是 Lua 规则放在 redis 里,达到多机共享。 他有什么呢。黑白名单,根据 IP 的访问频率动作,oath 等等等等 看一下 kong 的功能列表 |
11
sugars 2020-10-16 08:56:56 +08:00
Cloudflare ?
|
12
msg7086 2020-10-16 13:01:50 +08:00 via Android
@black11black f2b 读 Nginx 日志然后动态加减 ban 列表。这和 ssh 读 authlog 是一样的原理。
|
13
black11black OP @msg7086 大佬讲下 ssh 读 authlog 是啥操作,ssh 不是写 authlog 么,为什么要读
|
14
black11black OP @msg7086 而且想了一下 f2b 维护访问计数这个方案还是不是很好,因为理论上你还是希望对方被 ban 后收到的是被 ban 信息,而不是直接把封包吞了,所以应该还是 nginx 那边的方案更好。f2b 可能是比较适合做防火墙啥的,但是大规模 ddos 感觉更复杂一些,跟普通这些防爬虫和灌水机器人的不太一样,不是我能探索的领域了
|
15
msg7086 2020-10-17 04:35:30 +08:00
@black11black 我的意思是 fail2ban 的 SSH jail 会去读 auth.log 。
同理 fail2ban 的 Nginx jail 可以去读 Nginx 的 access log 。 fail2ban 就是拿来当防火墙用的,主要是应对攻击。我这边的话还要稍微封一下不太合适的爬虫。 |