关于负载均衡:黑客如何用nginx攻击一个网站

15次阅读

共计 3462 个字符,预计需要花费 9 分钟才能阅读完成。

最好的进攻形式就是攻打 知己知彼,百战不殆。把握攻击者的套路才好顶得住攻打。

可能我的读者多少理解过Nginx,我先给不理解的同学简略说一下原理。曾经理解的跳到第二节。

3 分钟理解Nginx

Nginx是一款高性能的 Web 服务器和反向代理服务器。

它能够用来搭建网站、做应用服务器,可能解决大量的并发连贯和申请。

  • 动态内容托管(次要):能够用来做网页、图片、文件的 “动态”内容托管。
  • 动静内容托管(次要):将常常拜访的动静内容缓存到内存中,进步访问速度和性能。
  • 反向代理(次要):将客户端的申请发送到后端实在服务器,并将后端服务器的响应返回给客户端。

相似于一个快递收发室,指挥快递(流量)应该投递到哪个买家。

它还能提供一些高级性能:

  • 负载平衡:将客户端的申请散发到多个后端服务器上,从而进步服务的可用性和性能。
  • SSL/TLS 加密传输:通过加密和认证爱护数据传输平安。
  • HTTP/ 2 反对:通过多路复用技术进步并发连贯解决能力和页面加载速度。
  • 平安防护:提供多种防护机制,如限度 IP 拜访、申请频率限度、反爬虫等。
  • 动静内容解决:反对 FastCGI、uWSGI 等协定,与后端应用服务器进行动静内容交互。
  • 日志记录:记录拜访日志和谬误日志,不便监控和排查问题。
  • 自定义模块开发:反对自定义模块开发,能够依据需要进行二次开发和扩大。

读到这里,我晓得很多人脑子都要爆了。当初让咱们直入主题。联合以上性能的能做哪些攻击方式。

反向代理攻打

应用 Nginx 作为反向代理服务器,将攻打流量转发到指标服务器。这样就能暗藏攻打流量的实在地址。

server {
    listen 80;
    server_name www.example.com;
    location / {
        proxy_pass http://backend_server;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}
  • 所有拜访 www.example.com:80 的流量全副都会转发到 http://backend_server 服务器上。
  • proxy_set_header X-Real-IP $remote_addr; 设置申请头提供实在起源ip
  • proxy_set_header Host $host;设置拜访的Host

只有把 X-Real-IP 改成其余不存在的 IP,就能够暗藏本人的实在 IP 地址,让攻打更难以被追踪和进攻。当然绝对于客户端来说,只能晓得nginx 的地址就不晓得实在服务器的地址了。

DDoS 攻打

DDoS攻打就是借助某些工具霎时动员大量的申请,让服务器资源耗尽,无奈失常响应其余用户的申请,个别也罕用于压力测试。介绍一些罕用的工具:

  • ApacheBench (ab):罕用的命令行工具,用于模仿多个并发申请。能够管制申请总数、并发数等参数。
  • Siege:命令行工具,和下面一样,并且还反对 HTTPHTTPS 协定。
  • JMeter:一个功能强大的 Java 应用程序,能够用于模仿各种负载状况。JMeter 能够通过图形界面进行配置,反对更多协定和数据格式,包含 HTTP、HTTPS、SOAP、REST 等。

但事实往往比这个残暴,攻击者会做一些病毒,在网络上流传开来,病毒运行时能够间接疯狂拜访服务器,或者利用 Nginx 提供的反向代理和其反对的比方socketSSL,一直的建设握手申请。

限流、黑名单进攻

小熊次要给大家介绍怎么进攻。这种病毒感染形式就不说了,我胆怯戴银手铐。

http {
    limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s;

    geo $block {
        default 0;
        include /path/to/block_ip.txt;
    }

    server {
        listen 80;

        location / {
            limit_req zone=one burst=10 nodelay;
            if ($block) {return 403;}
            proxy_pass http://backend;
        }
    }
}
  • limit_req_zone 定义了一个名为“one”的限度申请速率的区域,该区域的大小为 10MB,申请速率限度为每秒 5 个申请。
  • limit_req 指定应用名为“one”的限度规定。
  • geo $block是黑名单,这个文件能够写须要屏蔽的ip
  • server块中的 location 指令应用了 limit_reqif示意黑名单的返回 403 状态码。

负载平衡进攻

假如我有两个后端服务器。

http {
  upstream backend {
    # 轮询形式的负载平衡
    server backend1.example.com;
    server backend2.example.com;
  }
...
  server{...}
}

有多种负载平衡形式。

 server {
   ...
    location /api/ {
      # 轮训
      proxy_pass http://backend;
    }

    location /lb/ {
      # IP 哈希形式的负载平衡
      ip_hash;
      proxy_pass http://backend;
    }

    location /upstream/ {
      # 依据服务器性能或响应工夫进行加权轮询
      upstream backend {
        server backend1.example.com weight=2;
        server backend2.example.com;
      }
      # 对 backend 进行拜访
      proxy_pass http://backend;
    }

    location /least_conn/ {
      # 起码连接数的负载平衡
      least_conn;
      proxy_pass http://backend;
    }

    location /random/ {
      # 随机形式的负载平衡
      random;
      proxy_pass http://backend;
    }

    location /sticky/ {
      # 基于客户端 IP 的哈希形式的负载平衡
      hash $remote_addr consistent;
      server backend1.example.com;
      server backend2.example.com;
    }
  }

很多人学 nginx 都会对 ip_hash 和基于客户端 IP 的哈希形式的负载平衡有纳闷。分不清,我一句话给大家讲清楚。

  • ip_hash能保障雷同起源肯定能拜访雷同的服务器,实用于登录等有状态的场景。在申请量少的时候,容易呈现很多 ip 落在同一服务器上,散布不平衡。
  • 基于客户端 ip 的 hash,是依据客户端 IP 地址计算哈希值,而后将哈希值与后端服务器数量取模。使申请平均分配到不同的服务器上,也能保障同一 ip 申请落到同一服务器上。然而能够保障各个服务器比拟平衡。

我认为应用形式二更好,可能了解无限,欢送各位读者分享本人的认识!

网络钓鱼攻打

黑客能够应用 Nginx 伪装成一个非法的网站,诱骗用户输出敏感信息。例如,他们能够应用 Nginx 结构一个伪造的登录页面,让用户输出用户名和明码,而后将这些信息发送给黑客服务器。

其实就是动态托管 + 反向代理性能的组合。

server {
    listen       80;
    server_name  example.com;

    # 动态网站托管
    location / {
        root   /var/www/mywebsite/dist;
        index  index.html index.htm;
    }

    # API 代理转发
    location /api {
        proxy_pass  http://localhost:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}
  • 拜访根目录就拜访到动态的网站资源。
  • 拜访 /api 路由转发到 api 服务上。

我的博客就用了这种形式,同样的我写了很多了不同的 server{} 块,来监听不同的域名,这样我能够把多个网站全副部署在同一台机器上,极限利用服务器资源。

最初

这两天在写一个小程序,打算做成程序员资源、求助、内推、课程、学习路线图之类的综合类小程序,所以更新有点慢了,见谅见谅。

对于明天所述的文章,真正有不良存心的人,总是会有更 sao 的攻打办法。我也不敢说得太多,而且这些攻打的行为都是守法的,倡议大家学会当前手下留情。

明天的目标实际上是教大家学会 nginx 的罕用配置办法,用心良苦,莫辜负点个赞再走。

一起提高

你好,我是小熊,是一个爱技术然而更爱钱的程序员。上进且佛系自律的人。喜爱发小机密 / 臭屁又爱夸耀。

奋斗的大学,激情的当初。赚了钱买了房,写了书出了名。当过面试官,带过师傅搬过转。

大厂外来务工人员。是我,我是小熊,是不一样的烟火欢送围观。

我的博客 机智的程序员小熊 欢送珍藏

正文完
 0