作为一个轻量级代理工具,安装配置很方便,基本上照着 README 做就行了。
这里说下在 Linux VPS 上架设半公开 Shdowsocks 服务可能需要用到的两项额外配置。
同样由于为了保持轻量,Shadowsocks(这类)工具并不提供访问控制(ACL)和流量控制(TC)功能。 这在某些情景下可能产生安全隐患:公开或半公开帐号,可能有不信任的人使用;服务器上同时运行了其他服务。
禁止访问本机与内网
在 Linux 中,使用 TCP/UDP 在进程间通讯十分常见,比如 MySQL、PHP-FPM、Memcached… 它们在 127.0.0.1 上开一个端口,让其他程序连接。
localhost 只有本地应用才可访问,所以一般认为是安全的。但挂上 Shadowsocks 后,在客户端发起的请求,在系统看来,就是本地应用发出的。
感谢 @lilydjwg 的提醒,可以这么做:
Step 1 以outwall
用户身份运行 Shadowsocks
su -c "ssserver -c /path/to/config.json" outwall |
或者,Ubuntu 用户可使用 Upstart 运行:
# /etc/init/ssserver.conf description "Shadowsocks Server" start on runlevel [2345] stop on runlevel [016] setuid outwall setgid outwall respawn exec ssserver -c /path/to/config.json |
(日志将保存在 /var/log/upstart/ 下)
再或者,更高大上的 systemd:不会
Step 2 用 owner 模块匹配进程 UID
iptables -A OUTPUT ! -o eth0 -m owner --uid-owner outwall \ -j REJECT --reject-with icmp-host-prohibited |
这样,Shadowsocks 就只能连接外网(eth0)了。
另外,如 @clowwindy 所言,单机使用时用 Unix Socket 代替 TCP/UDP 个好主意。
2015-03-12 更新:
Shadowsocks (Python) 最新版已可以通过--forbidden-ip IPLIST
参数禁止访问指定 IP。
流量控制
之前用美帝的 VPS 就完全不用在意带宽问题.. 少说 100Mbps 多则 1Gbps 的口,不限也大丈夫… 换成港服后就蛋疼了…
试着用 tc/tcng 来做流量控制,似乎挺复杂的,我就说下大致思路吧:
将 SS 的上行流量分两类:发回墙内的 与 发给墙外的。
前者优先级低于后者,两者均低于本机的其他服务。
发回墙内的,由于源端口总是为 SS 监听端口,所以直接在 tc 里匹配端口即可;
发给墙外的,端口不一,可用 iptables owner 匹配后打上 mark,再用 tc 匹配 mark。
iptables -t mangle -A POSTROUTING -m owner --uid-owner outwall -j MARK --set-mark 2 |
tc 略复杂啊,我觉得我没法讲清楚了(是你压根就不懂吧喂
有一个坑点需要注意,rate 有两重含义,一个是“保证带宽”,是一个确切的值。另一个是权重,可用带宽会按 rate 的比例分配。
2015-03-12 更新:
如果嫌 tc 麻烦,可使用 iptables 的hashlimit
模块来实现限速。
博主的ximbo用的哪一款啊?用了内地特快线路了吗?怎么才这速度啊,完全比不上azure啊
我问了客服,他说我现在用的是他们的旧系统,没有内地特快线路这个选项。
我这台最近到内地也不是太稳定的样子…
哇,好主意