声明:本人非网络安全专业和从业者,文章内容仅是在生产实践中总结出来的经验

我们现在有部分业务已经迁移至数据中心,有部分业务仍然在家中。

省流:如果有条件,尽可能把控制类的服务全部放在内网中,使用VPN进入内网进行访问。

鉴权

如果服务可以在公网中被访问,那么鉴权一定是非常重要的。例如RDP,SSH这类协议,一般来说RDP默认是用的账号密码进行身份验证,SSH使用密钥对也已经是常态了。但是还是免不了被爆破的问题,很早的时候,当时也不知道网络安全的概念,为了图方便,RDP服务和SSH直接暴露在公网上(已经改了端口),而且也是64位强密码。但是Windows事件查看器中仍然有非常多的爆破记录,甚至在不更改策略组的情况下,爆破次数过多可能会限制登录。尽管任何复杂的密码破解开只是时间问题,天天被这么爆破也不是个办法,看着是真的不舒服,感觉就像有人天天来砸家门一样不爽,搞不好还容易被抄家。

遭遇

就这样持续了很久,我和朋友组了一个大内网,然后朋友机房那边有充足的机器(没有公网),给我们开了一些服务器用(弱密码root账户,也是组在大内网的),当时我主要是在用家里云,没有怎么去光顾过那台机器,但是为了方便,我用自己的公网IP给它做了个SSH端口反向代理,结果国庆第二天就被爆破了塞了病毒和xmrig挖矿程序,我看到啥都没部署的服务器CPU满载时就已经感觉出事了。虽然上面没有任何东西,重装了系统也没其他损失,只是我们不知道的是,这个病毒顺着我们的组网爆破了内网一台Windows主机(机主和我们都没发现),然后朋友给我那台重装系统后又遭到了内网Windows主机的病毒感染,蠕虫病毒笑传之传传爆。后面我们把内网所有机器都排查了一遍,包括内网里面的NAT层层包,庆幸的是,我的家里云没有中招,因为密码(Windows用)和密钥(Linux服务器用)强度非常高,我们把有病毒的机器都噶掉了。感觉不能再这么把所有服务都暴露出去了,只需要暴露对公众开放的一些http服务即可。

VPN加密和隧道

要澄清一个很多人都有误解,VPN只是一个网络通信技术,相当于建隧道,并不是什么违法违规的的东西。通常在企业,学校等私有网络环境中使用(本文章不讨论跨境网络),便于在外部网络环境能够安全地访问私网中的资源。在咨询了一些同学和同事后,在23年我给HomeLab和我们的数据中心都添加了严格的网络访问控制。要控制和访问内网的设备或者服务,需要使用VPN+证书验证密钥交换连接后才可以,对外暴露的内容就只有常规的http服务,比如我的博客,公开资源站等等。如果要RPD或者SSH远控服务器均需要VPN进行连接。

搭建VPN的软件非常多,这里推荐几个我用过的

  • OpenVPN(可自建,便于配置)

  • WireGuard(集成在Linux内核中,使用UDP,可能某些运营商不友好)

  • mihomo核心(使用mihomo核心支持的协议,可以方便在科学上网工具中配置分流规则来代理特定网段的流量)

我个人用的是shadowsocks作为回家协议,因为它可以udp over tcp(解决运营商大手稀奇古怪的qos行为)

如果你使用socks5代理,正常情况下它不能代理udp流量,它的udp代理是先随机开一个端口然后告诉客户端走这个端口进行udp代理。当代理服务器位于一个NAT网络之后且未正确配置端口转发或DMZ,可能会导致udp不通的情况(建议还是封装到tcp)。

CDN和反向代理

在云厂商工作的朋友的赞助下,我给我们的http服务加上了全球加速CDN(Cloudflare也可以干这事,但是对大陆不友好)。显著减少了源站IP泄漏导致的一些安全隐患。有条件的朋友也可以套一层防护一下。

最后

这也是我到现在一直在用的网络防护措施,目前再也没遇到过爆破的问题,后续如果有一些新的变动也会继续更新文章,也欢迎各位网络安全领域的大佬们的建议。