场景

  1. 过滤非正常用户使用的http请求。
  2. 限制正常用户使用的范围(下载速度、访问频率等)。
  3. 通过架构规划来提升安全。
  4. 能自动解决http请求问题。

解决方案

代理自身的安全

  1. 千万不要使用root启动!!!
  2. 关闭服务器的信息。server_tokens off;
  3. 关闭掉不使用的模块。

过滤http

把所有非法的http请求直接拒绝。因为非法的请求往往就是在攻击服务器。

过滤非法的http method

# 只允许 get,post,head方式的请求,其他的不安全也没有用到,不接受
if ($request_method !~ ^(GET|HEAD|POST)$) {
return 404;
}

过滤非法用户代理

# 非法代理直接拒绝
# 有一些是爬虫工具,有一些是搜索外国的搜索引擎,有一些是压力工具
if ( $http_user_agent ~* "ApacheBench|WebBench|HttpClient|Curl|Wget|^$|AhrefsBot|BLEXBot|^-$|WordPress" ) {
return 444;
}

控制http请求后缀

有一些攻击都是扫描类似.base_history等。所以除了合法的请求,其他的都拒绝。使用的是白名单的思维方式

# 只接受这些后缀
location ~ (\.(json|html|jsp)|/)${
...
}

控制文件上传

上传的文件只有读的权限,没有执行的权限。访问webshell的产生。

控制使用

虽然请求是正常的,但是要控制使用服务的资源。

下载限速

针对于静态资源,特别是大文件,需要限速。

server {
server_name xxx.xxx.xxx;
#控制下载流量
limit_rate 100k;
}

控制访问的url的频率和频次

在关键业务的地方,需要做更细粒度的控制。

比如说一个ip一天只能免费访问一百次,超过了就禁止访问。

具体的实现思路:通过lua,redis更精准的控制访问粒度。

构架规划

通过构架的规划去增加安全也是很有必要的。

动静分离

把提供静态资源和动态资源独立部署。

更严格的控制动态资源的请求类型。

更严格的控制静态资源的权限。

也解决一定的安全问题。

静态化

把一旦生成不会变化的动态请求资源,变成静态的文件。这样就可以预防很多的安全问题。

具体的实现思路:通过nginx去实现静态化。

自动解决http请求问题

主要是为了预防ddos和cc。可以自动通过机制去处理。

主要通过定时分析访问日志,根据不同的危险等级做不同的处理。难点在于危险等级和危险阀值的设定。

比如:

  1. 低危的限制一段时间即可以继续使用。通过控制使用里的控制访问的url的频率和频次即可。
  2. 中危的通过nginx直接返回403。可以通过nginx的deny,geo来实现。
  3. 高危的通过防火墙直接拒绝服务。结合防火墙来实现。

验证方法

  1. postman。可以模拟各种http请求

