• 零信任SPA工作流程 已完成未发布


    1. fwknop工作流程

    本质的流程就是客户端发送认证数据包,服务端收到后进行校验,合法就打开端口,否则不进行处理。下面使用场景中会对工作量流程进行进一步的解释,有关工作原理及源码分析则在后续的博客中进行介绍。

    2. fwknop不同场景的处理流程

    2.1 非NAT场景

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m5H59nRs-1634461598082)(/附件/03.%20images/direct_connect.png)]

    1. 客户端执行 fwknop -n 192.168.3.4 -a 192.168.3.3 进行敲门
    2. 服务端收到后对数据进行解密处理比对,数据无误之后打开受保护的端口(默认打开30s)

    1.2 NAT场景

    以下图片来自官网:
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QKP9H4he-1634461598084)(/附件/03.%20images/fwknop_tutorial_network_diagram.png)]

    问题:由于spaclient和受保护的服务都在各自的内网,客户端执行 fwknop -n 10.1.2.10 -a 192.168.10.123,spaserver 是无法收到数据包的
    解决:此时就要用到fwknop提供的NAT功能了,具体如下

    1. spaserver的 /etc/fwknop/fwknop.conf 文件中的 ENABLE_IPT_FORWARDING 要设置为 Y
    2. spaclient执行命令为 fwknop -n 2.2.2.2 -a 1.1.1.1 -N 10.1.2.10:22

    解释说明

    1. 之所以写 -a 1.1.1.1 是因为spaclient出公网时src_ip会变成 1.1.1.1
    2. -n 2.2.2.2 则是spaserver的地址
    3. -N 10.1.2.10:22 则表示spaserver需要将 1.1.1.1 过来的流量转发到 10.1.2.10:22

    3. fwknop基本使用

    以Ubuntu环境为例,分别在两个不同的虚拟机里下载fwknop-server和fwknop-client,下载命令如下:

    1. sudo apt-get install fwknop-server
    2. sudo apt-get install fwknop-client
    3. spaserver端要开启某个端口的监听,比如22端口

    3.1 配置

    1. 修改spaserver的 /etc/fwknop/fwknopd.conf 中的 PCAP_INTF 项,将其指定为网卡名称
    2. fwknop -A tcp/22 -a 1.1.1.1 -D spaserver.domain.com --key-gen --use-hmac --save-rc-stanza 客户端执行此命令,会在 .fwknoprc文件中生成如下内容:
      [spaserver.domain.com]
       ACCESS                      tcp/22
       ALLOW_IP                    1.1.1.1
       SPA_SERVER                  spaserver.domain.com
       KEY_BASE64                  Sz80RjpXOlhH2olGuKBUamHKcqyMBsS9BTgLaMugUsg=
       HMAC_KEY_BASE64             c0TOaMJ2aVPdYTh4Aa25Dwxni7PrLo2zLAtBoVwSepkvH6nLcW45Cjb9zaEC2SQd03kaaV+Ckx3FhCh5ohNM5Q==
       USE_HMAC                    Y
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
    3. KEY_BASE64HMAC_KEY_BASE64的值拷贝到spaserver的 /etc/fwknop/access.conf中对应的 KEY_BASE64HMAC_KEY_BASE64 中,并增加 REQUIRE_SOURCE_ADDRESS 配置,如下所示:
       SOURCE                     ANY
       REQUIRE_SOURCE_ADDRESS     Y
       KEY_BASE64                 Sz80RjpXOlhH2olGuKBUamHKcqyMBsS9BTgLaMugUsg=
       HMAC_KEY_BASE64            c0TOaMJ2aVPdYTh4Aa25Dwxni7PrLo2zLAtBoVwSepkvH6nLcW45Cjb9zaEC2SQd03kaaV+Ckx3FhCh5ohNM5Q==
      
      • 1
      • 2
      • 3
      • 4

    3.2 iptables规则添加

    1. sudo iptables -I INPUT 1 -i 网卡名 -p tcp --dport 22 -j DROP
    2. sudo iptables -I INPUT 1 -i 网卡名 -p tcp --dport 22 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

    3.3 启动fwknop守护进程

    1. 启动 sudo fwknopd
    2. 检查守护进程是否启动成功 sudo fwknopd -S

    3.4 客户端敲门

    1. 执行 fwknop -n 2.2.2.2 -a 1.1.1.1

    3.5 验证

    在客户端执行 telnet ip port 命令执行成功就表示端口被成功打开。

    参考:

    1. https://www.cipherdyne.org/fwknop/docs/fwknop-tutorial.html
  • 相关阅读:
    周大福践行「百周年承诺」,真诚服务推动绿色环保
    第3章 初识SqlSugarCore之ConfigureOptions注入实现
    前端必读2.0:如何在React 中使用SpreadJS导入和导出 Excel 文件
    PHP超级全局变量:功能、应用及最佳实践
    3、Pinpoint-Agent端注册服务到Server端
    C和指针 第15章 输入/输出函数 15.9 未格式化的行I/O
    RCNN系列1:RCNN介绍
    redis.conf文件下载与配置
    香港学界呼吁RWA“在港先发”,构建基于港元稳定币的Web3生态!
    hadoop大数据原理与应用-----初识hadoop习题集
  • 原文地址:https://blog.csdn.net/weixin_41111116/article/details/120190285