针对以下系统:1 、Windows2 、Android3 、MacOS4 、iOS5 、各种 linux desktop如何实现系统无联网权限,但是系统上的应用(例如 docker )有联网权限?(测试过 Windows10 系统的防火墙,只对特定应用开启联网权限,但是 windows 更新的域名即使加入其防火墙也不生效,系统仍然有联网权限...)

听起来大概就是给一个杯子倒水,但杯子不能沾水。

将默认网关、dns 设置为错误的等方式阻止整个系统联网,然后针对个别应用开类似翻墙软件提供网络。

那就只能在系统外干这事了,让防火墙只放行应用的域名和端口

在路由器上操作的问题是无法判断流量来自系统还是应用

不知道你的具体情况。难道你的系统(应用)会和要联网的应用使用相同的域名?

在局域网上设置一个代理服务器(低至几十元的硬件成本),linux 可以采用主机网卡不设 gateway 保证整机无法上网,单个应用配置 socks5 代理(如果应用没有代理配置,可以使用环境变量或 proxychains )windows 也可以采取类似方式,例如:proxifier

如果是 docker 就更简单了,linux 不设 gateway ,docker 创建一个 bridge 网络指定 gateway ,容器使用这个网络就能上网了

网卡直通给 vm ,然后业务跑 vm 里面,底层不要网卡,或者只能通内网的网卡

  1. 在外部防火墙阻止所有流量2. 外部新增一个代理服务器,且在外部防火墙只放行这个代理服务器 ip 地址3. 给你的应用配置代理,如果应用没这个功能就需要借助类似 proxifier 的软件

禁止更新 www.hesudu.com/t/1055147

通过端口而非域名的方式屏蔽真是妙啊老哥

看起来只要操作系统无法驱动通信设备,但是应用能驱动就行了。重新做一套不通用的网卡,走其他通用协议让应用能识别,然后应用直接驱动就好了。系统不认识想用也不会用。

考虑到这么多平台,加上联网这个词的范围很广,其实这个需求一点也不简单,哪怕是在 Linux 上。建议理清自己的真实需求。

其实很简单, 走个不存在的代理就好了

好吧 是系统不能上网, 那就复杂了

系统联网无非就是上报数据/更新,抓包吧 ,开个空白系统,挂机在那抓包 1 整天,抓到的外网 IP 全封了,极端点就/24 全封了

系统外面设置防火墙,拦截所有,只放行通往局域网装了代理的机器的流量,而这个装了代理的机器不设置 ip 转发,然后系统特定应用使用 proxychains 代理到代理机器特定端口

发现需求还要管理手机端,那么方案改改。单独一个防火墙,可以硬件可以虚拟,固定 ip ,局域网所有设备的网关统一设置成防火墙地址,防火墙放行对代理机器 ip 的流量,其他全禁止,代理机器不设置 ip 转发,仅有通过端口的 socks 代理,然后设备上需要联网的应用走这个 socks 代理,手机上有小火箭等应用可以设置分应用代理。

本来我以为是希望鸡下蛋,又不希望有鸡存在的题目,结果评论区让我涨姿势了

买一台行为管理设备吧

感觉这里面隐藏了某个具体的需求,直接说清楚的话,可能会有更简单的方案

把相关域名加 hosts 呢?

如何从技术层面区分属于“系统”的组件程序 vs 自己安装的第三方应用程序?

网络出口设置防火墙规则

魔改系统吧

刁民

这活我经常干系统网卡 ipv4/v6 不配置网关,不配置 DNS软路由上开 socks5 代理,需要上网的应用设置走此代理最好不要设置系统级代理,因为很多软件能感知这个设置

内网跳板机,然后单独配置应用走代理?需求有点刁难了,最好说清具体想要实现的是什么。

策略组 应该可以吧

楼主所说的系统不能联网确切的讲应该是(系统级应用程序)不能联网,自己指定的应用程序能联网。操作系统不能联网想啥呢,所有的应用程序都是使用网络 API ,通过调用的 system call ,走网络协议栈,通过驱动调用网卡硬件进行网络通信的。Windows 更新如果微软狠一点,直接做进内核里,你通过本机 Windows 系统是没办法做任何限制的。只能通过路由器进行网络访问权限管理。