web安全——代理(nginx)的更多相关文章

  1. web性能优化——代理(nginx)

    简介 一个很好的原则是调优时每次只个性一个配置.如果对配置的个性不能提高性能的话,改回默认值 优化必须要通过性能测试.不能意淫,需要前后对比,真实说明问题. 场景 优化nginx. 确保每次请求控制一 ...

  2. [C#]使用 C# 代码实现拓扑排序 dotNet Core WEB程序使用 Nginx反向代理 C#里面获得应用程序的当前路径 关于Nginx设置端口号,在Asp.net 获取不到的,解决办法 .Net程序员 初学Ubuntu ,配置Nignix 夜深了,写了个JQuery的省市区三级级联效果

    [C#]使用 C# 代码实现拓扑排序   目录 0.参考资料 1.介绍 2.原理 3.实现 4.深度优先搜索实现 回到顶部 0.参考资料 尊重他人的劳动成果,贴上参考的资料地址,本文仅作学习记录之用. ...

  3. nginx反向代理nginx,RealServer日志打印真实ip

    title: nginx反向代理nginx,RealServer日志打印真实ip date: 2016-05-11 19:15:37 tags: --- nginx反向代理nginx,RealServ ...

  4. nginx入门与实战 安装 启动 配置nginx Nginx状态信息(status)配置 正向代理 反向代理 nginx语法之location详解

    nginx入门与实战 网站服务 想必我们大多数人都是通过访问网站而开始接触互联网的吧.我们平时访问的网站服务 就是 Web 网络服务,一般是指允许用户通过浏览器访问到互联网中各种资源的服务. Web ...

  5. Web服务器之Nginx详解(操作部分)

    大纲 一.前言 二.Nginx 安装与配置 三.Nginx 配置文件详解 四.Nginx 命令参数 五.配置Nginx提供Web服务 六.配置Nginx的虚拟主机 七.配置Nginx的用户认证 八.配 ...

  6. Linux系统WEB服务之Nginx基础入门

    一.Nginxi简介 Nginx是什么?它是一个开源.高性能的WEB服务器软件和代理服务器软件,由俄罗斯人Igor Sysoev 开发实现.它的功能主要分三类,第一是它作为一个WEB服务软件使用:第二 ...

  7. web中间件之nginx

    web中间件之nginx https://www.jianshu.com/p/d8bd75c0fb1b   对nginx正向代理和反向代理理解特别好的一篇文章. 一.nginx nginx缺点,负载均 ...

  8. 跨平台web调试代理工具---whistle

    whistle是基于Node实现的跨平台web调试代理工具,支持windows.mac.linux等所有安装了Node的操作系统,可以部署在本地机器.虚拟机或远程服务器,并通过本地网页查看或修改HTT ...

  9. Hadoop-2.2.0中国文献—— Web应用代理

    Web应用代理是YARN的一部分. 默认地,它会作为 Resource Manager(RM)的一部分来执行, 可是也能够配置成独立执行的模式.使用代理的原因就是减少通过YARN的web攻击的可能性. ...

  10. 与http协作的web服务器--代理、网关、隧道

    一台服务器可以搭建多个web站点 代理: 接受客户端发送的请求,转发给其他服务器,然后接受服务器的返回结果(响应)再返回给客户端.每次经过代理服务器,就会追加写入via首部信息. 按两种基准分类.一种 ...

随机推荐

  1. 走进云背后:微软Azure web 项目通过web service部署web site

    探索云那不为人知的故事(一):Web Services部署web site 前奏:Windows Azure是微软基于云计算的操作系统,现在更名为“Microsoft Azure”,和Azure Se ...

  2. C语言 时间函数的学习和总结

    一直都是以简单的time_t t,time(&t),ctime(&t)来表示时间,后来要以时间为日志文件的名字时,就有点蒙逼了.学习一下.   tm结构: struct tm {   ...

  3. android oncreate获取宽高度

    gridView = (GridView) getView().findViewById(R.id.gridView_musicbook); gridView.getViewTreeObserver( ...

  4. C语言怎么将用户账号密码写入文件实现登录注册功能?

    创建储存用户账号密码的文件: void Create_File() { FILE *fp; if ((fp = fopen("users.txt","rb")) ...

  5. Linux 下从头再走 GTK+-3.0 (四)

    实际的应用中,往往有很多个控件, 同样GTK提供了很多种布局方案,Box, Fixed , Table , Grid 等. 接下来试试网格布局 Grid. 我们创建 example4.c ,内容如下: ...

  6. php中的curl使用入门教程和常见用法实例

    摘要: [目录] php中的curl使用入门教程和常见用法实例 一.curl的优势 二.curl的简单使用步骤 三.错误处理 四.获取curl请求的具体信息 五.使用curl发送post请求 六.文件 ...

  7. MMORPG大型游戏设计与开发(客户端架构 part2 of vegine)

    一个好的接口是尽可能让更多实用的方法进行整理封装,要记住的是不常用的方法和类最好不好封装到接口中,因为那样会造成本身的困惑.基础模块中并没有太多封装,甚至连一个类的封装也没有,而是一些很常用的工具方法 ...

  8. 将域名从GODADDY转移到namesilo

    1.首先登陆Godaddy的网站http://www.godaddy.com,登陆到后台控制面板,选择要转移的域名 如图所示,进入域名控制面板 2.对域名进行解锁,如果不进行解锁的话,域名是无法进行转 ...

  9. GTAC 2015 Schedule

    之前发的GTAC 2015将于11月10号和11号召开 现在时刻表也出来啦 https://developers.google.com/google-test-automation-conferenc ...

  10. java分层开发

    既然是分层开发,首先我们需要知道的是分为那几个层,并且是干什么的? 1.实体层(entity) 对应数据库中的一张表,有了它可以降低耦合性,同时也是数据的载体. 2.数据访问对象(data acces ...