SSR的配置文件里面有一些特别的参数,不是很常用。
forbidden_ip
这个参数主要用于禁止访问内部网络,例如127.0.0.1之类,如果不设置的话,源码中的默认值如下
1 |
config.get('forbidden_ip', '127.0.0.0/8,::1/128') |
一般来说,默认就已经足够,不过如果内部有比如数据库等敏感服务,那么理论上来说设置一下是比较好的
配置文件示例
1 |
"forbidden_ip": "127.0.0.0/8,::1/128,192.168.1.1/16", |
forbidden_port
这个参数主要用于屏蔽出站端口,例如禁止访问,如果不设置的话,源码中的默认参数如下,默认没有禁止任何端口
1 |
config.get('forbidden_port', '') |
ignore_bind
这个参数主要用于忽略所列出的IP发出的请求
1 |
config.get('ignore_bind', '127.0.0.0/8,::1/128,10.0.0.0/8,192.168.0.0/16') |
Python3出错解决
如果填了任何以上配置,那么在Python3环境下运行的时候会出错
1.如果填写多个IP地址,则报错:
1 |
ERROR: a bytes-like object is required, not 'str' |
2.如果只填写一个IP地址,则报错:
1 |
ERROR: 'int' object has no attribute 'split' |
原因是common.py在 IPNetwork(object) 处理的时候,使用了 .split 方法,由于Python3对str和二进制数据进行了强制区分,但是IPNetwork只对输入进行了str判断,而没有对非str输入进行转换,导致非str数据在进入add_network步骤再次进行.split操作时报错。
解决方法是在if判断之后增加else高亮行进行强制str转换,这样后续操作后就算输入值不是str,也不会报错
1 2 3 4 5 6 7 8 9 10 |
def __init__(self, addrs): self.addrs_str = addrs self._network_list_v4 = [] self._network_list_v6 = [] if type(addrs) == str: addrs = addrs.split(',') else: addrs = to_str(addrs) addrs = addrs.split(',') list(map(self.add_network, addrs)) |
Know More
https://github.com/shadowsocks/shadowsocks/wiki/Securing-Public-Shadowsocks-Server
https://github.com/shadowsocks/shadowsocks/wiki/Block-Connection-to-localhost
One comment