1. fwknop工作流程
本质的流程就是客户端发送认证数据包,服务端收到后进行校验,合法就打开端口,否则不进行处理。下面使用场景中会对工作量流程进行进一步的解释,有关工作原理及源码分析则在后续的博客中进行介绍。
2. fwknop不同场景的处理流程
2.1 非NAT场景
- 客户端执行
fwknop -n 192.168.3.4 -a 192.168.3.3
进行敲门 - 服务端收到后对数据进行解密处理比对,数据无误之后打开受保护的端口(默认打开30s)
1.2 NAT场景
以下图片来自官网:
问题:由于spaclient和受保护的服务都在各自的内网,客户端执行 fwknop -n 10.1.2.10 -a 192.168.10.123
,spaserver 是无法收到数据包的
解决:此时就要用到fwknop提供的NAT功能了,具体如下
- spaserver的
/etc/fwknop/fwknop.conf
文件中的ENABLE_IPT_FORWARDING
要设置为Y
- spaclient执行命令为
fwknop -n 2.2.2.2 -a 1.1.1.1 -N 10.1.2.10:22
解释说明:
- 之所以写
-a 1.1.1.1
是因为spaclient出公网时src_ip会变成1.1.1.1
-n 2.2.2.2
则是spaserver的地址-N 10.1.2.10:22
则表示spaserver需要将1.1.1.1
过来的流量转发到10.1.2.10:22
上
3. fwknop基本使用
以Ubuntu环境为例,分别在两个不同的虚拟机里下载fwknop-server和fwknop-client,下载命令如下:
- sudo apt-get install fwknop-server
- sudo apt-get install fwknop-client
- spaserver端要开启某个端口的监听,比如22端口
3.1 配置
- 修改spaserver的
/etc/fwknop/fwknopd.conf
中的PCAP_INTF
项,将其指定为网卡名称 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
- 将
KEY_BASE64
和HMAC_KEY_BASE64
的值拷贝到spaserver的/etc/fwknop/access.conf
中对应的KEY_BASE64
和HMAC_KEY_BASE64
中,并增加REQUIRE_SOURCE_ADDRESS
配置,如下所示:SOURCE ANY REQUIRE_SOURCE_ADDRESS Y KEY_BASE64 Sz80RjpXOlhH2olGuKBUamHKcqyMBsS9BTgLaMugUsg= HMAC_KEY_BASE64 c0TOaMJ2aVPdYTh4Aa25Dwxni7PrLo2zLAtBoVwSepkvH6nLcW45Cjb9zaEC2SQd03kaaV+Ckx3FhCh5ohNM5Q==
3.2 iptables规则添加
- sudo iptables -I INPUT 1 -i 网卡名 -p tcp --dport 22 -j DROP
- sudo iptables -I INPUT 1 -i 网卡名 -p tcp --dport 22 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
3.3 启动fwknop守护进程
- 启动
sudo fwknopd
- 检查守护进程是否启动成功
sudo fwknopd -S
3.4 客户端敲门
- 执行
fwknop -n 2.2.2.2 -a 1.1.1.1
3.5 验证
在客户端执行 telnet ip port
命令执行成功就表示端口被成功打开。
参考: