这是一个创建于 474 天前的主题,其中的信息可能已经有所发展或是发生改变。
在逛 Arch Wiki 的时候(虽然我不是 Arch 用户),看到了一个有意思的 Topic:Port Knocking
然后文章的最底下提到了一个叫 fwknopd 的程序,它可以实现基于发送单个数据包,完成用户身份认证,并让防火墙自动开放端口
然后很巧的是,这个程序 Ubuntu/Debian 都有打包,用 apt 安装就是了,于是乎就拿来玩一下,以下是过程:
1 、在客户端执行:fwknop -D 11.22.33.44 -k --use-hmac --save-rc-stanza
-D ,即服务器地址,可以是域名,也可以是 ip
-k ,生成密钥
--use-hmac ,生成消息认证码
--save-rc-stanza ,保存参数到配置文件(.fwknoprc )
2 、在服务器上编辑/etc/fwknop/access.conf 文件
首先在文件靠近底部的地方有填写密钥和消息认证码的地方,把客户端刚刚生成的 BASE64 编码的密钥和 HMAC 都填写进去;然后在下面再加一行 FW_ACCESS_TIMEOUT 3600;(注意;符号不要漏掉),不加的话,默认敲门后只开门 30 秒
3 、在服务器上编辑/etc/fwknop/fwknopd.conf 文件
在文件的末尾加上 PCAP_INTF ens5; 这是设置监听的网卡,如果要保护服务的网卡不是 eth0 ,则要加
4 、配置防火墙默认丢弃数据包(这里要保护的协议/端口是 tcp/443 )
iptables -I INPUT 1 -i ens5 -p tcp --dport 443 -j DROP
iptables -I INPUT 1 -i ens5 -p tcp --dport 443 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
5 、在服务器运行 fwknop 服务器( fwknopd ),可以用 fwknopd -S 来检查服务器是否已运行
6 、敲门前,在客户端运行 nmap -sS -p 443 11.22.33.44 ,由于没有敲门,结果应该是 filtered
7 、敲门,在客户端运行 fwknop -n 11.22.33.44 -A tcp/443 -s
-n 查询.fwknoprc 文件中的主机名
-A 要访问的协议和端口
-s 告诉服务器在敲门成功的情况下为敲门数据包的来源地址开门
敲了门之后运行在 11.22.33.44 ,tcp/443 上的服务应该可以被正常访问了,按照之前的设置,3600 秒之后需要重新敲门,所以可以用 crontab 每小时敲门
fwknop 默认使用 UDP/62201 进行敲门,可以配置为其他协议( tcp, tcp_raw_socket, icmp ),以及其他端口,具体可以看 manpage
这里需要特别说明,敲门时指定的参数-s 相当于告诉服务器,只要身份核验通过,就为敲门数据包的来源地址放行,方便,但可以被 MiTM 攻击,当很清楚自己的出口 ip 的时候,应该将-s 参数替换为 -a <自己的公网 ip>
2 条回复 • 2023-08-11 01:37:15 +08:00
|
|
1
iqoo 2023-08-10 22:45:13 +08:00
|
|
|
2
azio7 2023-08-11 01:37:15 +08:00
很老的技术了,几年在一本旧书上见过
|