7
回答
请教下使用Nginx配置IP黑名单未生效的问题。
华为云实践训练营,热门技术免费实践!>>>   

最近服务器被人恶意访问,一直在调用同一个接口,我想了个办法,用shell去统计access.log里的IP访问数量,如果超过1000我就给加到黑名单列表里,然后reload一下Nginx,这样再收到这些IP的请求时候就会自动拒绝,但是我发现这样做并没有效果。

下面是配置的截图:

我通过$http_x_forwarded_for参数获取IP,然后将这些IP放在blocksip.conf中,在http块引入。

blocksip.conf文件

但是配置完reload后在access日志里还是可以看到屏蔽的IP在正常访问。

上图范围的500是我单独配置的,如果只用blocksip.conf的话 就会正常返回200.

我想 如果deny黑名单生效的话,这个IP应该不会走到server的那里就会被返回503了吧。

我测试过blocksip.conf里如果写 deny all的话 我自己也不能范文 返回的是503,所以我觉得这个文件应该是有效的,那么为什么用IP列表没有效果呢?是不是因为通过$http_x_forwarded_for获取的IP不是访问者的真实IP啊?

请教下各位 这种情况 会是什么原因呢,或者有没有其他的解决方案?

谢谢各位。

举报
玩家19
发帖于8个月前 7回/229阅

看代码是验证码的POST提交,要么是注册,要么是登录。

我建议还是在数据库或者内存保留IP POST这个链接的次数。

Nginx配置中return指令工作在REWRITE阶段,deny指令工作在ACCESS阶段,REWRITE阶段比ACCESS阶段更早执行。相应的IP访问都会返回500。

引用来自“qlee”的评论

Nginx配置中return指令工作在REWRITE阶段,deny指令工作在ACCESS阶段,REWRITE阶段比ACCESS阶段更早执行。相应的IP访问都会返回500。

是这样的,但是我如果去掉返回500的那一段,从access日志里看是正常返回200的。

 

引用来自“大洋的顶端”的评论

看代码是验证码的POST提交,要么是注册,要么是登录。

我建议还是在数据库或者内存保留IP POST这个链接的次数。

原本是有这样的设计,但是每次都会查询数据库,并发量很高,数据库承载不了,后来我改用的memchached,但是攻击者发送的手机号是随机的。

后来我改了下接口,增加了一个sign参数,虽然这样可以防止恶意触发短信,但是总被这样轮也不是个办法,应用服务器也要承载这些请求,如果哪天攻击者换了个需要查询数据库的地址,那服务器又要宕。

引用来自“大洋的顶端”的评论

看代码是验证码的POST提交,要么是注册,要么是登录。

我建议还是在数据库或者内存保留IP POST这个链接的次数。

引用来自“玩家19”的评论

原本是有这样的设计,但是每次都会查询数据库,并发量很高,数据库承载不了,后来我改用的memchached,但是攻击者发送的手机号是随机的。

后来我改了下接口,增加了一个sign参数,虽然这样可以防止恶意触发短信,但是总被这样轮也不是个办法,应用服务器也要承载这些请求,如果哪天攻击者换了个需要查询数据库的地址,那服务器又要宕。

假如是APK的话,建议SO库加密。

假如是网页,接滑动验证码平台。

引用来自“大洋的顶端”的评论

看代码是验证码的POST提交,要么是注册,要么是登录。

我建议还是在数据库或者内存保留IP POST这个链接的次数。

引用来自“玩家19”的评论

原本是有这样的设计,但是每次都会查询数据库,并发量很高,数据库承载不了,后来我改用的memchached,但是攻击者发送的手机号是随机的。

后来我改了下接口,增加了一个sign参数,虽然这样可以防止恶意触发短信,但是总被这样轮也不是个办法,应用服务器也要承载这些请求,如果哪天攻击者换了个需要查询数据库的地址,那服务器又要宕。

引用来自“大洋的顶端”的评论

假如是APK的话,建议SO库加密。

假如是网页,接滑动验证码平台。

你好,我已经加了sign校验来屏蔽恶意触发短信。

现在想要做的是屏蔽掉恶意访问的请求,比如一个IP每天请求了十几万上百万次这样。

我是在location前面配置的,blockip内容和你的一致,后面再加一条allow all;

正常来说,返回的应该是403。

顶部