跳至内容
Secret Knock

设置 fwknop 服务器

fwknop 单数据包授权会让 SSH 保持关闭状态,直到收到一个经过加密和认证的 UDP 数据包。这些步骤适用于 Debian 或 Ubuntu 服务器;请先从电脑进行测试,然后将相同的密钥添加到 Secret Knock。

1. 安装并生成密钥

安装服务器端和客户端,然后生成密钥对。请保留输出内容:相同的两个密钥将用于 access.conf 和 Secret Knock。

sudo apt install fwknop-server fwknop-client
fwknop --key-gen          # prints KEY_BASE64 and HMAC_KEY_BASE64
Debian / Ubuntu

2. 允许 SPA 数据包访问 SSH

access.conf 用于指定有效数据包可以打开什么,以及打开多长时间。

SOURCE              ANY
OPEN_PORTS          tcp/22
KEY_BASE64          <output of fwknop --key-gen>
HMAC_KEY_BASE64     <output of fwknop --key-gen>
FW_ACCESS_TIMEOUT   30
/etc/fwknop/access.conf

3. 指定 fwknopd 的监听位置

fwknopd 会在网络接口上捕获数据包;它不需要开放端口。请设置服务器所使用的接口。

# /etc/fwknop/fwknopd.conf
PCAP_INTF               eth0;
PCAP_FILTER             udp port 62201;
MAX_SPA_PACKET_AGE      120;
/etc/fwknop/fwknopd.conf

4. 默认关闭 SSH

执行此操作时请保持一个 SSH 会话处于打开状态,并在退出前通过第二个连接进行测试。fwknopd 会在 INPUT 顶部插入自己的链,并为每个有效数据包在该链中添加一个有时限的 ACCEPT 规则。

sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j DROP
iptables

5. 测试,然后添加门

重启 fwknop-server,从另一台设备发送数据包并连接:

# from another machine: request SSH for the address the server sees (-R)
fwknop -A tcp/22 -R -D server.example.com \
    --key-base64-rijndael "<KEY_BASE64>" --key-base64-hmac "<HMAC_KEY_BASE64>"
ssh [email protected]
在安装 fwknop-client 的电脑上
  1. 1在 Secret Knock 中:新建门 › 从模板开始 › fwknop,输入主机地址,然后使用“粘贴密钥”粘贴 fwknop --key-gen 的输出内容。
  2. 2敲门;当端口 22 有响应时,门会显示“门微开”。
  3. 3如果没有,请在服务器上运行 fwknopd -f -v;故障排除指南列出了常见原因。

GitHub 上的所有示例 → 本页面上的每项配置均可直接复制:github.com/mobilcomm/secretknock-examples(公共领域)。

问题

fwknopd 是否需要开放端口?

不需要。它从网络接口读取数据包,因此 SPA 端口可以在防火墙中保持关闭;数据包只需能够到达服务器即可。

适用于您设置的指南