VPN 边界的 Snort:数据包可见之处
VPN 终结与 HTTPS 解密是两道分离的边界;被动检测并不等于在线阻断。请在选型之前确定观测点。
跟踪来自远程笔记本的一个请求,它会穿过若干道边界,才轮到某个工具去看它。外层隧道在 VPN 进程处结束,内层数据包出现在某个接口上,而其中的 HTTPS 会话继续走向应用。检测工具只能看到数据包到达它那一点时可见的内容。没有先确定这一点就部署,日志描述的就是错误的层次。
一个数据包穿过若干边界
在 VPN 终结之前,观测者只看到一条外层连接,通常指向 VPN 端口,有地址和大小,却看不到内部结构。终结之后,内层地址、端口和协议在负责交付的那个处理点上才可用。应用自身的 TLS 仍然加密,除非另有一套设计将其终结。这是三个可见性层级,而产品包的名字并不会告诉你买到的是哪一层。
画出路径并标出边界,然后把传感器放在能够回答问题的位置上,因为位置本身就是答案的一部分。叫不出名字的边界,就是无法验证的边界。
看清每个点上能读到什么
在相信任何架构描述之前,先检查接口并做一次短捕获。
ip -br link
tcpdump -ni tun0 -c 10 'tcp port 443'链路列表显示存在哪些隧道和物理接口,而捕获精确显示接在那里的传感器会收到什么。如果它显示内层地址却没有 HTTP 请求行,说明你在 VPN 终结之后、仍在应用的 TLS 之外。那正是网络检测的正常位置,也是正文检查的错误位置。在外层接口上重做一次捕获,比较另一道边界暴露了什么。
被动检测无法自行阻断
Snort 的检测文档把被动观测与在线运行分开。被动模式可以就流量告警,却不会在该路径上把它拦下。
snort -T -c /etc/snort/snort.lua测试模式在不运行传感器的前提下校验配置,这是任何部署之前正确的第一步。在线运行需要配套的数据包获取方式和相应的执行配置,而不只是多一个开关。因此日志条目并不能证明请求被阻止,用看似在线的选项启动进程,也不能证明真正被转发的流量穿过了它。请确认实现究竟在哪一点交付数据包。
部署之前先选择执行模式
先判断需求是可见性还是阻断,因为两者的失效行为不同。被动传感器失效时流量继续流动,留下监控空档;在线设备失效时既可以放行也可以阻断,这个选择必须是有意为之。就一条允许的流量、一条必须拒绝的流量,以及传感器失效时想要的行为达成一致。把管理恢复通道与受检路径分开,这样传感器里的失误不会连你的访问权限一起拿走。
然后记录可见的流量、处理点和执行行为。描述部署实际行为的,是这三件事,而不是装上的那个产品包。