V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
xiaoz
V2EX  ›  Linux

请教下怎样控制 Linux 的出口访问,只允许 Linux 访问指定域名?

  •  
  •   xiaoz ·
    helloxz · 2020-03-25 21:03:18 +08:00 · 5633 次点击
    这是一个创建于 1730 天前的主题,其中的信息可能已经有所发展或是发生改变。

    iptables 可以控制出口流量,但是只能针对 IP 进行限制,无法针对域名。


    需求是这样的,限制了整个公网出口,只允许服务器去请求特定的一些域名,比如只允许请求百度,百度全国 CDN,拥有很多节点 IP,并且这些 IP 可能还会变化,因此将百度的 IP 全部加入 iptables 也不太现实,这里我也无法去收集到这些域名的 IP 或 IP 段,请问还有其它办法控制 Linux 的出口域名白名单吗?

    PS:这些域名可能启用了 CDN,CDN 的 IP 可能会不断的变化中。

    16 条回复    2024-12-03 17:58:25 +08:00
    wdlth
        1
    wdlth  
       2020-03-25 21:10:47 +08:00   ❤️ 1
    可以自己建个 DNS
    zst
        2
    zst  
       2020-03-25 21:16:09 +08:00   ❤️ 1
    可以直接用 string 匹配域名吧
    wolonggl
        3
    wolonggl  
       2020-03-25 21:19:04 +08:00   ❤️ 2
    dnsmasq+ipset
    xiaoz
        4
    xiaoz  
    OP
       2020-03-25 21:43:01 +08:00
    @zst #2,感谢,我去看看 iptables 的 string 匹配。
    fengtons
        5
    fengtons  
       2020-03-25 21:45:47 +08:00 via Android   ❤️ 1
    最高效的应该是 3 楼说,参考一下各种翻墙教程
    2exploring
        6
    2exploring  
       2020-03-25 21:51:52 +08:00   ❤️ 1
    v2ray + 透明网关 应该也可
    jinliming2
        7
    jinliming2  
       2020-03-26 01:17:05 +08:00 via iPhone   ❤️ 1
    应该可以通过 HTTP header 中的 host 、HTTPS TLS 中的 SNI 来匹配访问的网站吧……
    v2ray 好像可以?然后用 iptables 的 redirect ?
    jim9606
        8
    jim9606  
       2020-03-26 05:24:39 +08:00   ❤️ 1
    通常的做法是全部流量都使用 HTTP Proxy,缺点就是只能支持 TCP 了。
    这种用户层的方法可以通过劫持 libc 实现,proxychains 用了这个方法,不过只适用于动态链接 libc 的程序

    dnsmasq+ipset 有些时候会有漏网之鱼,例如如果 a.comb.com 都 host 在同一个 CDN 主机 h.cdn.com 上,如果程序查询完白名单站点 a.com 的 DNS 后向 h.cdn.com 的 IP 发送 Host 为 b.com 的 HTTP(S)请求就会被放行
    west5211
        9
    west5211  
       2020-03-26 08:34:45 +08:00   ❤️ 1
    3 楼+1
    qakito
        10
    qakito  
       2020-03-26 08:41:11 +08:00   ❤️ 2
    一种做法:
    LAN 口针对 UDP dport=53 的报文做 redirect 到本地,本地的 DNS server 就可以对黑名单里的域名进行干预(例如返回 No such domain)
    缺点是:
    如果本地通过 hosts 文件提前解析,你无能为力
    microlz
        11
    microlz  
       2020-03-26 09:16:04 +08:00   ❤️ 1
    可以不设置 dns 服务器 然后通过 hosts 解析
    araraloren
        12
    araraloren  
       2020-03-26 10:30:23 +08:00
    DNS 污染??(小声 (逃
    tomychen
        13
    tomychen  
       2020-03-26 14:22:59 +08:00
    10# +1
    iptables + L7 补丁,也可以做到协议 filter
    tvirus
        14
    tvirus  
       2020-03-27 17:19:53 +08:00
    用 adguard home 里 DNS 封锁试一试
    AQIVK1E0IV
        15
    AQIVK1E0IV  
       16 天前
    现在也有相同的需求,想问大佬最后是怎么解决的?
    xiaoz
        16
    xiaoz  
    OP
       16 天前 via Android
    @AQIVK1E0IV 没找到比较好的方案,我都记不得当时为啥有这个需求了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5003 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 05:43 · PVG 13:43 · LAX 21:43 · JFK 00:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.