不对公众提供网络服务的话,完全没必要对外暴露任何端口
最近肥牛的 0day 漏洞很火,分享下我的观点:
普通人如果不对不特定公众人群提供网络服务的话,完全可以不对外暴露任何端口,以获得最大的数据安全。
那在外如何访问家里的数据呢,只需要一个中转服务,把当前设备的 IP 传递给家里的防火墙即可。分享下我的实现方式
- 本地防火墙默认 drop 掉所有的入栈请求,注意是 drop 不是 reject 。被扫描时选择不回应,而不是大喊“不准进”,网络黑暗森林法则
- 本地防火墙上运行一个监听脚本/程序,只通过 cf tunnel 监听来自 cf worker 的认证后的请求,不监听公网请求
- 在 cf Worker 上部署一个中转脚本,用于接受远程设备的 ip 并转发给本地防火墙
- 远程设备,比如手机需要访问家里的设备时,先访问 cf worker 脚本,脚本将设备的 IP 和请求端口等信息传递给本地防火墙的监听程序,再由其加入到防火墙的临时白名单里,允许 10 分钟内入栈连接。超时后将 ip 移出白名单
- iOS 设备可以利用快捷指令,在启动某个 App ,比如群晖 Photos 时自动后台访问 worker 脚本,将当前设备的 IP 传递给家里的防火墙,基本可以无感直接访问家里。其他有更高权限的系统,完全可以将设备的 IP 变动实时传递给家里
其中第二步也可以简化为只运行一个轮询脚本,通过 cron job 不断轮询 cf worker 获取最新的白名单 IP 。时效性比通过 cf tunnel 监听稍差。自己有 VPS 的话可以通过其他方式与 VPS 建立一个长连接传递白名单 IP ,增加时效性