Distributions
› Ubuntu
› Fedora
› CentOS
中文资源站
› 网易开源镜像站
myliyifei
V2EX  ›  Linux

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

  •  
  •   myliyifei · Jan 31, 2015 · 11667 views
    This topic created in 4306 days ago, the information mentioned may be changed or developed.
    我已经下载并得到了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的透明代理要生成证书。

    大家有更优雅的方法吗
    25 replies  •  2015-02-12 15:16:38 +08:00
    Showfom
    Showfom
    PRO
    Jan 31, 2015 via iPhone
    1
    iptables?
    chinawrj
    chinawrj
    Jan 31, 2015
    2
    iptables -A OUTPUT -p tcp --sport server_port -j ACCEPT
    iptables -A OUTPUT -p tcp -m geoip --dst-cc CN -j DROP

    另外iptables支持端口范围匹配
    chinawrj
    chinawrj
    Jan 31, 2015
    3
    还有用啥,ipset啊,麻烦
    tobyxdd
    tobyxdd
    Jan 31, 2015
    5
    可以只屏蔽http/https协议 或者直接禁止访问大陆IP的80和443端口
    myliyifei
    myliyifei
    OP
    Jan 31, 2015
    6
    @tobyxdd 比较旧了,我昨天看一下,最新的58XX条了。
    tobyxdd
    tobyxdd
    Jan 31, 2015
    7
    @myliyifei 这个是每24小时更新的 行数少是因为相邻段自动合并了
    myliyifei
    myliyifei
    OP
    Jan 31, 2015
    9
    @KyonLi 难点不是这张表啊,这个list已经有了
    KyonLi
    KyonLi
    Jan 31, 2015
    10
    @myliyifei 对啊,所以一条iptables规则就行了
    myliyifei
    myliyifei
    OP
    Jan 31, 2015
    11
    @tobyxdd 这个服务不错。。
    myliyifei
    myliyifei
    OP
    Jan 31, 2015
    12
    @KyonLi NO, 你只加了一条规则,禁止localhost访问国内IP段,那么SS如何给客户端发送数据包呢? 我目前是实现了端口的方式,还要自定义链
    KyonLi
    KyonLi
    Jan 31, 2015
    13
    @myliyifei 哦,对,忽略这个问题了
    ryd994
    ryd994
    Jan 31, 2015 via Android
    14
    你先把related允许掉嘛,
    只reject new就行
    myliyifei
    myliyifei
    OP
    Jan 31, 2015
    15
    @ryd994 related 是相关的连接啊,比如ftp-control 产生的ftp-data
    ryd994
    ryd994
    Jan 31, 2015 via Android
    16
    @myliyifei 我错了……
    established
    advans
    advans
    Jan 31, 2015
    17
    不明白为什么非要费力气做这么不讨好的事儿!
    myliyifei
    myliyifei
    OP
    Jan 31, 2015
    18
    @ryd994 能完整的说一下吗?
    ryd994
    ryd994
    Jan 31, 2015 via Android
    19
    @myliyifei
    output,如果是established,related ,允许
    output,如果是 new,判断geoip规则
    这样就是只限制出站的。
    因为入站连接的返回部分会被作为established允许。
    myliyifei
    myliyifei
    OP
    Jan 31, 2015❤️1
    20
    @ryd994 恩,new的话,我直接用ipset判定好了。加不加NEW都没有意义吧?另外,SS会产生 related这个状态吗? netstat可以看到related状态吧
    liruqi
    liruqi
    Feb 1, 2015 via iPhone
    21
    http://v2ex.com/t/149771#reply13

    这时我做过。不过自己用的时候加了参数,规则只对运行 shadowsocks 的 user 生效。
    ryd994
    ryd994
    Feb 1, 2015
    22
    @myliyifei ss本身没有,related也包括tcp相关的icmp,这些最好还是allow,不过问题不大
    jerryjhou
    jerryjhou
    Feb 2, 2015 via iPad
    23
    @myliyifei 点成感谢了。。。直接按照 @chinawrj 的方法就可以了,第一条命令就是放行所有SS所用端口的所有流量,然后屏蔽和中国的通信。不过你最好把SSH也放行,否则你得挂代理才能连上SSH
    myliyifei
    myliyifei
    OP
    Feb 12, 2015
    24
    @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
    ryd994
    Feb 12, 2015
    25
    @myliyifei geoip准不准确看你编译的时候用的数据库准不准确啊
    效率的话可能geoip高点,毕竟是专门做这个,规则多了以后本身就是个负担
    上面那段说的就是ipset可能需要更多更复杂的规则来实现,内存占用高两个数量级
    从理论上来讲呢,ipset用的是hash,geoip是二分,O(1)比O(log(n))要好。
    但是复杂度只代表n足够大的时候的优劣,实际时间多少完全是另一回事。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2081 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 14:35 · PVG 22:35 · LAX 06:35 · JFK 09:35
    ♥ Do have faith in what you're doing.