我试图找到一种方法来做一个基于通配符的HTTPS流量白名单,但我最终只得到基于透明代理设置的HTTP连接的结果。代理不适用于HTTPS连接,我找不到任何有关如何管理做我需要做的事情的相关来源。防火墙地址列表只适用于可以直接解析的特定主机,而我需要允许通配符域符合规范。因此,下面是我对如何在完全支持通配符匹配的情况下仅将特定HTTPS主机列入白名单的看法。
优点:
- 对HTTPS的实际通配符匹配支持
- 对于已建立的连接来说,不应该过于耗费资源吗
- 从最终用户的角度来看,确实做了需要的事情(除了白名单之外的所有事情都被阻止了)
- 它不能防止目标数据泄露,因为必须让一些数据包通过以促进SNI匹配(这一点可能会更好)。
- 有点黑,可能很难让你理解。我已经警告过你了。
请提供任何关于如何使这更好和更安全的想法。
代码:选择所有
/ip firewall filter add action=drop chain=forward comment=" drop invalid connections" connection-state=invalid protocol=tcp add action=accept chain=forward comment=" accept Established & related connections but HTTPS" connection-state= Established,related packet-mark=no-mark add action=accept chain=forward comment="允许已建立的被FW标记为良好的HTTPS连接" connection-state= Established,related packet-mark= Allow - HTTPS add action=jump chain=forward comment="Catch标记为HTTPS的数据包对于SNI检查“跳转-目标=forward-https数据包标记=https添加动作=拒绝链=转发评论=“重置不允许的https连接”数据包标记=bad-https协议=tcp拒绝-with=tcp- Reset #以下是允许的tls主机列表添加动作=add-dst-to-address-list地址列表=允许-https地址列表-timeout=5s链=forward-https评论=“允许谷歌”协议=tcp tls-host=*.google.com添加动作=add-dst-to-address-list地址列表=允许-https地址列表-timeout=5s链=forward-https评论="允许谷歌"协议=tcp tls-host=*.googleusercontent.com add action=add- st-to-address-list address-list= Allow -https地址列表地址列表= Allow -https地址列表超时=5s chain=forward-https评论="允许谷歌"协议=tcp tls-host=*.gstatic.com #我们将不得不允许其余的数据包通过这个阶段从这个匹配链添加动作=接受链=forward-https端口=443协议=tcp /ip防火墙mangle添加动作=标记连接链=prerouting评论="标记检查&st-address-list=allow-https st-port=443 new-connection-mark=allow-https passthrough=yes protocol=tcp add action= Mark -packet chain= allow-https passthrough=no #接下来我们匹配新的HTTPS连接并标记在forward-https链中尚未被匹配器清除的数据包添加action= Mark -connection chain=prerouting comment=“标记HTTPS”connection-state=new dst-port=443 new-connection- Mark =https protocol=tcp add action= Mark -packet chain=prerouting comment="根据连接标记标记https数据包,每个连接只允许少量通过" connection- Mark =https dst-limit=1/1m,6,addresses-and-dst-port/1m new-packet- Mark =https passthrough=no #其余的https流量必须被标记为恶意,不得通过。连接将被fw filter中的规则重置。add action= Mark -connection chain=prerouting comment="在几个数据包通过后标记HTTPS连接为坏,如果它没有被之前的规则标记为好" st-port=443 log=yes log-prefix= bad- HTTPS \ new-connection-mark=bad- HTTPS协议=tcp add action= Mark -packet chain=prerouting comment="通过bad- HTTPS连接标记标记HTTPS数据包为坏" connection- Mark =bad- HTTPS new-packet-mark=bad- HTTPS passthrough=no
所以在那里。其基本思想是这样的:
- 匹配所有新的HTTPS连接并标记该连接
- 标记属于特定连接的数据包,直到达到限制
- 在过滤器中为所需的tls-hosts匹配那些标记的数据包
- 将匹配到的tls-hosts的IP地址加入地址列表
- 使用地址列表用表示连接良好的标记来覆盖之前的连接标记
- 标记良好连接的数据包
- 允许良好的数据包通过已建立的连接
- 没有被tls-host过滤器标记的连接将达到数据包计数限制并通过规则
- 下一个规则是将连接标记为不良https连接
- 根据连接标记标记数据包
- 根据包标记重置过滤器上的连接
我希望这能帮助到一些人,并且我没有忘记粘贴任何相关的线条。
~ Jassu