深入了解fwknop:单包授权的安全利器
1. fwknop基础配置
fwknop是一款强大的单包授权(SPA)工具,在网络安全领域发挥着重要作用。以下是一些关键的基础配置信息:
-
REQUIRE_SOURCE_ADDRESS
:设置为
Y
,表示需要源地址,fwknop客户端命令行中使用
-s
参数在SPA数据包中放置通配符IP地址将不被接受。
-
EMAIL_ADDRESSES
:fwknop服务器在多种情况下会发送邮件警报,如接受SPA数据包并授予服务访问权限、移除访问权限以及挫败重放攻击等。支持多个电子邮件地址,以逗号分隔,示例如下:
EMAIL_ADDRESSES
root@localhost, mbr@cipherdyne.org;
-
GPG_DEFAULT_HOME_DIR
:指定用于数字签名验证和SPA数据包解密的GnuPG密钥所在目录的路径。默认使用root主目录下的
.gnupg目录,示例配置如下:
GPG_DEFAULT_HOME_DIR /root/.gnupg;
- ENABLE_TCP_SERVER :控制fwknop是否将TCP服务器绑定到端口以接受SPA数据包数据。如果要通过仅使用TCP进行数据传输的Tor网络路由SPA数据包,则必须启用此功能。默认情况下此功能是禁用的,示例如下:
ENABLE_TCP_SERVER N;
-
TCPSERV_PORT
:指定
fwknop_serv守护进程监听TCP连接的端口。仅当ENABLE_TCP_SERVER启用时,fwknop才使用此端口。默认端口为62201,示例如下:
TCPSERV_PORT 62201;
2. /etc/fwknop/access.conf文件详解
fwknop.conf
文件提供了fwknop的宏观配置选项,但缺少对解密密码和用户授权权限等重要主题的讨论。而
access.conf
文件则定义了fwknop服务器使用的所有用户名、授权权限、解密密钥、iptables规则超时时间和命令通道。以下是
access.conf
文件中一些关键变量的详细解释:
| 变量名 | 描述 | 示例 |
| ---- | ---- | ---- |
| SOURCE | 允许fwknop确定有效SPA数据包的访问级别,支持多个用户从任意IP地址进行授权,每个用户可以使用不同的加密密钥和算法。默认值
ANY
表示接受任何源IP地址的SPA数据包。 |
SOURCE: ANY;
|
| OPEN_PORTS | 指示fwknop通过重新配置本地iptables策略来授予对指定端口的访问权限。除非
PERMIT_CLIENT_PORTS
变量设置为
Y
,否则客户端只能访问
OPEN_PORTS
中列出的服务。 |
OPEN_PORTS: tcp/22;
|
| PERMIT_CLIENT_PORTS | 设置为
Y
时,允许fwknop客户端指定通过iptables策略允许的流量(即端口和协议),而不是仅由fwknop服务器根据
OPEN_PORTS
变量重新配置。 |
PERMIT_CLIENT_PORTS: Y;
|
| ENABLE_CMD_EXEC | 启用后,允许授权的SPA客户端让fwknop服务器代表其执行命令。由于fwknop(截至1.0版本)以root身份执行这些命令,此功能存在一定争议。如需使用,必须显式启用。 |
ENABLE_CMD_EXEC: Y;
|
| CMD_REGEX | 提供一个正则表达式,fwknop服务器在执行fwknop客户端提供的命令之前,该命令必须与该正则表达式匹配。仅在
ENABLE_CMD_EXEC
设置为
Y
时使用才有意义。 |
CMD_REGEX: ^mail\s+\-s\s+\"\w+\"\s+\w+\@\w+\.com;
|
| DATA_COLLECT_MODE | 接受与
fwknop.conf
文件中
AUTH_MODE
变量相同的数据包收集模式。允许根据
AUTH_MODE
变量的值独立启用或禁用
access.conf
文件中的每个
SOURCE
访问定义。如果省略该变量,fwknop守护进程默认将其设置为
PCAP
。 |
DATA_COLLECT_MODE: PCAP;
|
| REQUIRE_USERNAME | 指远程系统上执行fwknop客户端以生成SPA数据包的用户的用户名。此用户名包含在所有SPA数据包中,允许fwknop对传入的SPA数据包应用授权规则。支持多个用户名。 |
REQUIRE_USERNAME: mbr,mrash;
|
| FW_ACCESS_TIMEOUT | 告诉fwknop服务器在
FWKNOP_INPUT
链中实例化任何iptables
ACCEPT
规则的秒数,以允许访问有效SPA数据包请求的服务。 |
FW_ACCESS_TIMEOUT: 30;
|
| KEY | 定义用于解密使用Rijndael块密码加密的SPA数据包的加密密钥,参数至少需要八个字符。 |
KEY: yourencryptkey;
|
| GPG_DECRYPT_ID | 指定fwknop服务器的GnuPG公钥的唯一标识符,fwknop客户端使用该公钥加密SPA数据包。该标识符通常是一个由八个十六进制字符组成的字符串。 |
GPG_DECRYPT_ID: ABDC1234;
|
| GPG_DECRYPT_PW | 保存fwknop服务器的GnuPG公钥的解密密码,fwknop客户端使用该公钥进行加密。由于此密码包含在纯文本文件中,建议生成一个仅用于fwknop服务器的新GnuPG密钥。 |
GPG_DECRYPT_PW: gpgdecryptionpw;
|
| GPG_REMOTE_ID | 包含fwknop客户端用于对SPA数据包进行数字签名的GnuPG密钥的唯一标识符。该密钥需要导入到fwknop服务器的密钥环中。 |
GPG_REMOTE_ID: DEFG5678;
|
3. 示例
/etc/fwknop/access.conf
文件
以下是一个完整的
access.conf
文件示例,可用于保护SSH服务器:
# cat /etc/fwknop/access.conf
SOURCE: ANY;
OPEN_PORTS: tcp/22;
FW_ACCESS_TIMEOUT: 30;
REQUIRE_USERNAME: mbr;
KEY: mypassword;
GPG_DECRYPT_PW: gpgdecryptpassword;
GPG_HOME_DIR: /root/.gnupg;
GPG_REMOTE_ID: 5678DEFG;
GPG_DECRYPT_ID: ABCD1234;
上述配置中,
SOURCE: ANY
表示fwknop守护进程将接受来自任何源IP地址的有效SPA数据包;
OPEN_PORTS: tcp/22
表示fwknop守护进程将通过本地iptables防火墙的
ACCEPT
规则临时授予对SSH端口的访问权限,该规则将在
FW_ACCESS_TIMEOUT
指定的30秒后移除;
REQUIRE_USERNAME: mbr
强制运行fwknop客户端的远程用户名必须为
mbr
。此外,fwknop守护进程配置为接受使用Rijndael对称加密(
KEY: mypassword
)或使用GnuPG非对称加密(
GPG_DECRYPT_PW: gpgdecryptpassword
)的SPA数据包。
4. fwknop SPA数据包格式
每个SPA数据包都根据一组明确的规则构建,这些规则使fwknop服务器能够确定通过iptables防火墙请求的访问类型以及请求者的身份。SPA数据包包含以下字段:
-
随机数据(16字节)
:提供足够的随机信息,确保fwknop生成的每个SPA数据包都是唯一的,其随机程度取决于Perl函数
rand()
每次调用时产生的随机数。
-
用户名
:执行fwknop命令的用户的名称,由
getlogin()
函数返回,如果
getlogin()
失败,则使用
getpwuid()
函数。fwknop服务器使用此用户名来确定远程用户是否有权限访问服务或运行命令。
-
时间戳
:本地系统的时间戳,fwknop服务器使用此值来确定SPA数据包是否在
MAX_SPA_PACKET_AGE
变量定义的定时访问窗口内。
-
软件版本
:fwknop客户端的版本,例如
fwknop v1.8.1
,fwknop服务器使用此信息在SPA数据包格式更改时保持与旧客户端的向后兼容性。
-
模式
:告诉fwknop服务器SPA客户端是否希望运行命令。默认值为1表示访问模式,0表示命令模式。
-
访问指令
:字符串,告诉fwknop服务器当修改iptables策略时,客户端希望允许哪些类型的流量通过。fwknop服务器解析此字符串中的端口和协议,以指示iptables接受相应的流量。例如,如果客户端希望访问TCP端口22和UDP端口1194,则字符串为
client IP,tcp/22,udp/1194
。
-
命令字符串
:fwknop客户端希望在服务器上执行的完整命令,例如
/etc/init.d/apache2 restart
或
w |mail -s "w output" you@domain.com
。此功能如果使用不当可能会带来安全风险,默认情况下是禁用的。
-
数据包MD5和
:由fwknop客户端计算并包含在SPA数据包中,用于增加对数据包在网络传输过程中未被更改的信心。通常,加密算法本身提供了足够的安全性,但包含MD5和可以让fwknop服务器独立确认客户端发送的数据与服务器实际接收的数据一致。
-
服务器认证方法
:
fwknop 0.9.6
版本添加到数据包格式中的字段,允许fwknop服务器在SPA数据包中要求额外的认证参数。例如,服务器可能要求远程fwknop客户端输入本地用户的
crypt()
密码。
在SPA数据包加密并默认通过UDP端口62201发送之前,上述字段会进行Base64编码,然后用冒号连接。以下是未编码和编码后的示例:
未编码:
9562145998506823:mbr:1161142204:1.0:1:0.0.0.0,tcp/22:koEtBtDL0ze22sNRyfASoA
编码后:
9562145998506823:bWJy:1161142204:1.0:1:MC4wLjAuMCx0Y3AvMjI=:koEtBtDL0ze22sNRyfASoA
最后,数据包数据使用Rijndael对称密码或GnuPG支持的非对称密码(默认使用Elgamal非对称密码)进行加密。例如,使用Rijndael加密后的结果如下:
U2FsdGVkX18O3i3n8BfSpgM6wCaf8zC4CgLsSlf2STIQTNWxaC9Q3IP1NSW91nSj5zr8Juz7YyX1oFzMu2FDZgbYAJUOxre
e7WyzHJdYl3ympcEPxpd/Qx5Wo3D8uS/AD8WyaV232srRCNWcsPUc9Q
5. 加密方式
SPA数据包使用对称密钥密码或非对称密钥密码进行加密和解密:
-
对称密钥密码
:使用相同的密钥对数据进行加密和解密,例如Rijndael密码,它已被选为高级加密标准(AES)。
-
非对称密钥密码
:使用一对密钥对数据进行加密和解密,公钥公开发布,私钥保密。两个密钥通过数学难题相关联,但不相同,例如GnuPG默认使用的Elgamal非对称密码。
6. fwknop部署场景
现在我们已经了解了fwknop的配置选项,接下来通过一些实际操作示例来展示如何使用fwknop客户端通过默认丢弃的iptables策略访问SSHD服务。在以下场景中,fwknop客户端在
spaclient
系统上执行,SPA数据包发送到
spaserver
系统。只有当SPA数据包将所需访问信息传达给
spaserver
系统并重新配置iptables以允许访问后,才能建立SSH连接。
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
A(spaclient):::process -->|SPA Packet| B(spaserver):::process
B -->|SSH Connection| A
7. 通过对称加密实现SPA
fwknop客户端提供了丰富的命令行选项,允许你告诉fwknop服务器你希望iptables策略授予的确切访问权限。使用这些命令行选项时,必须包含访问或命令字符串、源IP地址解析方法以及fwknop服务器目标IP地址。
假设本地iptables策略丢弃fwknop服务器
INPUT
链中所有发往TCP端口22的数据包。首先,将
fwknop.conf
文件中的
AUTH_MODE
设置为
PCAP
,确保
PCAP_INTF
设置为
eth0
,并将
access.conf
文件设置如下(此示例中不包含GnuPG指令):
[root@spaserver ~]# cat /etc/fwknop/access.conf
SOURCE: ANY;
OPEN_PORTS: tcp/22;
REQUIRE_USERNAME: mbr;
KEY: myencryptkey;
FW_ACCESS_TIMEOUT: 30;
按照以下步骤操作:
1.
启动fwknop服务器并验证其运行状态
:
[root@spaserver ~]# /etc/init.d/fwknop start
Starting fwknop ... [ ok ]
[root@spaserver ~]# /etc/init.d/sshd status
* status: started
[root@spaserver ~]# tail /var/log/messages
Oct 17 23:59:53 spaserver fwknopd: starting fwknopd
Oct 17 23:59:53 spaserver fwknopd: flushing existing Netfilter IPT_AUTO_CHAIN
chains
Oct 17 23:59:53 spaserver fwknopd: imported access directives (1 SOURCE
definitions)
Oct 17 23:59:53 spaserver fwknopd: imported previous md5 sums from disk cache:
/var/log/fwknop/md5sums
[root@spaserver ~]# /etc/init.d/sshd status
* status: started
通过查看syslog消息,可以看到fwknopd已准备好接受来自一个
SOURCE
块的SPA数据包,并导入了现有的SPA数据包MD5和磁盘缓存。
- 测试SSHD访问并使用fwknop获取访问权限 :
[mbr@spaclient ~]$ nc -v spaserver 22
[mbr@spaclient ~]$ fwknop -A tcp/22 -R -k spaserver
[+] Starting fwknop in client mode.
[+] Resolving hostname: spaserver
Resolving external IP via: http://www.whatismyip.com/
Got external address: 204.23.X.X
[+] Enter an encryption key. This key must match a key in the file
/etc/fwknop/access.conf on the remote system.
Encryption Key:
[+] Building encrypted Single Packet Authorization (SPA) message...
[+] Packet fields:
Random data: 2282553423001461
Username: mbr
Timestamp: 1161146338
Version: 1.0
Action: 1 (access mode)
Access: 204.23.X.X,tcp/22
MD5 sum: wvWqr/qKuZdZ+xaqPO1KwA
[+] Sending 150 byte message to 71.157.X.X over udp/62201...
[mbr@spaclient ~]$ ssh spaserver
Password:
[mbr@spaserver ~]$
上述命令中,
-A tcp/22
告诉fwknop服务器客户端希望访问TCP端口22;
-R
指示fwknop客户端自动解析SPA数据包的外部可路由地址(通过查询
http://www.whatismyip.com
实现);
-k
告诉fwknop客户端将SPA数据包发送到
spaserver
主机。
最后一行显示你已成功登录到
spaserver
主机,验证了你对SSHD的访问权限。以下是fwknop服务器上syslog中的消息:
Oct 18 00:38:58 spaserver fwknopd: received valid Rijndael encrypted packet
from: 204.23.X.X, remote user: mbr
Oct 18 00:38:58 spaserver fwknopd: adding FWKNOP_INPUT ACCEPT rule for
204.23.X.X -> tcp/22 (30 seconds)
Oct 18 00:39:29 spaserver knoptm: removed iptables FWKNOP_INPUT ACCEPT rule
for 204.23.X.X -> tcp/22, 30 second timeout exceeded
这些消息表明fwknopd已成功接收并解密了fwknop客户端发送的SPA数据包,添加了允许TCP端口22连接的
ACCEPT
规则,并在30秒超时后移除了该规则。fwknop服务器在自定义链
FWKNOP_INPUT
中添加和删除所有SPA访问规则,而不是在任何内置链(如
INPUT
或
FORWARD
)中,这样可以严格分离现有iptables策略中的规则。
通过以上步骤和配置,你可以利用fwknop的单包授权机制,安全、灵活地管理网络访问权限。
深入了解fwknop:单包授权的安全利器
8. 安全注意事项
在使用fwknop时,有一些重要的安全注意事项需要牢记:
-
加密密钥管理
:对称加密密钥和GPG解密密码应妥善保管。例如,GPG解密密码存储在纯文本文件中,建议为fwknop服务器生成专用的GPG密钥,避免使用用于其他重要用途(如机密电子邮件通信)的密钥。
-
命令执行风险
:
ENABLE_CMD_EXEC
功能虽然强大,但存在安全风险。由于fwknop以root身份执行命令,若使用不当,可能导致系统被攻击。使用时务必结合
CMD_REGEX
变量,严格限制可执行的命令范围。
-
用户认证
:
REQUIRE_USERNAME
变量可用于限制访问权限,确保只有授权用户能够生成有效的SPA数据包。同时,要注意保护用户账户的安全,防止用户名被盗用。
9. 性能优化建议
为了提高fwknop的性能和效率,可以考虑以下优化建议:
| 优化方向 | 具体措施 |
| ---- | ---- |
| 数据包收集模式 | 根据实际情况选择合适的
DATA_COLLECT_MODE
,如
PCAP
模式适用于大多数情况,但在某些场景下,其他模式可能更高效。 |
| 缓存管理 | 定期清理
/var/log/fwknop/md5sums
等磁盘缓存文件,避免缓存文件过大影响系统性能。 |
| 服务器资源分配 | 确保fwknop服务器有足够的系统资源(如CPU、内存)来处理SPA数据包,避免因资源不足导致处理延迟。 |
10. 常见问题及解决方法
在使用fwknop过程中,可能会遇到一些常见问题,以下是一些问题及对应的解决方法:
-
无法接收SPA数据包
:
- 检查网络连接是否正常,确保fwknop服务器和客户端之间能够正常通信。
- 确认防火墙配置,确保UDP端口62201(默认端口)未被阻塞。
- 检查
fwknop.conf
和
access.conf
文件的配置是否正确,特别是
SOURCE
、
OPEN_PORTS
等关键变量。
-
解密失败
:
- 检查加密密钥是否匹配,对称加密密钥和GPG解密密码必须与
access.conf
文件中配置的一致。
- 确保GPG密钥环中包含正确的远程签名密钥和本地解密密钥。
-
命令执行失败
:
- 检查
ENABLE_CMD_EXEC
是否已启用,并且
CMD_REGEX
是否允许执行相应的命令。
- 确认执行命令所需的权限是否足够,避免因权限不足导致命令执行失败。
11. 扩展应用场景
除了上述通过对称加密访问SSHD服务的场景,fwknop还可以应用于其他多种场景:
-
多端口访问
:通过配置
OPEN_PORTS
和
PERMIT_CLIENT_PORTS
变量,可以允许客户端访问多个端口和协议,如同时访问HTTP(TCP/80)和HTTPS(TCP/443)服务。
OPEN_PORTS: tcp/22,tcp/80,tcp/443;
PERMIT_CLIENT_PORTS: Y;
-
远程命令执行
:启用
ENABLE_CMD_EXEC功能后,可以让授权客户端在服务器上执行特定命令,如定时备份、系统监控等。
ENABLE_CMD_EXEC: Y;
CMD_REGEX: ^/usr/local/bin/backup_script.sh;
-
Tor网络集成
:启用
ENABLE_TCP_SERVER功能,将SPA数据包通过Tor网络传输,增加网络通信的匿名性和安全性。
ENABLE_TCP_SERVER: Y;
TCPSERV_PORT: 62201;
12. 总结与展望
fwknop作为一款强大的单包授权工具,为网络安全提供了一种有效的解决方案。通过合理配置
fwknop.conf
和
access.conf
文件,结合对称加密和非对称加密技术,可以灵活、安全地管理网络访问权限。同时,fwknop的命令执行功能和多端口访问支持,使其在不同的应用场景中都能发挥重要作用。
未来,随着网络安全需求的不断增长,fwknop可能会进一步发展和完善。例如,可能会增加更多的加密算法支持,提高加密的安全性;优化命令执行机制,降低安全风险;增强与其他安全工具的集成,提供更全面的网络安全防护。
总之,fwknop是一款值得深入研究和应用的网络安全工具,希望本文的介绍和示例能够帮助你更好地理解和使用fwknop,为你的网络环境提供更可靠的安全保障。
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
A(配置fwknop):::process --> B(生成SPA数据包):::process
B --> C(加密传输):::process
C --> D(服务器解密验证):::process
D -->|成功| E(授予访问权限):::process
D -->|失败| F(拒绝访问):::process
通过以上的介绍和示例,你可以全面了解fwknop的配置、使用方法、安全注意事项和性能优化建议。在实际应用中,根据具体需求灵活调整配置,充分发挥fwknop的优势,为网络安全保驾护航。
超级会员免费看
7

被折叠的 条评论
为什么被折叠?



