基于shadowsocks-libev+simple-obfs的单机多用户搭建

前言

基于shadowsocks-libev+simple-obfs的单机多用户搭建。
本文基于Ubuntu 18.04在虚拟机中进行操作, 并于VPS上测试成功。

允许root远程登录

使用root避免各种权限问题, 实际使用时应登录普通用户后sudo -s切换到root用户。

1
2
3
sudo passwd root
sudo sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
sudo service sshd restart

服务端配置

服务端使用shadowsocks-libev, 其他项目似乎都好久没更新了。
配置文件官方文档

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 1. 安装 shadowsocks-libev
sudo apt update -y
sudo apt install shadowsocks-libev -y

# 2. 添加配置文件
sudo mkdir /opt/config
sudo vim /opt/config/manager.json
{
"port_password": {
"443": "12345"
},
"fast_open":true,
"reuse_port":true,
"no_delay":true,
"timeout": 300,
"mode":"tcp_and_udp",
"method": "aes-256-gcm"
}

# 3. 启动
sudo ss-manager -c /opt/config/manager.json

客户端连接上, 然后开启全局模式, 执行如下操作

  1. 访问www.baidu.com, 访问成功
  2. 关闭服务端, 访问www.baidu.com, 访问失败

则说明shadowsocks-libev已经成功配置。

配置 simple-obfs 混淆插件

服务端配置

simple-obfs 是一个简单的混淆插件, 可以伪装成 http 流量。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 1. 从 Github 下载源码进行编译
cd /opt
apt-get install --no-install-recommends build-essential autoconf libtool libssl-dev libpcre3-dev libev-dev asciidoc xmlto automake -y
git clone https://github.com/shadowsocks/simple-obfs.git
cd simple-obfs
git submodule update --init --recursive
./autogen.sh
./configure && make
sudo make install

# 2. 添加配置文件, 添加 plugin 和 plugin_opts 参数
sudo vim /opt/config/manager.json
{
"port_password": {
"443" : "12345"
},
"fast_open":true,
"reuse_port":true,
"no_delay":true,
"timeout": 300,
"mode":"tcp_and_udp",
"method": "aes-256-gcm",
"plugin":"obfs-server",
"plugin_opts":"obfs=http;failover=apps.bdimg.com"
}

# 3. 重启 shadowsocks-libev
systemctl restart shadowsocks-libev

客户端配置

win: https://github.com/shadowsocks/simple-obfs/releases
复制到客户端同一目录下, 并配置以下参数
插件程序: obfs-local
插件选项: obfs=http
插件参数: obfs-host=apps.bdimg.com

android: https://github.com/shadowsocks/simple-obfs-android/releases

没有苹果设备, 不做研究。

流量统计

shadowsocks-manager要部署邮箱才行, 放弃.
shadowsocks-hub依赖于shadowsocks-restful-api, 也是依赖于原生的manager API接口.(虽然我跑docker失败了)

shadowsocks-libev提供了原生的manager API接口, 可以统计流量使用情况.接口文档在这里protocol.

优化

开启BBR

BBR需要内核4.9以上.

1
2
3
4
5
6
7
8
# 1. 查看内核
uname -r

# 2. 启动BBR
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
sysctl -p
lsmod | grep bbr

部署一个正常的网站到80端口

也可以用来部署一些自己的web应用

1
2
apt install apache2 -y
service apache2 start

封禁恶意访问IP

使用 fail2ban

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 1. 安装 fail2ban
apt install fail2ban -y

# 2. ssh 安全规则
vim /etc/fail2ban/jail.d/ssh.conf
[ssh-iptables]
enabled = true
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
logpath = /var/log/secure

# 3. apache 安全规则
vim /etc/fail2ban/jail.d/apache.conf
[apache-tcpwrapper]
enabled = true
filter = apache-auth
action = hostdeny
logpath = /var/log/httpd/error_log

[apache-badbots]
enabled = true
filter = apache-badbots
action = iptables-multiport[name=BadBots, pory="http,https"]
logpath = /var/log/httpd/access_log

[apache-shorewall]
enabled = true
filter = apache-noscript
action = shorewall
logpath = /var/log/httpd/error_log

# 4. 重启服务
service fail2ban restart

结语

吐槽下, libev关于config.json的配置没有一个完整的example, 也没有wiki页, 还是我翻了下issue才发现了文档位置. 并且有些参数配置在config.json还没有对应位置.

开发者觉得我弄出来能用就好了, 不懂就去看源码全在那.
小白则是素质三连, 怎么用不了了, 报错了, 打不开怎么办.

开源不易, 珍惜每个用心写文档的开发者和每个用心写复现步骤的小白.

点击进入云乞讨模式!
0%