1、安装fwknop server
此教程使用github原码进行编译安装,还可使用apt直接进行下载(不在本页)
从GitHub下载原码压缩包
https://github.com/mrash/fwknop
解压后进入文件路径
首先保证安装以下软件
sudo apt-get install libtool
sudo apt-get install automake
sudo apt-get install libpcap-dev
sudo apt-get install texinfo
sudo apt-get install make
2、安装fwknop server
-
运行
./autogen.sh
-
运行
./configure
成功后为此效果,如未显示,请检查前文依赖是否安装正确
3.编译安装
执行编译
sudo make
安装
sudo make install
卸载
sudo make uninstall
安装后 使用 which fwknop 查看安装位置
使用 ldconfig进行刷新
使用 sudo fwknop -V 查看版本
正确显示后即为安装成功
4.配置
1)客户端生成秘钥
$ fwknop -A tcp/22 -a 192.168.163.1 -D 192.168.163.129 -p 62201 -P udp --key-gen --use-hmac --save-rc-stanza
-a后为客户端ip,-D后面为服务器ip,-p后为服务器监听SPA包的端口,-P后为发送的SPA包的协议,一般采用UDP包。
执行成功后输出如下信息:[+] Wrote Rijndael and HMAC keys to rc file: (省略)
路径一般为/root/下一个文件
查看该文件,内容如下:
[192.168.163.129]
SPA_SERVER_PROTO udp
SPA_SERVER_PORT 62201
ALLOW_IP 192.168.163.1
ACCESS tcp/22
SPA_SERVER 192.168.163.129
KEY_BASE64 gqkSa8ghIDlAfv3FDEAdyyMfC6Q+j9RI+BhodFdifok=
HMAC_KEY_BASE64 IPsM8dg8JLaYvRS3UVEoNiuQ9nBu7FB86tOmQyF7HF0+7cT33pxUHAX5zGcYidP5T03zJLR3ejjrJgR1PezLvA==
USE_HMAC Y
2)服务端配置设置
编辑sudo vim /usr/local/etc/fwknop/access.conf文件,修改里面的内容如下:
OPEN_PORTS tcp/22
FW_ACCESS_TIMEOUT 20
SOURCE ANY
#KEY_BASE64 __CHANGEME__
#HMAC_KEY_BASE64 __CHANGEME__
KEY_BASE64 gqkSa8ghIDlAfv3FDEAdyyMfC6Q+j9RI+BhodFdifok=
HMAC_KEY_BASE64 IPsM8dg8JLaYvRS3UVEoNiuQ9nBu7FB86tOmQyF7HF0+7cT33pxUHAX5zGcYidP5T03zJLR3ejjrJgR1PezLvA==
注意键值的拼写
编辑文件sudo vim /usr/local/etc/fwknop/fwknopd.conf
添加内容如下:
PCAP_INTF ens33;
ens33是用ifconfig命令查出来的网卡名字:
[jelly@localhost ~]$ ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.163.129 netmask 255.255.255.0 broadcast 192.168.163.255
inet6 fe80::37c8:6a00:e56c:9bf5 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:66:79:23 txqueuelen 1000 (Ethernet)
RX packets 1336 bytes 112165 (109.5 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1197 bytes 208285 (203.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 19 base 0x2000
3)在服务端启动停止fwknop
[jelly@localhost ~]$ sudo fwknopd start //启动fwknop
[*] An instance of fwknopd is already running: (PID=4196).
[jelly@localhost ~]$
[jelly@localhost ~]$ sudo fwknopd -S //查看fwknop状态
Detected fwknopd is running (pid=4196).
[jelly@localhost ~]$
[jelly@localhost ~]$ sudo kill 4196
4)在服务端打开防火墙,屏蔽22端口
在此之前先测试ssh是否可用
sudo ps -e | grep ssh
若无结果使用以下安装ssh
sudo apt-get install openssh-server
再次检测ssh是否可用
sudo ps -e | grep ssh
如果有 sshd 则说明 ssh 服务已启动,如果没有启动,输入下边命令启动 ssh 服务
sudo service ssh start
接下来设置防火墙
[jelly@localhost ~] $ sudo iptables -I INPUT 1 -i ens33 -p tcp --dport 22 -j DROP
[jelly@localhost ~] $ sudo iptables -I INPUT 1 -i ens33 -p tcp --dport 22 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
注意
- ubuntu 22.04默认使用nftables作为防火墙,而非iptables。
解决
sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
5)在客户端使用敲门命令(是服务端ip)
fwknop -n 192.168.163.129
6)检测监听状态
sudo fwknopd --fw-list
出现如下信息则敲门成功
Chain FWKNOP_INPUT (1 references)
num? target? ? prot opt source? ? ? ? ? ? ? destination? ? ? ?
1? ? ACCEPT? ? tcp? --? 192.168.224.128? ? ? 0.0.0.0/0? ? ? ? ? ? tcp dpt:22 /* _exp_1605597903 */
客户端使用nmap命令扫描服务器,则结果为:
PORT STATE SERVICE
22/tcp open? ssh
SPA验证完成!
使用tcpdump对服务器接收到的数据包进行监听,发现在fwknop敲门行为前后,客户端通过udp协议向服务器的62201端口发送一个验证包,但是此项行为涉及的端口和协议都可以使用--server-port参数进行修改。
没找到如何修改--server-port默认参数,但每次敲门行为都可以指定端口,操作命令如下
fwknop -n 192.168.224.130:12345
端口号范围再10000-65535之间。同时可能要修改服务器的/etc/fwknop/fwknopd.conf中的PCAP_FILTER字段。
PCAP_FILTER udp port 62201;
本文参考fwknop SPA服务端源码编译_fwknop 源码解析_愤怒的小黄鸭的博客-CSDN博客fwknop的安装和使用测试_Jelly-小丑鱼的博客-CSDN博客