当前位置 主页 > 本站WEB程序 > 安全 > IIS7网站监控 >

    proxy的流量劫持详细分析,劫持的运转流程

    栏目:IIS7网站监控 时间:2020-11-27 12:34

      劫持的数据的流转动作
      对于入站的数据,被劫持之后的目的动作有两个:
      RETURN,不进行任何istio proxy的处理
      ISTIO_IN_REDIRECT,进行istio proxy的入站处理
      对于出站的数据,被劫持之后的目的动作有三个:
      RETURN,不进行任何istio proxy的处理
      ISTIO_IN_REDIRECT,进行istio proxy的入站处理
      ISTIO_REDIRECT,进行istio proxy的出站处理
      这里比较费解的是出站数据竟然有可能要进行入站处理,主要是考虑服务A的某个POD1调用自己所在的服务A的Kubernetes service IP,最后被istio proxy进行mesh之后调度到自己(POD1)的情况,这种情况下出站操作之后紧接着就应该是入站操作。
      
      servicemesh的调用和响应流程
      app1(svc1)会使用app2所在的svc2来进行调用:
      a) app1容器发出请求数据包P1(src: POD1_IP, dst: svc2, out device: eth0)
      b) P1会先经过iptables的ISTIO_OUTPUT链表,根据P1的TCP包头信息以及数据包owner是app1,所以不能匹配规则15~22,而匹配规则23进入ISTIO_REDIRECT链表
      c) P1经过ISTIO_REDIRECT链表规则6的引导进入proxy的15001出站监听端口
      d) proxy根据svc2的域名进行mesh而选中svc2的一个endpoint app2,确定其地址POD2_IP,数据包P1被修改成P2(src: POD1_IP, dst: POD2_IP, out device: eth0),该数据包进入ISTIO_OUTPUT链表
      e) 由于数据包P2输出设备是eth0,owner是proxy,所以不满足链表规则15~17,但是满足规则18,所以直接return,并且随后eth0被发送出去到app2所在的POD2
      f) 在POD2数据包P2被接收之后被修改成数据包P3(src: POD1_IP, dst: POD2_IP, in device: eth0),并进入ISTIO_INBOUND链表
      g) ISTIO_INBOUND链表内部的规则9~12都无法匹配,所以直接进入ISTIO_IN_REDIRECT链表
      h) ISTIO_IN_REDIRECT链表规则7将数据包P3引导进入proxy的15006入站监听端口
      i) proxy处理完毕之后数据包P3被修改成数据包P4(src: POD1_IP, dst: 127.0.0.1, out device: lo)并且由proxy发送出去并进入ISTIO_OUTPUT链表
      j) 由于数据包P4的owner是proxy并且输出设备是lo,所以不满足ISTIO_OUTPUT链表的规则15~21,而匹配规则22,直接return并且将数据包P4发送给业务容器app2
      app2(svc2)处理之后响应app1的流程如下:
      k) app2将响应数据包P5(src: POD2_IP, dst: POD1_IP, out device: eth0)发送出来进入ISTIO_OUTPUT链表
      l) 数据包P5的owner是app2并且出口设备是eth0,所以无法匹配ISTIO_OUTPUT链表规则15~22,可以匹配规则23,进入ISTIO_REDIRECT链表
      m) ISTIO_REDIRECT链表的规则6将数据包P5引导进入proxy的15001出站监听端口
      n) 针对响应数据包,proxy不做mesh处理,直接将数据包P5(src: POD2_IP, dst: POD1_IP, out device: eth0)发出来至ISTIO_OUTPUT链表,并将数据包owner变成proxy的uid
      o) 数据包P5会匹配ISTIO_OUTPUT链表的规则18,直接return,后续发送给app1所在的POD1
      p) POD1接收之后会进入ISTIO_INBOUND链表,此时数据包P5被修改成数据包P6(src: POD2_IP, dst: POD1_IP, in device: eth0),这个数据包P6会匹配规则13,进入ISTIO_IN_REDIRECT链表
      q) ISTIO_IN_REDIRECT链表规则7会将数据包P6引导进入proxy的15006入站监听端口
      r) 针对响应数据包,proxy不做mesh处理,会将数据包P6修改成P7(src: POD2_IP, dst: 12.0.0.1, out device: lo)并直接将数据包P7发出来至ISTIO_OUTPUT链表,并将数据包owner变成proxy的uid
      s) 根据P7数据包的特点,会匹配ISTIO_OUTPUT链表的规则22,直接return并且将数据包P7发送给业务容器app1,完成一次请求响应
      注释:
      特别的,如果svc1 = svc2,并且在步骤d)中POD1 = POD2,则数据包的出口设备会变成lo,目的地址为POD1的IP地址,则会匹配ISTIO_OUTPUT链表中的规则16/19,然后进入ISTIO_IN_REDIRECT链表