这是很基础且很常见的网工场景,典型的例子是虚拟化集群系统,实现方式是服务器多网口 + 每个网口不同网段 + 每个网口不同 vlan 或 vxlan 。有时候甚至厂家的部署工程师,为了不干扰用户私有网段,会给虚拟化系统的内部的业务配置 1.1.1.x 这样的网段。

用防火墙吧。。。把特定 ip 开白名单

#31 OP 的粒度是各操作系统具体的进程,不是某个 container ,甚至可能只有一个操作系统用户,我觉得这既不基础也不常见。我赞同 #30 ,我认为这几十层里所有方案都达不到这个需求,除非 OP 提出真正的需求并加以限制

网关设备写一个流量劫持中转服务,只有白名单流量才会通过,其他全部阻塞掉

先全局禁止,然后放行需要的应用吧

想到的几种办法:1. 用防火墙,不给系统默认网关,然后利用防火墙来丢到正确的网关2. hook socket 调用,给 udp 和 tcp 加一个 cookieid ,只有识别到 id 才放行,个人感觉这个会比较通用,但需要网关处理报文3. 设置 socks 代理,只有支持 socks 的应用会比较好用

只是禁用 Windows 自动更新的话可以用组策略,调两个设置即可,别的啥都不用动。

我这边 20 多个机器禁止联网,所以开了个低配置有公网权限的当网关代理转发的。。。

Windows 用 SimpleWall ,iOS 等等的要么自建 DNS ( NEXTDNS 等等)或路由器挡。DNS 那步我成了,但国内这智障网络默认是挡的自建 DNS ,所以最好全局

这天聊的就扯淡。传输层还是会交给系统来处理的。

要靠独立的防火墙和自建 dns 服务器了,规则要一条条建。 操作系统要虚拟化。 这是要做密保?

Windows 的化,可以走一条 usb 驱动,自建 tcp 协议,单独应用装载驱动

局域网不允许上网 只有使用特定代理才可以上网

走代理不就好了

网关直接白名单通行

好奇问一下,如果用 1.1.1.x 这样的网段,是不是这些机器不连接互联网?因为理论上 1.1.1.x 是公网吧?这样会与公网冲突。

你这么多系统都要实现这个功能,肯定不能在系统上想办法,只能系统外,也不是所有的应用都支持代理模式,所以唯一的答案可能就是防火墙+白名单模式了防火墙只开放特定的域名和 ip ,麻烦的点是可能要手动抓取一些应用的域名和 ip

建议描述下原始需求

内部互联无所谓,只要不访问对应 ip 段的公网服务就没事,我见过有些地方电信拿 1.1.1.1 做内部 ip 的,你看出过什么大事吗?其实没有,也就我们这种要访问 cloudflare 的会骂一嘴。

怼到光猫上让 docker 容器来拨号?

我现在就是这样的。a:需要处理为系统不能上网,但是可以上外网的电脑,a 的 IP 为 192.168.110.2 ,网关设置为空。b:一台能上网的电脑,b 的 ip 为 192.168.110.3 ,b 的网关为 192.168.110.1 。然后具体需要上网的程序,需要配置 http 代理指向电脑 b ,如果你的 b 电脑是 win 可以开个 v2rayNG ,提供局域网的 http 代理。电脑 b 其实可以是使用 op 的 passwall 提供的 http 代理。再说一下,为啥我会有这种需求呢?有些东西不想泄漏,所以担心开源的工具有漏洞,如果它是完全局域网来使用,就比较安全了。

意思就是,你可以给 docker 配置一个局域网代理来让 docker 上网。但是你的实体主机不要设置网关,但是需要手动给他设置一个 ip ,使用 ip 转发 http 到其它能上网的主机。而自身又没有默认网关。如果熟悉 iptables 的话,真的可以设置权,拦截,然后来源是某个程序的流量就当行。类似 v2ray 透明那样的处理。不过是按自己的逻辑修改的才行。应该也是可以的。但是对于安全和简单处理的话,还是设置 http 代理比较好。如果程序无法设置代理,那只能使用 iptables 标记某个程序发出流量,再在 op 网关那里拦截没有标记的流量包。思路应该是这样

iptable 无所不能