如何屏蔽 SS 服务器访问大陆的 IP 段?

2015-01-31 15:12:39 +08:00
 myliyifei
我已经下载并得到了chnroute.list,也创建好了ipset。


查了一下 ss好像有个--acl选项,[--acl <acl_file>] config file of ACL (Access Control List)
但是貌似给ss-server没有用。 这个是个ss-local用的吗?

但是我先前尝试在OUTPUT reject所有匹配ipset的访问,并且用ownerid 识别出只有SS的流量,但是想起来这样也屏蔽了SS返回给客户端的报文。



目前想到几个思路,

A 是在INPUT标记连接到SS-SERVER的端口 connmark ,然后在OUTPUT的屏蔽访问IP段ACL之前accept 标记的连接,不过还没有测试

B 是在OUTPUT 放行 SS-SERVER的SPORT端口发出的连接,然后屏蔽国内的段。但是缺点是多端口多用户,就要写多条了。

C 在SS前面在做一个代理服务器,用PID 标识那个代理服务器并限制其访问IP端。缺点应该是耗内存,然后https的透明代理要生成证书。

大家有更优雅的方法吗
10581 次点击
所在节点    Linux
25 条回复
liruqi
2015-02-01 00:42:01 +08:00
http://v2ex.com/t/149771#reply13

这时我做过。不过自己用的时候加了参数,规则只对运行 shadowsocks 的 user 生效。
ryd994
2015-02-01 00:49:56 +08:00
@myliyifei ss本身没有,related也包括tcp相关的icmp,这些最好还是allow,不过问题不大
jerryjhou
2015-02-02 06:11:24 +08:00
@myliyifei 点成感谢了。。。直接按照 @chinawrj 的方法就可以了,第一条命令就是放行所有SS所用端口的所有流量,然后屏蔽和中国的通信。不过你最好把SSH也放行,否则你得挂代理才能连上SSH
myliyifei
2015-02-12 13:04:30 +08:00
@ryd994 geoip准确吗? 和ipset的性能比较呢? 下面的文档说ipset用的是Jenkins3,但是搜不到这个



geoip vs ipset
xt_geoip uses the (probably) most efficient format, a (non-compressed) packed blob. Loading one country into the kernel costs as much as the file on disk.

Since ipset does not support arbitrary IPaddr–IPaddr ranges, one would need to approximate that using, for example, multiple Network/Prefixlength entries. Furthermore, if a hash set type is used, you can assume that, by the nature of hashes and/or trees, some buckets remain empty and/or additional metadata is required. The memory footprint with an ipset-based geoip thus is naturally larger. User reports[1] indicate it can become two orders of magnitude higher in certain cases (iptreemap).

xt_geoip's lookup time is O(log2(ranges)), so to lookup an address within 20,000 ranges, at most 15 iterations each with address comparisons (at most 3) are required. ipset uses Jenkins3 for hashing, which has a certain time cost of its own.
ryd994
2015-02-12 15:16:38 +08:00
@myliyifei geoip准不准确看你编译的时候用的数据库准不准确啊
效率的话可能geoip高点,毕竟是专门做这个,规则多了以后本身就是个负担
上面那段说的就是ipset可能需要更多更复杂的规则来实现,内存占用高两个数量级
从理论上来讲呢,ipset用的是hash,geoip是二分,O(1)比O(log(n))要好。
但是复杂度只代表n足够大的时候的优劣,实际时间多少完全是另一回事。

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

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

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

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

© 2021 V2EX