架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 9846|回复: 2

[Web] nginx根据http_user_agent防DDOS

[复制链接]
发表于 2016-12-20 10:37:01 | 显示全部楼层 |阅读模式

前端squid反向代理到nginx
nginx根据http_user_agent防DDOS
首先查看访问日志,找出可疑访问 找到http_user_agent 的特征,然后再作过滤
"Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0; MyIE 3.01)Cache-Control: no-store, must-revalidate"
if ($http_user_agent ~ must-revalidate) {
return 503;
}
#这样就返回503错误
location = / {
include proxy.conf;
if ( $http_user_agent ~* "MSIE 5.01" ) {
proxy_pass http://www.qq.com;
#access_log /usr/local/nginx/logs/k.log main;
      }
proxy_pass http://windows.abc.com;
}
#判断一下user-agent,如果是MSIE 5.01就把它丢到另外一个地方去就可以了,比如指向www.qq.com,看看能不能抗得住,哈哈
proxy_hide_header Cache-Control;
最后开回Cache-Control,访问一下页面
这下这个链接就缓存到前端squid了,应用服务器不会死机了
#########################################################
nginx中location模块的详细参数介绍
Nginx的Location可以有以下几个匹配:
1. =   严格匹配这个查询。如果找到,停止搜索。
2. ^~ 匹配路径的前缀,如果找到,停止搜索。
3. ~   为区分大小写的正则匹配   
4. ~* 为不区分大小写匹配
5.!~和!~*分别为区分大小写不匹配及不区分大小写不匹配

文件及目录匹配
* -f和!-f用来判断是否存在文件
* -d和!-d用来判断是否存在目录
* -e和!-e用来判断是否存在文件或目录
* -x和!-x用来判断文件是否可执行

一些可用的全局变量
$args
$content_length
$content_type
$document_root
$document_uri
$host
$http_user_agent
$http_cookie
$limit_rate
$request_body_file
$request_method
$remote_addr
$remote_port
$remote_user
$request_filename
$request_uri
$query_string
$scheme
$server_protocol
$server_addr
$server_name
$server_port
$uri

rewrite后面的flag可以是:
last
break
redirect
permanent

proxy_pass http://localhost:80;
proxy_set_header Host $host;
可以自动改变转发以后的域名信息




上一篇:c# 无法访问已释放的对象的解决办法
下一篇:PowerShell将多个空格变成一个空格删除多余的空格
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2016-12-20 10:37:25 | 显示全部楼层

服务器受到cc(攻击者借助代理服务器生成指向受害主机的合法请求,实现DDOS,和伪装就叫:cc(ChallengeCollapsar)。)攻击了,nginx 简单处理一下即可。

因为cc攻击者的useragent 一般是固定的,所以我们通过nginx 判断useraget进行cc攻击处理。
在nginx server 配置中添加

(1)useragent等于某个特征的(不区分大小写)
if ($http_user_agent ~* OliveHC3){
   return 403;
}
(2)useragent包含某个特征的(不区分大小写)
if ($http_user_agent ~* (*OliveHC3*)){
   return 403;
}
(3)useragent为空的特征的
if ($http_user_agent ~ ^$){
        return 403;
}


这样攻击就返回了403.
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2016-12-20 11:03:41 | 显示全部楼层

1.$remote_addr 与$http_x_forwarded_for 用以记录客户端的ip地址;
2.$remote_user :用来记录客户端用户名称;
3.$time_local : 用来记录访问时间与时区;
4.$request : 用来记录请求的url与http协议;
5.$status : 用来记录请求状态;成功是200,
6.$body_bytes_s ent :记录发送给客户端文件主体内容大小;
7.$http_referer :用来记录从那个页面链接访问过来的;
8.$http_user_agent :记录客户端浏览器的相关信息;
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2024-4-19 13:22

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表