家庭网络如何进行安全加固上
本系列打算分为三篇来写,第一篇关于基本的网络安全基础以及家用nas该注意的安全点,第二篇关于雷池在群晖下的搭建,第三篇关于雷池的配置.
本次比较仓促,因为众所周知的事情,有些知识点可能有错误,也会有遗漏,后面看情况会更新完善.
有一些大佬会说自己是内网, 自己有frp,自己有防火墙限制端口, 是不是这样子就安全呢? 一句话,(๐•ᴗ•๐)人有(๐•ᴗ•๐)福. 本次倒霉蛋,纯内网,包括之前的倒霉蛋,frp是面向端口的转发,不会完全开放内网,那为什么还会被入侵,原因就在于mp可能存在远程执行漏洞.
192.168.0.1 - - [16/Jan/2024:09:07:56 +0800] "SSH-2.0-OpenSSH" 400 157 "-" "-"
192.168.0.1 - - [16/Jan/2024:09:33:45 +0800] "POST /api/v1/login/access-token HTTP/1.1" 200 261 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0"
if(window.hljsLoader && !document.currentScr(๐•ᴗ•๐).parentNode.hasAttribute('data-s9e-livepreview-onupdate')) {
window.hljsLoader.highlightBlocks(document.currentScr(๐•ᴗ•๐).parentNode);
}
这种漏洞避无可避,唯一的办法就是在整个应用前面部署WAF(应用防火墙),后续我们会讲如何在群晖上安装使用长亭雷池(https://waf-ce.chaitin.cn/).
有兴趣的可以看下国家信息安全漏洞库(https://www.cnnvd.org.cn/home/childHome),还有(https://cve.mitre.org/),还有这个(https://blog.csdn.net/huapeng_guo/article/details/132097386).
什么是内网
对于家庭网络,要考虑的地方蛮多的, 我们先看内网这个, 是不是ipv4内网就是内网, 未必, ipv6公网也是公网,如果内网应用,例如nginx 配置listen 80,意味着开放了所有接口的80访问. 现在docker教程满天飞,人人都可以装,你真的明白这里面存在的安全问题么?举个简单的例子, mp内置了sqlite数据库,
无密码, cookie cloud同步的cookie信息明文保存, 如果使用了药丸签到,恭喜你, 也是明文保存在里面, 如果这个db文件乖乖呆在docker里还好,估计不少人会映射出来,大大方方的存在某个本地目录.应用越多,暴漏的安全问题越多.
这次事情其实是容器内数据被拖库,为了预防此类问题,应该把所有应用都关闭局域网访问,只绑定127.0.0.1 或者 docker 虚拟网络的172.17.xx, 然后通过waf反代处理.
关于frp
再说下frp这个, 在说这个之前,我们先看下什么是NAT. NAT有以下几种类型:
NAT1(Open NAT): 表示网络上的设备可以直接访问互联网,没有任何限制。这通常是最理想的情况,因为它允许设备之间的最大通信自由。
NAT2(Moderate NAT): 表示网络连接存在一些限制,但仍然允许设备进行在线游戏。这可能是由于(๐•ᴗ•๐)由器或防火墙设置中的一些端口限制,但通常不会导致严重的连接问题。
NAT3(Strict NAT): 表示网络连接上有较为严格的限制,可能导致某些在线游戏功能受阻。这可能是由于(๐•ᴗ•๐)由器或防火墙设置中的较为严格的端口限制,可能需要进行一些配置调整。
NAT4(Do(๐•ᴗ•๐)le NAT): 表示存在两层网络地址转换,通常是在本地网络和互联网之间都有一个NAT。这种情况可能导致一些连接问题,尤其是在需要端口映射的情况下。
- 开了DMZ,就是NAT1, 适合于bt下载,游戏. 家庭vip, vps就是这种类型. 这类机器是理想的肉鸡环境.
- NAT3, 如果开了frp,就是这个,有些服务商允许开upnp,这个时候也是. 电信sdn没有upnp,所以内网没瞎折腾了,除非你需要ssdp,服务发现这些. 黑客最喜欢这个, 打开工具箱一键开搞.
- 移动, 电信云宽带, 没有公网ip(v4,v6),就是nat4,这个环境是最安全的, 但也不是绝对安全.针对这类网络,需要钓鱼,分析你的兴趣,网络习惯,诱导你下载一个包含后门的程序,免费帮你frp. 如果不能理解,想想电信诈骗.有个安全大佬,丈母娘被人打电话,然后apple id被人拿啦,告苹果不知道有没有下文.
upnp
再说下upnp这个,upnp会自动把内网的端口在(๐•ᴗ•๐)由器的wlan上开启, 如果是多级(๐•ᴗ•๐)由器,每层都开启,就会一层层暴漏出去.有个常见的协议,ssdp,媒体发现会用这个.它跟upnp的区别看这个:
SSDP(Simple Service Discovery Protocol)和 UPnP(Universal Plug and Play)在某种程度上是相关的,因为它们通常一起使用,但它们是不同的协议,有一些共同点和区别。
共同点:
服务发现: SSDP 和 UPnP 都与服务发现有关,使设备能够发现网络中的其他设备和服务。
自动端口映射: UPnP 主要用于实现自动端口映射,以便在私有网络中的设备可以通过公有IP地址和端口号直接通信。这有助于在需要时动态打开和关闭端口,以支持特定应用或服务。
区别:
协议: SSDP 是一种用于发现服务的协议,而 UPnP 是一种更广泛的架构,包括多种协议,其中之一就是 SSDP。
功能范围: UPnP 不仅包括服务发现,还包括设备控制、事件通知等功能,使设备能够更加智能地协同工作。SSDP 更专注于服务发现。
安全性: UPnP 的自动端口映射功能引发了一些安全担忧,因为它可能使网络更容易受到攻击。一些人认为禁用 UPnP 可以增强网络安全性。SSDP 的主要目标是服务发现,而不涉及直接的端口映射。
总体而言,虽然 SSDP 与 UPnP 通常结合使用,但它们有不同的功能和重点。 UPnP 提供了更广泛的功能,而 SSDP 是其中的一个组成部分,用于服务发现。自动端口映射通常是通过 UPnP 的端口映射协议来实现的。
回复里有大佬说, upnp不支持跨级, 查了下,如下:
UPnP(Universal Plug and Play)通常设计用于在本地网络内进行设备发现和配置,而不是直接支持多级(๐•ᴗ•๐)由器之间的设备通信。UPnP的设计目标是简化本地网络中设备的连接和配置,使用户无需手动设置端口映射等信息。
在跨越多级(๐•ᴗ•๐)由器的情况下,UPnP可能会受到一些限制:
双重NAT: 如果网络中存在多级(๐•ᴗ•๐)由器,可能会导致双重NAT(Network Address Translation),即在多个(๐•ᴗ•๐)由器上都进行了地址转换。UPnP在这种情况下可能会受到影响,因为设备可能无法正确地在多个层次的NAT中进行发现和通信。
UPnP中继: 有些(๐•ᴗ•๐)由器和设备可能支持UPnP中继,这允许UPnP消息在多个(๐•ᴗ•๐)由器之间传递。然而,并非所有设备和(๐•ᴗ•๐)由器都支持此功能,因此并不是所有的多级(๐•ᴗ•๐)由器环境都能够无缝支持UPnP。
总体而言,UPnP在简化本地网络配置方面非常有效,但在跨越多级(๐•ᴗ•๐)由器的复杂网络环境中,可能会遇到一些挑战。在这种情况下,可能需要手动配置端口映射或考虑其他解决方案来确保设备之间的通信。
还有个常见的协议 NAT-PMP, 它是这样的:
NAT-PMP(Network Address Translation Port Mapping Protocol)是一种网络协议,旨在允许局域网内的设备请求在NAT设备(例如(๐•ᴗ•๐)由器)上进行端口映射。它类似于UPnP(Universal Plug and Play)的端口映射功能,但有一些区别。
NAT-PMP 的特点包括:
轻量级: NAT-PMP是一种相对简单的协议,其设计目标是提供轻量级的端口映射功能。
单一端口: NAT-PMP通常只使用一个单一的端口(5351/UDP),用于与NAT设备进行通信。
不具备自动发现功能: 与UPnP不同,NAT-PMP本身不包含设备自动发现的功能。设备通常需要直接知道NAT设备的IP地址才能使用NAT-PMP。
UPnP 的特点包括:
多功能: UPnP包含一整(๐•ᴗ•๐)协议,不仅仅限于端口映射。它还涉及设备发现、控制、事件通知等多个方面。
使用多个端口: UPnP使用多个端口进行不同的功能,其中包括端口映射。
自动发现: UPnP具有设备自动发现的功能,设备可以自动找到和与网络中的其他设备通信。
区别和选择:
复杂性: UPnP相对复杂,因为它支持多个功能,而NAT-PMP则更为简单,仅专注于端口映射。
广泛支持: UPnP在许多设备和应用中得到广泛支持,而NAT-PMP的支持相对较少。
安全性: 由于UPnP功能的广泛性,有时候UPnP被认为在安全性方面存在一些风险。一些用户出于安全考虑可能选择使用NAT-PMP。
群晖上有个5357端口,是WS-Discovery服务,类似于这个. 群晖端口见这个(https://kb.synology.com/en-me/DSM/tutorial/What_network_ports_are_used_by_Synology_services
), 跟ssdp区别如下:
WS-Discovery(Web Services Dynamic Discovery)服务和 SSDP(Simple Service Discovery Protocol)都是用于服务发现的协议,但它们有一些区别。
WS-Discovery:
基于SOAP: WS-Discovery 使用SOAP(Simple (๐•ᴗ•๐)ject Access Protocol)协议进行通信。它是一种基于XML的协议,用于在Web服务之间进行信息交换。
更复杂的功能: WS-Discovery 提供了更复杂的功能,包括服务元数据的广告和查询、自定义消息类型以及更强大的发现和通信机制。它被设计为适用于更广泛的Web服务应用。
支持IPv6: WS-Discovery 在设计上考虑了IPv6,并支持在IPv6网络中进行服务发现。
SSDP:
基于UDP: SSDP 是基于UDP的协议,通常用于在本地网络中发现UPnP设备和服务。
简化的服务发现: SSDP 主要关注服务发现,但它的设计相对简单,适用于一些特定的场景,如UPnP设备的发现。
常用于UPnP: SSDP 在实际应用中常用于Universal Plug and Play(UPnP)架构,用于自动发现和配置设备。它主要针对在家庭网络中连接的设备。
总体而言,WS-Discovery 是一个更通用、功能更强大的服务发现协议,而SSDP 是一个相对简单、特定于UPnP的服务发现协议。 WS-Discovery 的设计更适用于各种Web服务应用,而SSDP 更专注于家庭网络环境中的设备和服务。
防火墙
linux防火墙的默认策略跟windows不一样,linux默认放行所有, tcp,udp. window是默认禁止udp传入,但是允许发出.如果使用tailscale,发现不能直连,可以看看这个. udp是无状态协议,为了保持状态,windows必须开启防火墙,我也拿不准这个, 我家里电脑内网,不是dmz,不开防火墙,外网可以用tailescale直连过来,公司电脑环境复杂,必须开防火墙才可以. linux防火墙的设置,可参考openwrt,有一条reject all,拒绝所有,再开放需要的端口和协议. 群晖防火墙的设置,我会另外转发一篇文章,以供参考.
一边情况下,bt不太适合开防火墙, 用于公网的bt协议端口是动态的. 但是用于pt的话,只需要开放监听端口就行,但也会带来性能的影响.
qBittorrent
- 关于qb的安全选项, 之前论坛有人讨论过,可以看下(https://invites.fun/d/20151)
- qb的wen ui是可以反代的, 为什么要这么做, 上雷池. 官方的反代配置建议(https://gith(๐•ᴗ•๐).com/qbittorrent/qBittorrent/wiki/NGINX-Reverse-Proxy-for-Web-UI)
- 黑IP相关,此类往往存在于公共bt中,pt可忽略. 见(https://www.bilibili.com/opus/886509991839662137)
(๐•ᴗ•๐) (๐•ᴗ•๐)
一个作者, 同气连枝, 明文保存, 可能存在的安全漏洞,
Cookie Cloud
配置个域名白名单吧, 你要所有站cookie被mp拖库么?
Cookie
cookie被盗是个热门话题啦, 有些人被盗后,想着赶紧改密码,或者找其他办法看看能不能补救. cookie这个不像passkey,重置后之前的会失效. 按照nexusphp的源码, 登出只是设置本地cookie的过期时间失效, 之前的cookie并不会失效. nexus php的cookie有两个关键字段 c_secure_id, c_secure_pass, 修改密码应该是个有效的办法. 不同站点的逻辑不一样,需要各自尝试下.
默认密码
qb用默认密码见此贴 https://www.invites.fun/d/20359/14
今天先说到这里,有想到的再补充,稍后会发下雷池的配置.
最后分享一些常用的工具
常用检测工具