场景

  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. 电话薄设计--java

    package com.hanqi.telbook; import java.util.Scanner; public class Menu { //主菜单 public void mainMenu( ...

  2. 随便选择两个城市作为预选旅游目标。实现两个独立的线程分别显示10次城市名,每次显示后休眠一段随机时间(1000ms以内),哪个先显示完毕,就决定去哪个城市。分别用Runnable接口和Thread类实现。

    public class Testlvyou extends Thread{ @Override public void run() { test(); } private void test() { ...

  3. jQuery简单入门(三)

    3.事件和动画 A. 事件 Aa. DOM加载 1.为什么使用jQuery加载DOM方法? 以javascript的window.onload()方法加载DOM的先决条件是:必须等待被请求页面的资源全 ...

  4. sql server 常见错误代码15000 - 15999含义解析

    错误 15000 - 15999 SQL Server 2008 R2 其他版本 错误 严重性 是否记录事件 说明(消息正文) 15001 16 否 对象 '%ls' 不存在或不是此操作的有效对象. ...

  5. Java虚拟机 - 内存模型

    本文主要介绍Java虚拟机的内存分布以及对象的创建过程. 一.Java虚拟机的内存分布 文章开始前读者需要了解Java虚拟机的运行时数据区是怎样划分的.如下图所示: 1.程序计数器(Program C ...

  6. MYSQL 5.7 添加新用户

    错误描述: 添加用户 insert into mysql.user(Host,User,Password) values("localhost","test", ...

  7. mac 启动apache服务

    启动服务:sudo /usr/sbin/apachectl start 停止服务:sudo /usr/sbin/apachectl stop 重启服务:sudo /usr/sbin/apachectl ...

  8. high三个晚上这样好么-JSON&PHP

    hi 昨晚上吃火锅去了,对,你没猜错,我就是在成都 今晚有师兄请客,明天有基友请吃火锅,本来该忙忙哒的这一周要连续high三个晚上么(单身研究生狗就是这么容易满足).所以只好不务正业写写写了(写不动了 ...

  9. Appium学习实践(二)Python简单脚本以及元素的属性设置

    1.简单的Python脚本 Appium中的设置与Appium学习实践(一)简易运行Appium中的一致 Launch后,执行脚本 #coding:utf-8 import unittest impo ...

  10. JAVA面向对象之一

    一.面向过程的思想和面向对象的思想 面向对象和面向过程的思想有着本质上的区别, 作为面向对象的思维来说,当你拿到一个问题时,你分析这个问题不再是第一步先做什么,第二步再做什么,这是面向过程的思维,你应 ...