knock端口敲门
·
Knock服务
- 即端口敲门(Port Knocking),是一种利用一系列预设的端口序列来“敲门”,从而动态地打开防火墙上的目标服务端口以实现访问控制的安全技术。
- 其核心原理是服务器上的端口默认是隐藏的,只有客户端按照事先约定好的顺序依次尝试访问一系列“秘密”的端口,服务器端的knockd服务才会识别出这个“暗号”,并暂时打开关键服务端口(如SSH的22端口),允许合法用户连接。
- 当服务使用完毕后,服务器会停止开放端口,进一步提升了系统的安全性,降低了被端口扫描和暴力破解的风险。
安装
apt install knockd
echo <<EOF > /etc/knockd.conf
[options]
# UseSyslog
Interface = eth0
LogFile = /var/log/knockd.log
[openSSH]
# sequence = 1357:tcp, 1234:tcp, 6789:tcp
sequence = 1357, 1234, 6789
seq_timeout = 20
command = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
tcpflags = syn
# start_command = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
# cmd_timeout = 60
# stop_command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
[closeSSH]
sequence = 6789, 1234, 1357
seq_timeout = 5
command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
tcpflags = syn
<<EOF
测试
nmap -A -p 22 192.168.7.7 -oA output
# 开门
knock -v 192.168.7.7 1356 1234 6789
nmap -A -p 22 192.168.7.7 -oA output
iptalbes -nvL | grep 22
# 关门
knock -v 192.168.7.7 6789 1234 1357
# 破解端口敲门序列
target=192.168.7.7
# 查看开放的端口
nmap -p- 192.168.7.7
nmap -p- -sU 192.168.7.7
# 分别向12001-12005端口都发送设置了 FIN/URG/RST/SYN 标志的 TCP 数据包
for port in 12001 12002 12003 12004 12005; do
for flag in F U R S; do
hping3 -c 5 -$flag -p $port $target
done
done
工作原理
- 预设序列:管理员定义一个端口序列(例如,7000, 8000, 9000)作为“敲门暗号”。
- 客户端“敲门”:客户端按照约定的顺序,依次向服务器的这些端口发送连接请求。
- 服务器监听与识别:服务器上的knockd守护进程会监听这些端口的访问,并验证收到的端口序列是否与预设的匹配。
- 动态开启服务:如果敲门序列正确,knockd服务会动态修改防火墙(如iptables)规则,临时开放预期的目标服务端口(如SSH的22端口),允许客户端进行连接。
- 定时关闭:服务端口开放一段时间后,敲门服务会自动关闭该端口,恢复初始的防火墙规则,继续隐藏服务。
主要优点
- 提高安全性:通过隐藏服务端口,有效防止了未经授权的端口扫描和暴力破解攻击。
- 降低攻击面:重要的服务端口不直接暴露在外,减少了潜在的攻击点。
- 动态访问控制:允许在需要时进行访问,而不是一直开放服务端口,更安全。
应用场景
- 隐藏SSH服务:防止SSH服务被频繁扫描,保护服务器免受暴力破解攻击。
- 保护其他敏感服务:用于对公共网络开放的其他重要服务,如数据库端口等。