我已经下载并得到了chnroute.list,也创建好了ipset。
查了一下 ss好像有个--acl选项,[--acl
] 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的透明代理要生成证书。
大家有更优雅的方法吗
iptables?
iptables -A OUTPUT -p tcp --sport server_port -j ACCEPT
iptables -A OUTPUT -p tcp -m geoip --dst-cc CN -j DROP
另外iptables支持端口范围匹配
还有用啥,ipset啊,麻烦
中国IP段CIDR
http://www.ipdeny.com/ipblocks/data/aggregated/cn-aggregated.zone
可以只屏蔽http/https协议 或者直接禁止访问大陆IP的80和443端口
比较旧了,我昨天看一下,最新的58XX条了。
这个是每24小时更新的 行数少是因为相邻段自动合并了
https://www.howtoforge.com/xtables-addons-on-centos-6-and-iptables-geoip-filtering
难点不是这张表啊,这个list已经有了
对啊,所以一条iptables规则就行了
这个服务不错。。
NO, 你只加了一条规则,禁止localhost访问国内IP段,那么SS如何给客户端发送数据包呢? 我目前是实现了端口的方式,还要自定义链
哦,对,忽略这个问题了
你先把related允许掉嘛,
只reject new就行
related 是相关的连接啊,比如ftp-control 产生的ftp-data
我错了……
established
不明白为什么非要费力气做这么不讨好的事儿!
能完整的说一下吗?
output,如果是established,related ,允许
output,如果是 new,判断geoip规则
这样就是只限制出站的。
因为入站连接的返回部分会被作为established允许。
恩,new的话,我直接用ipset判定好了。加不加NEW都没有意义吧?另外,SS会产生 related这个状态吗? netstat可以看到related状态吧
http://v2ex.com/t/149771shadowsocks 的 user 生效。
ss本身没有,related也包括tcp相关的icmp,这些最好还是allow,不过问题不大
点成感谢了。。。直接按照 的方法就可以了,第一条命令就是放行所有SS所用端口的所有流量,然后屏蔽和中国的通信。不过你最好把SSH也放行,否则你得挂代理才能连上SSH
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.
geoip准不准确看你编译的时候用的数据库准不准确啊
效率的话可能geoip高点,毕竟是专门做这个,规则多了以后本身就是个负担
上面那段说的就是ipset可能需要更多更复杂的规则来实现,内存占用高两个数量级
从理论上来讲呢,ipset用的是hash,geoip是二分,O(1)比O(log(n))要好。
但是复杂度只代表n足够大的时候的优劣,实际时间多少完全是另一回事。