最近在做零信任相关软件的验证,单包授权认证流程中最核心最基础的软件就是iptables,所以研究一下iptables和基于iptables的软件fwknop。(由于此文主要留给自己看,暂时省略fwknop的安装流程,不过参考文章中都有。)
在两台liunx虚拟机中分别安装好fwknop-server和fwknop-client以后,先对两台机子进行初始化设置。
server服务器ip地址为:192.168.224.130
client客户端ip地址为:192.168.224.128
涉及到的命令基本都需要root权限,可以先sudo -i暂时进入root权限,不需要时logout退出。
在客户端中执行如下命令,建立针对22端口的敲门机制:
[root@localhost ~]# sudo fwknop -A tcp/22 -a 192.168.224.128 -D 192.168.224.130 --key-gen --use-hmac --save-rc-stanza
然后执行如下命令,获取获取KEY_BASE64以及HMAC_KEY_BASE64的信息。
[root@localhost ~]# sudo grep KEY /root/.fwknoprc
获得如下信息:
KEY_BASE64 cYhgo4jZUCMCGQBPHWRBL0R9Aeq8Mj8CXojMNdW1oyA=
HMAC_KEY_BASE64 UqByGDKSjzm0ZRnABLztW2k8EPAjGUnVgszfRo6XkRyvDYHMUCs81MddWwqlxT8btlkkFXq4XwenQkDjeROctA==
将这些信息复制到服务器中,以便服务器确认客户端“敲门”行为的合法性。
在服务器端执行如下命令:
sudo vim /etc/fwknop/access.conf
进入配置文件后,输入i,插入
SOURCE ANY
DESTINATION ANY
REQUIRE_SOURCE_ADDRESS Y
OPEN_PORTS tcp/22,tcp/80,udp/1194,tcp/4432
KEY_BASE64 cYhgo4jZUCMCGQBPHWRBL0R9Aeq8Mj8CXojMNdW1oyA=
HMAC_KEY_BASE64 UqByGDKSjzm0ZRnABLztW2k8EPAjGUnVgszfRo6XkRyvDYHMUCs81MddWwqlxT8btlkkFXq4XwenQkDjeROctA==
点击Esc,退出插入模式,输入:wq,退出并保存配置文件。
继续执行命令:
[root@localhost ~]# sudo vim /etc/fwknopd/fwknopd.conf
使用 ip a命令查询目前使用的网卡名称,如:ens32。进入服务器配置文件,将其中关键字PCAP_INTF 定义为服务器当前使用的网卡,如:
PCAP_INTF ens32
使用iptables进行端口22的控制
[root@localhost ~]# sudo iptables -I INPUT 1 -i ens32 -p tcp --dport 22 -j DROP
[root@localhost ~]# sudo iptables -I INPUT 1 -i ens32 -p tcp --dport 22 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
配置完成后,打开fwknopd
[root@localhost ~]# fwknopd
查看iptables结果
[root@localhost ~]# fwknopd --fw-list
配置结束
接着进行SPA测试,客户端中使用如下命令进行端口敲门:
[root@localhost ~]# fwknop -n 192.168.224.130
服务器中使用如下命令查看敲门结果:
[root@localhost ~]# 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;
本文主要参考文章:
1、https://blog.csdn.net/he_tao225/article/details/106425229