NAT路由器后方收到外部连接尝试的原因排查(nftables日志相关)
这种情况确实挺让人纳闷的——明明躲在NAT路由器后面,按常理外部随机扫描的数据包根本不应该落到你的笔记本上才对。我来帮你梳理几个最可能的原因,你可以逐一排查:
路由器的端口转发/DMZ配置遗留
虽然你说自己是“标准设置”,但有可能之前不小心配置了端口转发规则,把外部某个端口映射到了你笔记本的内网IP;甚至可能误开了DMZ主机功能(把路由器的所有外部端口都转发到你的机器)。建议登录路由器的管理界面,仔细检查端口转发和DMZ主机的设置,看看有没有陌生的规则。UPnP自动端口映射在搞鬼
如果你的路由器开启了UPnP(通用即插即用)功能,笔记本上的某些软件(比如P2P下载工具、联机游戏、远程控制软件)可能会自动向路由器请求打开端口转发,创建临时的映射规则。外部扫描的数据包刚好命中这些被打开的端口,就会被转发到你的机器。可以去路由器里关闭UPnP试试,或者检查笔记本上有没有这类会自动请求端口的软件。NAT会话的意外留存
如果你之前主动发起过对外部某个IP的连接(哪怕是某个奇怪的端口),路由器会保留这个NAT会话一段时间。如果外部扫描的数据包刚好在会话超时前发送过来,就会被路由器转发到你的机器。不过你说每分钟都有不同端口的尝试,这个可能性相对低,但可以看看路由器的NAT超时设置,或者核对一下日志里的源IP是不是你之前访问过的。路由器固件bug或配置错误
一些低端路由器或者老旧固件可能存在NAT规则失效的bug,比如NAT表溢出、SYN包处理逻辑错误,导致外部数据包能直接穿透到内网。你可以先试试重启路由器,看看情况有没有改善;如果不行,去路由器厂商官网看看有没有可用的固件更新,修复这类问题。
另外,关于你的nftables规则,目前默认策略是accept,虽然只是日志,但建议改成更安全的drop,只放行你需要的流量,比如:
table inet filter { chain input { type filter hook ingress device "wlp3s0" priority filter; policy drop; # 放行已建立/相关的连接(比如你主动发起的请求的回应) ct state established,related accept # 放行本地回环流量 iifname lo accept # 按需放行特定服务端口,比如SSH tcp dport 22 accept # 继续日志SYN包 tcp flags syn log flags skuid } }
这样即使有外部包进来,也不会真的建立连接,只是记录日志,安全性更高。
备注:内容来源于stack exchange,提问作者Franciszek Malinka

