零信任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
    
  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==
    

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
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值