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

2017-08-04 05:22:24 +08:00
 dangyuluo

最近有一台北京的 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 同理。(也可能不影响效率,是我臆想出来的)

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

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

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

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

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

@49gd 效果还不错,均速下载在 500KB/s 左右
dangyuluo
2017-08-04 08:30:20 +08:00
@goodniuniu 用的是青云的服务器,如果网络层面 ban 掉的话就是要在操作面板里进行了,7000 条手工操作量不可行。而且也没看到这里的 API。
terence4444
2017-08-04 08:40:42 +08:00
@d847198075 好吧,想当然了。但是服务器放在国内,国外访问的时候应该也会偶然反向被 Q 吧?
d847198075
2017-08-04 08:47:16 +08:00
@terence4444 放国内,有关键词的话,很容易被拔网线了(滑稽)
ETiV
2017-08-04 08:53:03 +08:00
啥服务
http 的话,用 ningx+geo module,直接给 country == cn 的 403 掉

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/380303

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX