SPA fwknop 客户端使用总结
1. 客户端功能
客户端最主要的功能有两个,如下:
-
生成对称密钥和非对称密钥
-
向服务端发送数据验证包,使服务端去打开某个端口,例如要访问服务端受保护的80端口,如下图所示:
2. 客户端指令解析
所有指令均可使用"fwknop -h" 进行查看,这里对其进行翻译记录。
-
-n
--named-config: 在“$HOME/.fwknoprc”文件找到一个指定的Section配置(例如 -n 127.0.0.1)
-
-A
--access: 提供要在服务器上打开的端口/协议列表(例如“tcp/22”)。
-
-a
--allow-ip: 指定允许在 SPA 数据包中使用的 IP 地址(源地址,例如“123.2.3.4”)
-
-D
–destination: 指定 fwknop 服务器的主机名或 IP 地址
-
–use-hmac
将 HMAC 添加到出站 SPA 数据包以进行身份验证加密
-
-h
--help: 显示fwknop的使用方法内容
-
-B
--save-packet: 将生成的包数据保存到指定文件中
-
-b
--save-packet-append: 将生成的数据包数据附加到使用 -B 选项指定的文件中
-
-C
--server-cmd: 指定 fwknop 服务器将代表 fwknop 客户端执行的命令
-
-N
--nat-access: 获得对内部服务的 NAT 访问 (具体指什么,不太理解)
-
-p
--server-port: 设置传出 SPA 数据包的目标端口
-
-P
--server-proto: 为传出的 SPA 数据包设置协议(udp、tcp、http、tcpraw、icmp)
-
-s
--source-ip: 告诉 fwknopd 服务器接受 SPA 数据包具有的任何源 IP 作为需要访问的 IP(不推荐,fwknopd 服务器可以忽略此类请求)
-
-S
--source-port: 设置传出 SPA 数据包的源端口
-
-Q
--spoof-source: 设置传出 SPA 数据包的源 IP
-
-R
–resolve-ip-https: 通过连接到一个URL来解析外网IP,比如默认的:https://www.cipherdyne.org/cgi-bin/myip with wget in --secure-protocol mode (SSL)。可以使用 --resolve-url 选项覆盖默认的URL
--resolve-http-only: 通过 HTTP 而不是 HTTPS(通过上面提到的 URL)强制外部 IP 解析。不建议这样做,因为如果第三方在途中更改了 IP 解析 HTTP 连接,它会将 fwknop 暴露给潜在的 MITM 攻击
--resolve-url: 覆盖用于解析源 IP 地址的默认 URL
-
-u
–user-agent: 设置 HTTP 用户代理以通过 -R 解析外部 IP,或通过 HTTP 发送 SPA 数据包。如果未使用此选项,则默认值为 Fwknop/<version>
–use-wget-user-agent: 使用默认的 wget User-Agent 字符串而不是 Fwknop/<version>
-
-w
–wget-cmd: 在 -R 模式下手动设置 wget 的路径
-
-H
–http-proxy: 指定将通过其发送 SPA 数据包的 HTTP 代理主机。 也可以通过在主机/ip 后面加上“:<port>”来指定端口
-
-U
–spoof-user: 在传出的 SPA 数据包中设置用户名
-
-l
–last-cmd: 使用与上次执行时相同的命令行参数运行 fwknop 客户端(参数从 ~/.fwknop.run 文件中读取)
-
-G
–get-key: 从文件加载加密密钥/密码
–stdin: 从标准输入读取加密密钥/密码
–fd: 指定要从中读取加密密钥/密码的文件描述符
-
-k
–key-gen: 生成 SPA Rijndael + HMAC 密钥
-
-K
–key-gen-file: 将生成的 Rijndael + HMAC 密钥写入文件
–key-rijndael: 指定 Rijndael 密钥。由于密码对实用程序是可见的(如 Unix 下的“ps”),所以这种形式应该只在安全性不重要的情况下使用
–key-base64-rijndael: 指定 base64 编码的 Rijndael 密钥。由于密码对实用程序是可见的(如 Unix 下的“ps”),因此这种形式应该只在安全性不重要的情况下使用
–key-base64-hmac: 指定 base64 编码的 HMAC 密钥。由于密码对实用程序是可见的(如 Unix 下的“ps”),因此这种形式应该只在安全性不重要的情况下使用
-
-r
–rand-port: 通过随机分配的端口发送 SPA 数据包(在服务器端需要比默认的 udp 62201 更宽的 pcap 过滤器)
-
-T
–test: 构建 SPA 数据包,但不通过网络发送
-
-v
–verbose: 设置详细模式,可以指定多次(具体指什么,不太理解)
-
-V
–version: 打印版本号
-
-m
–digest-type: 指定要使用的消息摘要算法(md5、sha1、sha256、sha384 或 sha512).默认值为 sha256
-
-M
–encryption-mode: 指定使用AES加密SPA包时的加密模式。默认为CBC模式,但也可以选择其他的如CFB或OFB,只要在access.conf文件中也指定在服务器端。请注意,可以指定字符串“legacy”,以便使用 2.5 之前的 *fwknop* 版本使用的旧初始化向量策略生成 SPA 数据包
-
-f
–fw-timeout: 从客户端指定 SPA 服务器防火墙超时
–hmac-digest-type: 设置 HMAC 摘要算法(默认为 sha256).选项为 md5、sha1、sha256、sha384 或 sha512
–icmp-type: 设置ICMP类型(与’-P icmp’一起使用)
–icmp-code: 设置ICMP代码(与’-P icmp’一起使用)
–gpg-encryption: 使用 GPG 加密(默认为 Rijndael)
–gpg-recipient-key: 指定收件人 GPG 密钥名称或 ID
–gpg-signer-key: 指定签名者的 GPG 密钥名称或 ID
–gpg-no-signing-pw: 如果没有与 GPG 密钥关联的密码,则不允许签名密码
–gpg-home-dir: 指定 GPG 主目录
–gpg-agent: 如果可用,请使用 GPG 代理
–gpg-exe: 设置 GPG 二进制文件的路径
–no-save-args: 不要将 fwknop 命令行参数保存到 $HOME/fwknop.run 文件
–rc-file: 指定 fwknop rc 文件的路径(默认为 $HOME/.fwknoprc)
–server-resolve-ipv4: 使用主机名时,强制从 DNS 解析 SPA 服务器的 IPv4 地址
–save-rc-stanza: 将命令行参数保存到使用 -n 选项指定的 $HOME/.fwknoprc 节
–force-stanza: 与 --save-rc-stanza 一起使用以覆盖指定节的所有变量
–stanza-list: 转储在 $HOME/.fwknoprc 中找到的节列表
–nat-local: 通过 fwknopd 服务器系统上的转发端口访问本地服务.(具体指什么,不太理解)
–nat-port: 指定转发端口以通过 NAT 访问服务.(具体指什么,不太理解)
–nat-rand-port: 让 fwknop 客户端为 NAT 访问分配一个随机端口.(具体指什么,不太理解)
–no-home-dir: 不允许 fwknop 客户端查找用户主目录
–no-rc-file: 在不引用 ~/.fwknoprc 文件的情况下执行 fwknop 客户端操作
–show-last: 显示最后一个 fwknop 命令行参数
–time-offset-plus: 将时间添加到传出的 SPA 数据包时间戳
–time-offset-minus: 从传出的 SPA 数据包时间戳中减去时间
3. 最后
关于客户端的源码解析有兴趣的盆友调试跟踪下,后面会对客户端的源码进行跟踪调试,到时会继续进行博文更新。敬请期待!(不管你们期不期待,都得期待。 哈哈哈)