V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
61162833
V2EX  ›  宽带症候群

如何实现系统不能联网,但是系统上的应用可以联网?

  •  
  •   61162833 · 144 天前 · 6553 次点击
    这是一个创建于 144 天前的主题,其中的信息可能已经有所发展或是发生改变。
    针对以下系统:
    1 、Windows
    2 、Android
    3 、MacOS
    4 、iOS
    5 、各种 linux desktop

    如何实现系统无联网权限,但是系统上的应用(例如 docker )有联网权限?

    (测试过 Windows10 系统的防火墙,只对特定应用开启联网权限,但是 windows 更新的域名即使加入其防火墙也不生效,系统仍然有联网权限...)
    53 条回复    2024-07-09 08:55:27 +08:00
    enihcam
        1
    enihcam  
       144 天前   ❤️ 12
    听起来大概就是给一个杯子倒水,但杯子不能沾水。
    xjzshttps
        2
    xjzshttps  
       144 天前   ❤️ 1
    将默认网关、dns 设置为错误的等方式阻止整个系统联网,然后针对个别应用开类似翻墙软件提供网络。
    zeyexe
        3
    zeyexe  
       144 天前
    那就只能在系统外干这事了,让防火墙只放行应用的域名和端口
    61162833
        4
    61162833  
    OP
       144 天前
    @zeyexe 在路由器上操作的问题是无法判断流量来自系统还是应用
    zeyexe
        5
    zeyexe  
       144 天前
    不知道你的具体情况。难道你的系统(应用)会和要联网的应用使用相同的域名?
    yinmin
        6
    yinmin  
       144 天前 via iPhone   ❤️ 1
    在局域网上设置一个代理服务器(低至几十元的硬件成本),linux 可以采用主机网卡不设 gateway 保证整机无法上网,单个应用配置 socks5 代理(如果应用没有代理配置,可以使用环境变量或 proxychains )

    windows 也可以采取类似方式,例如:proxifier
    yinmin
        7
    yinmin  
       144 天前 via iPhone   ❤️ 1
    如果是 docker 就更简单了,linux 不设 gateway ,docker 创建一个 bridge 网络指定 gateway ,容器使用这个网络就能上网了
    xenme
        8
    xenme  
       144 天前 via iPhone   ❤️ 1
    网卡直通给 vm ,然后业务跑 vm 里面,底层不要网卡,或者只能通内网的网卡
    Kinnice
        9
    Kinnice  
       144 天前 via Android   ❤️ 1
    1. 在外部防火墙阻止所有流量
    2. 外部新增一个代理服务器,且在外部防火墙只放行这个代理服务器 ip 地址
    3. 给你的应用配置代理,如果应用没这个功能就需要借助类似 proxifier 的软件
    Zaden
        10
    Zaden  
       144 天前 via Android   ❤️ 1
    61162833
        11
    61162833  
    OP
       144 天前
    @Zaden 通过端口而非域名的方式屏蔽真是妙啊老哥
    IvanLi127
        12
    IvanLi127  
       144 天前
    看起来只要操作系统无法驱动通信设备,但是应用能驱动就行了。重新做一套不通用的网卡,走其他通用协议让应用能识别,然后应用直接驱动就好了。系统不认识想用也不会用。
    0o0O0o0O0o
        13
    0o0O0o0O0o  
       144 天前
    考虑到这么多平台,加上联网这个词的范围很广,其实这个需求一点也不简单,哪怕是在 Linux 上。建议理清自己的真实需求。
    icepie
        14
    icepie  
       144 天前
    其实很简单, 走个不存在的代理就好了
    icepie
        15
    icepie  
       144 天前
    好吧 是系统不能上网, 那就复杂了
    wushenlun
        16
    wushenlun  
       144 天前
    系统联网无非就是上报数据/更新,抓包吧 ,开个空白系统,挂机在那抓包 1 整天,抓到的外网 IP 全封了,极端点就/24 全封了
    adrianzhang
        17
    adrianzhang  
       144 天前   ❤️ 1
    系统外面设置防火墙,拦截所有,只放行通往局域网装了代理的机器的流量,而这个装了代理的机器不设置 ip 转发,然后系统特定应用使用 proxychains 代理到代理机器特定端口
    adrianzhang
        18
    adrianzhang  
       144 天前   ❤️ 1
    @adrianzhang 发现需求还要管理手机端,那么方案改改。
    单独一个防火墙,可以硬件可以虚拟,固定 ip ,局域网所有设备的网关统一设置成防火墙地址,防火墙放行对代理机器 ip 的流量,其他全禁止,代理机器不设置 ip 转发,仅有通过端口的 socks 代理,然后设备上需要联网的应用走这个 socks 代理,手机上有小火箭等应用可以设置分应用代理。
    bigShrimp8577
        19
    bigShrimp8577  
       144 天前
    本来我以为是希望鸡下蛋,又不希望有鸡存在的题目,结果评论区让我涨姿势了
    youdoit
        20
    youdoit  
       144 天前
    买一台行为管理设备吧
    yohole
        21
    yohole  
       144 天前   ❤️ 2
    感觉这里面隐藏了某个具体的需求,直接说清楚的话,可能会有更简单的方案
    zzznow
        22
    zzznow  
       144 天前
    把相关域名加 hosts 呢?
    adoal
        23
    adoal  
       144 天前
    如何从技术层面区分属于“系统”的组件程序 vs 自己安装的第三方应用程序?
    y1y1
        24
    y1y1  
       144 天前 via iPhone
    网络出口设置防火墙规则
    EndlessMemory
        25
    EndlessMemory  
       144 天前
    魔改系统吧
    Altairvelvet
        26
    Altairvelvet  
       144 天前
    刁民
    busier
        27
    busier  
       144 天前 via iPhone   ❤️ 1
    这活我经常干
    系统网卡 ipv4/v6 不配置网关,不配置 DNS
    软路由上开 socks5 代理,需要上网的应用设置走此代理
    最好不要设置系统级代理,因为很多软件能感知这个设置
    docx
        28
    docx  
       144 天前 via iPhone
    内网跳板机,然后单独配置应用走代理?需求有点刁难了,最好说清具体想要实现的是什么。
    songge
        29
    songge  
       144 天前
    策略组 应该可以吧
    shijingshijing
        30
    shijingshijing  
       144 天前
    楼主所说的系统不能联网确切的讲应该是(系统级应用程序)不能联网,自己指定的应用程序能联网。

    操作系统不能联网想啥呢,所有的应用程序都是使用网络 API ,通过调用的 system call ,走网络协议栈,通过驱动调用网卡硬件进行网络通信的。

    Windows 更新如果微软狠一点,直接做进内核里,你通过本机 Windows 系统是没办法做任何限制的。只能通过路由器进行网络访问权限管理。
    laminux29
        31
    laminux29  
       144 天前   ❤️ 1
    这是很基础且很常见的网工场景,典型的例子是虚拟化集群系统,实现方式是服务器多网口 + 每个网口不同网段 + 每个网口不同 vlan 或 vxlan 。有时候甚至厂家的部署工程师,为了不干扰用户私有网段,会给虚拟化系统的内部的业务配置 1.1.1.x 这样的网段。
    huihuilang
        32
    huihuilang  
       144 天前 via Android
    用防火墙吧。。。把特定 ip 开白名单
    0o0O0o0O0o
        33
    0o0O0o0O0o  
       144 天前 via iPhone
    @laminux29 #31 OP 的粒度是**各操作系统**具体的进程,不是某个 container ,甚至可能只有一个操作系统用户,我觉得这既不基础也不常见。我赞同 #30 ,我认为这几十层里所有方案都达不到这个需求,除非 OP 提出真正的需求并加以限制
    jackOff
        34
    jackOff  
       144 天前
    网关设备写一个流量劫持中转服务,只有白名单流量才会通过,其他全部阻塞掉
    supereater
        35
    supereater  
       144 天前
    先全局禁止,然后放行需要的应用吧
    nuk
        36
    nuk  
       144 天前
    想到的几种办法:
    1. 用防火墙,不给系统默认网关,然后利用防火墙来丢到正确的网关
    2. hook socket 调用,给 udp 和 tcp 加一个 cookieid ,只有识别到 id 才放行,个人感觉这个会比较通用,但需要网关处理报文
    3. 设置 socks 代理,只有支持 socks 的应用会比较好用
    morpheuszero2023
        37
    morpheuszero2023  
       144 天前
    只是禁用 Windows 自动更新的话可以用组策略,调两个设置即可,别的啥都不用动。
    ClericPy
        38
    ClericPy  
       144 天前
    我这边 20 多个机器禁止联网,所以开了个低配置有公网权限的当网关代理转发的。。。
    Kenshiro
        39
    Kenshiro  
       144 天前
    Windows 用 SimpleWall ,iOS 等等的要么自建 DNS ( NEXTDNS 等等)或路由器挡。DNS 那步我成了,但国内这智障网络默认是挡的自建 DNS ,所以最好全局
    Routeros
        40
    Routeros  
       144 天前
    这天聊的就扯淡。传输层还是会交给系统来处理的。
    luojiyin87
        41
    luojiyin87  
       143 天前
    要靠独立的防火墙和自建 dns 服务器了,规则要一条条建。 操作系统要虚拟化。 这是要做密保?
    zhangdawei
        42
    zhangdawei  
       143 天前
    Windows 的化,可以走一条 usb 驱动,自建 tcp 协议,单独应用装载驱动
    test0x01
        43
    test0x01  
       143 天前 via Android
    局域网不允许上网 只有使用特定代理才可以上网
    yulihao
        44
    yulihao  
       143 天前
    走代理不就好了
    vueli
        45
    vueli  
       143 天前
    网关直接白名单通行
    huangya
        46
    huangya  
       143 天前
    @laminux29 好奇问一下,如果用 1.1.1.x 这样的网段,是不是这些机器不连接互联网?因为理论上 1.1.1.x 是公网吧?这样会与公网冲突。
    YGBlvcAK
        47
    YGBlvcAK  
       143 天前
    你这么多系统都要实现这个功能,肯定不能在系统上想办法,只能系统外,也不是所有的应用都支持代理模式,所以唯一的答案可能就是防火墙+白名单模式了

    防火墙只开放特定的域名和 ip ,麻烦的点是可能要手动抓取一些应用的域名和 ip
    zbatman
        48
    zbatman  
       143 天前
    建议描述下原始需求
    bobryjosin
        49
    bobryjosin  
       143 天前
    @huangya 内部互联无所谓,只要不访问对应 ip 段的公网服务就没事,我见过有些地方电信拿 1.1.1.1 做内部 ip 的,你看出过什么大事吗?其实没有,也就我们这种要访问 cloudflare 的会骂一嘴。
    Mystery0
        50
    Mystery0  
       143 天前
    怼到光猫上让 docker 容器来拨号?
    freddyzeng
        51
    freddyzeng  
       143 天前 via iPhone
    我现在就是这样的。
    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 代理。


    再说一下,为啥我会有这种需求呢?
    有些东西不想泄漏,所以担心开源的工具有漏洞,如果它是完全局域网来使用,就比较安全了。
    freddyzeng
        52
    freddyzeng  
       143 天前 via iPhone
    意思就是,你可以给 docker 配置一个局域网代理来让 docker 上网。但是你的实体主机不要设置网关,但是需要手动给他设置一个 ip ,使用 ip 转发 http 到其它能上网的主机。而自身又没有默认网关。


    如果熟悉 iptables 的话,真的可以设置权,拦截,然后来源是某个程序的流量就当行。类似 v2ray 透明那样的处理。不过是按自己的逻辑修改的才行。应该也是可以的。但是对于安全和简单处理的话,还是设置 http 代理比较好。如果程序无法设置代理,那只能使用 iptables 标记某个程序发出流量,再在 op 网关那里拦截没有标记的流量包。思路应该是这样
    tairan2006
        53
    tairan2006  
       142 天前
    iptable 无所不能
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1082 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 20:18 · PVG 04:18 · LAX 12:18 · JFK 15:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.