什么是端口敲门
如果像SSH这样的远程连接端口一直暴露在互联网上,很容易成为自动端口扫描和暴力破解攻击的目标。端口敲门的做法是:平时把该端口完全关闭,即使被扫描也只显示为"关闭(不存在)",只有按照预先约定的顺序依次尝试连接若干指定端口时,防火墙才会临时放行。
工作原理:按指定顺序尝试连接
客户端比如依次短暂尝试连接7000、8000、9000端口,虽然每次连接实际上都会被防火墙拦截,但服务器可以仅凭这些拦截记录(日志)判断出端口被敲击的顺序。一个独立运行的敲门监控程序会实时查看这些日志,一旦顺序与预设完全吻合,就会自动为该客户端的IP添加一条临时防火墙规则,放行所需端口(比如SSH的22端口)。
优点:端口扫描完全看不到
普通防火墙即便显示"端口已关闭",这个响应本身也暴露了服务器处于运行状态;而部署了端口敲门的服务器,对不知道敲门顺序的攻击者来说,连"是否存在可以打开的端口"这件事本身都无从判断。这使得它能在很大程度上避开自动化漏洞扫描器的关注,是最主要的实用优势。
局限:安全靠隐蔽(Security through obscurity)
端口敲门本身并不是强加密认证,而是依赖"知道顺序"这一事实,一旦在未加密的网络环境中敲门顺序被窃听,攻击者就能原样重放从而打开防火墙;理论上也存在被精心设计、连顺序都一并暴力尝试的攻击突破的可能性。因此更稳妥的理解方式是:端口敲门并不能取代SSH密钥认证、强密码等本应具备的认证手段,而是叠加在它们之前的一层辅助防护。
更进一步的方式:SPA(单包认证)
SPA(Single Packet Authorization)不再依赖多次连接尝试的顺序,而是把加密信息压缩进单独一个数据包发送,服务器解密验证有效后才开放端口。与容易受到重放攻击的传统端口敲门不同,SPA每次加密的内容都不一样,即使原样复制、重新发送同一个数据包也不会奏效。开源工具fwknop是广为人知的SPA实现之一。
实际应用场景
主要由运营个人服务器或小型基础设施的管理员选择性采用,用来给暴露在外网的SSH、远程管理端口再加一层隐蔽防护。这种方式不适合需要一直在线的公开服务(如Web服务器),而配置越复杂,管理员自己远程连接时也可能越麻烦,因此通常需要在接入便利性和安全强化之间权衡后再决定是否采用。