V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dangyuluo
V2EX  ›  程序员

有没有办法通过 UFW 优雅地屏蔽所有来自中国的访问?

  •  
  •   dangyuluo · 2017-08-04 05:22:24 +08:00 · 7817 次点击
    这是一个创建于 2672 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近有一台北京的 Ubuntu 服务器,提供了某种服务,目标对象是国外用户,因此想屏蔽掉所有国内的访问。

    我目前的方法是:

    wget http://www.ipdeny.com/ipblocks/data/countries/cn.zone
    while read line; do sudo ufw deny from $line to any port 1984; done < cn.zone
    

    但是这样得话就有 7000+的 UFW 规则,我个人有种感觉就是会大大拖慢其余正常请求的速度(如 80 ),毕竟会对者 7000 条逐条匹配。iptables 同理。(也可能不影响效率,是我臆想出来的)

    不知道有没有更优雅的办法呢?谢谢大家。

    35 条回复    2017-08-05 12:52:59 +08:00
    stabc
        1
    stabc  
       2017-08-04 05:26:42 +08:00
    IP ZONE 入库到本地?
    dangyuluo
        2
    dangyuluo  
    OP
       2017-08-04 05:46:27 +08:00
    @stabc 能否详解一下?谢谢。
    lydasia
        3
    lydasia  
       2017-08-04 06:02:23 +08:00
    7000 还好吧,不过你可以了解下 ipset。
    fox0001
        4
    fox0001  
       2017-08-04 06:27:50 +08:00 via Android
    我们公司也有类似的需求,就是把中国 IP 段,都该为二进制数,放到内存,然后逐一对比。不过仅限于 IPv4
    fox0001
        5
    fox0001  
       2017-08-04 06:30:12 +08:00 via Android
    对了,除非你们有另一台国外服务器可以远程过去,否则,要留一个后门(不过滤自己的 IP )用于登录维护
    WildCat
        6
    WildCat  
       2017-08-04 06:37:47 +08:00 via iPhone   ❤️ 1
    haproxy ?
    Counter
        7
    Counter  
       2017-08-04 06:43:48 +08:00 via iPhone
    @WildCat 放个名词在这里是想干嘛??讲详细点啦
    QAPTEAWH
        8
    QAPTEAWH  
       2017-08-04 08:04:19 +08:00 via iPhone
    主页放敏感词等 q 认证..
    lydasia
        9
    lydasia  
       2017-08-04 08:07:08 +08:00 via iPhone
    @QAPTEAWH 思路清奇。。
    breeswish
        10
    breeswish  
       2017-08-04 08:13:13 +08:00
    ufw 底层是 iptables。然后楼主需要加强算法和数据结构知识,比如防火墙的高效实现这种问题是面向本科生的校招题目: https://www.zhihu.com/question/42700825
    nfroot
        11
    nfroot  
       2017-08-04 08:15:12 +08:00
    用三级域名模拟敏感词

    比如 xxx.com 被关键词和谐了(现在有不少被和谐了域名关键词的)
    你就取名 xxx.com.v2ex.com (如果 v2ex.com 是你的域名)

    这样墙就会帮你阻挡。
    terence4444
        12
    terence4444  
       2017-08-04 08:15:18 +08:00 via iPhone
    你愿不愿意被 Q ?在每个页面的 meta 里塞几个敏感词即可
    49gd
        13
    49gd  
       2017-08-04 08:15:54 +08:00
    北京的服务器 国外访问效果如何
    goodniuniu
        14
    goodniuniu  
       2017-08-04 08:23:02 +08:00
    能让网络层面做?路由不可达。
    d847198075
        15
    d847198075  
       2017-08-04 08:23:55 +08:00 via Android
    @terence4444 lz 说了,服务器在北京,怎么被墙?٩(๑`^´๑)۶
    dangyuluo
        16
    dangyuluo  
    OP
       2017-08-04 08:29:30 +08:00
    @QAPTEAWH 因为服务器在墙内所以这个方法不可行,而且容易招致风险。

    @breeswish 我知道 UFW 底层是 iptables,而且我也是从 iptables 学起,不过 UFW 真的是懒人必备。。至于 iptables 的底层实现,恕我不是 CS 专业的真没有深入学习,惭愧。

    @49gd 效果还不错,均速下载在 500KB/s 左右
    dangyuluo
        17
    dangyuluo  
    OP
       2017-08-04 08:30:20 +08:00
    @goodniuniu 用的是青云的服务器,如果网络层面 ban 掉的话就是要在操作面板里进行了,7000 条手工操作量不可行。而且也没看到这里的 API。
    terence4444
        18
    terence4444  
       2017-08-04 08:40:42 +08:00 via iPhone
    @d847198075 好吧,想当然了。但是服务器放在国内,国外访问的时候应该也会偶然反向被 Q 吧?
    d847198075
        19
    d847198075  
       2017-08-04 08:47:16 +08:00 via Android
    @terence4444 放国内,有关键词的话,很容易被拔网线了(滑稽)
    ETiV
        20
    ETiV  
       2017-08-04 08:53:03 +08:00 via iPhone
    啥服务
    http 的话,用 ningx+geo module,直接给 country == cn 的 403 掉
    webjin1
        21
    webjin1  
       2017-08-04 08:58:13 +08:00
    linux 黑洞路由命令
    net-tool 用法
    route add -host 10.10.0.1 127.0.0.1 -blackhole
    iprouter2 用法
    $ ip route add blackhole 192.168.32.128/32
    supermaxisme
        22
    supermaxisme  
       2017-08-04 09:02:20 +08:00
    iptables 关于规则的匹配不是逐条比对,
    JackBlack2006
        23
    JackBlack2006  
       2017-08-04 09:07:36 +08:00
    好像是叫 Geo IP 来着,碰到过一个外国软件官网就是这样屏蔽 TC 大陆 IP 的

    This site is not available.

    Block reason: Gateway GEO-IP Filter Alert

    IP address: 删除

    Connection initiated from country: China
    lee015
        24
    lee015  
       2017-08-04 09:37:46 +08:00 via Android
    把中国 ip 段加 ipset 里,直接 iptables 按 ipset reject 掉。参考 ss-rule 代理中国 ip 之外的所有 ip。
    中国 ip 段这样取的: https://gist.github.com/jackytang/3c50a376535710aa6f33
    dangyuluo
        25
    dangyuluo  
    OP
       2017-08-04 10:58:48 +08:00 via iPhone
    @ETiV 不是 http 服务,是的话就容易了。
    lzhr
        26
    lzhr  
       2017-08-04 11:04:54 +08:00 via Android
    检测用户系统语言?
    knightlhs
        27
    knightlhs  
       2017-08-04 11:21:52 +08:00   ❤️ 3
    智能 DNS 海外来源访问给正确 ip 地址 国内访问 给错误 ip 地址不就行了?
    费劲的研究啥防火墙 研究 iptables 干嘛? 走错路了
    dangyuluo
        28
    dangyuluo  
    OP
       2017-08-04 12:05:24 +08:00 via iPhone
    @knightlhs 你这番话让我想起了一个故事:某个工厂雇佣了好几个博士,投资了几百万美元就是为了开发一套系统来分拣出空箱子。中国老板则很“聪明”地在流水线旁边放了一个大风扇把空箱子吹走。
    结果是第一个老板通过开发积累了经验,得到了更加自动化的生产流程技术。第二个老板则只是图走捷径,到最终也只是一个加工者。

    @lzhr 不是 http 服务,语言的方法不太可行。
    dangyuluo
        29
    dangyuluo  
    OP
       2017-08-04 12:06:53 +08:00 via iPhone
    @knightlhs 至于为什么不能用现有的智能 NameServer 服务,原因再简单不过了,不是所有设备和软件都提供域名支持的。
    d847198075
        30
    d847198075  
       2017-08-04 12:52:59 +08:00 via Android
    @knightlhs Good!
    CasparLi
        31
    CasparLi  
       2017-08-04 13:38:02 +08:00
    @QAPTEAWH 哈哈哈 这个办法可以
    sobigfish
        32
    sobigfish  
       2017-08-04 13:44:20 +08:00
    onion83
        33
    onion83  
       2017-08-05 00:25:28 +08:00
    iptables -I INPUT -m geoip -src-cc CN -j DROP
    d3js
        34
    d3js  
       2017-08-05 07:00:35 +08:00 via Android
    7000+ 没啥问题吧… 别低估了 Linux 的性能
    Admstor
        35
    Admstor  
       2017-08-05 12:52:59 +08:00
    DNS 也是一种方法
    不过如果对方不是通过 DNS 解析得到了 IP,那就没用了
    这与本机做屏蔽也不矛盾,都可以用起来
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5496 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 08:34 · PVG 16:34 · LAX 00:34 · JFK 03:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.