在这个流氓软件、病毒软件横行的当下,为了降低被非法控制及横向扩张的风险,我把家庭数据中心的服务器实行了白名单联网机制。包括个别家用办公笔记本电脑,尤其是搭载windows系统的办公电脑。默认不给联网,需要啥开啥。
需求分析 最大的联网需求为浏览器,这个我放的比较开,通过出口网关的代理服务联网,可以应对一般大多数不够骚气的木马病毒,平时多注意防范钓鱼,风险也还好。 其次就是按照域名白名单放行,比如企微邮箱告警、网易云音乐等,需要对指定域名给予放行。 这个基于dnsmasq联动防火墙完成。 还有就是按照IP进行放行,比如我需要直连我的一台VPS的ssh管理端口。这个直接基于防火墙实现。
实战落地 为了最大便利化操作,我尽可能将操作移到OpenWRT的图形界面。 代理端口 这个不用展开说,用某知名代理软件跑一个 HTTP 代理服务即可,建议加一个基本认证,浏览器插件都支持。 域名白名单实现 以放行企微邮箱发件为例,放行smtp.exmail.qq.com IP白名单实现 新建两个ipsets集合 smtp_src_list 和 smtp_dst_list,给有企微告警需求的IP添加至 smtp_src_list ,smtp_dst_list 留空即可,它会由 dnsmasq 动态解析域名的IP后添加。
指定一个扩展主机解析配置文件,我这里是 /etc/vnet/dnsmasq/conf.d/pac.conf
将如下规则添加至配置文件 /etc/vnet/dnsmasq/conf.d/pac.conf 里。 nftset=/smtp.exmail.qq.com/4#inet#fw4#smtp_dst_list
然后对如上两个清单配置防火墙即可,由于OpenWRT提供的UI无法支持添加源目的同时引用一个ipset集合,只能用命令行来完成,新建一个文件 /etc/vnet/fw4.nft #!/usr/sbin/nft -ftable inet fw4 { chain srcnat { ip saddr @smtp_src_list ip daddr @smtp_dst_list jump handle_ext0 } chain handle_ext0 { meta nfproto ipv4 masquerade comment "!fw4: Masquerade ext0_list to wan traffic" }}
在开机自启脚本 /etc/rc.local 里添加如下内容 /usr/sbin/nft -f /etc/vnet/fw4.nft
IP白名单实现 这个相对比较容易实现,以我曾经的一个VPS举例,本地堡垒机10.32.0.3访问广州VPS 159.75.107.106 的 22 端口给予放行。直接创建SNAT规则即可实现。
详细配置如下。
还有一个特殊场景需要提及,那就是家庭WiFi内部接入区的设备默认准许联网,主要是为了便利,谈不上严格限制,因为压根不现实,尤其是手机,你即使给手机做了严格的白名单限制,但它绝大多数时候是在使用流量联网,还不是给恶意软件出网可乘之机,所以这块的管控重点约束下PC机器,尤其是Win系统的PC,在默认做好伪装联网的基础之上,做下传输规则即可。 新建一个ipsets集合 whitelist_home_wifi_mac,添加好要应用的PC物理地址。咱们基于MAC来做。这个清单专门标识需要被重点限制联网PC。
还需要一个MAC清单,用于标识内部接入区准许联网的清单,这个清单包含所有接入的设备,注意,这其中还包括 whitelist_home_wifi_mac的MAC地址。
如上传输规则已经给的很详尽了,注意顺序,我们默认给内部联网整个网段给禁网,仅限home_wifi_mac_list里的设备出网,同时开放访问网关代理的端口权限,然后在此基础上限制指定设备不联网,仅能通过代理端口联网,如果对这类特定PC开启白名单联网,同样可以参考前边的实现方式,这里就不多赘述。
小结 可能有人会觉得很复杂,但白名单的限定往往都是固定的少部分站点,可确定性较高,在配置上的复杂还算比较能够接受,对于是否限定到端口级别,根据自己的需求来定,可适当放宽。做好这些严格限定后,相信你的内网环境在抵御恶意程序的道路上又前进了一大步。
|