Ubuntu 搭建ss服务端笔记(2020年更新)

前言

Shadowsocks 是一个轻量级 socks5 代理,最初用 Python 编写,下面简称 ss。在2019年年末,被指出多个版本的 ss 服务端实现可被重定向攻击(Redirect attack),详见:https://gfw.report/blog/gfw_shadowsocks/zh.html

在今年(2020)年初,有研究者指出了攻击方法,证实了部分ss服务端实现存在重定向攻击漏洞,并指出指导意见,详见:https://github.com/edwardz246003/shadowsocks

文中提到:Only Use: shadowsocks-libev, go-shadowsocks2 and only use the AEAD ciphers

也就是推荐使用 shadowsocks-libev go-shadowsocks2,并需要使用AEAD 加密协议

本文介绍 shadowsocks-libev 最新版本的编译和安装。

准备

安装之前,需要打开 ssh,而且最好做好相关防护,不然端口很可能被扫爆。

更新源

sudo apt update && sudo apt upgrade && sudo apt autoremove

准备编译环境

sudo apt install --no-install-recommends build-essential autoconf libtool \
         libssl-dev gawk debhelper dh-systemd init-system-helpers pkg-config asciidoc \
         xmlto apg libpcre3-dev zlib1g-dev libev-dev libudns-dev libsodium-dev \
         libmbedtls-dev libc-ares-dev automake

fail2ban

安装 fail2ban 服务,该服务装好后重启生效、自启动,作用:ssh登录错误5次ban10分钟。

sudo apt install fail2ban

另外可以在 /etc/fail2ban/jail.conf 修改fail2ban参数。

编译

获取shadowsocks-libev源码, 并安装

sudo apt install git
git clone https://github.com/shadowsocks/shadowsocks-libev.git
cd shadowsocks-libev
git submodule update --init
./autogen.sh && ./configure --disable-documentation && make
sudo make install

配置说明

创建配置文件

sudo mkdir /etc/shadowsocks-libev
sudo vim /etc/shadowsocks-libev/config.json

shadowsocks-libev 的配置文件是一个json形式的文件,各参数的意义和命令行参数意义相同

{
    "server": "0.0.0.0",
    "server_port": 8848,
    "local_address": "127.0.0.1",
    "local_port": 1080,
    "password": "mypassword",
    "timeout": 300,
    "method": "chacha20-ietf-poly1305",
    "fast_open": false,
    "workers": 1,
    "prefer_ipv6": false
}

服务器地址(server)就写0.0.0.0即可,0.0.0.0意思是转发到外网,不要写127.0.0.1,127.0.0.1是仅在内网使用

端口号(server_port)可以自己写,但是不要占用其他服务的端口。

本地地址(local)和本地端口(local_port)是客户端使用的,服务端可以不用理会。

密码(password)尽量采用复杂一点的密码,以保证安全性。

加密方式(method),推荐使用 AEAD 加密协议。shadowsocks-libev中支持的 AEAD 加密协议如下:

  • AES-128-GCM
  • AES-192-GCM
  • AES-256-GCM
  • ChaCha20-IETF-Poly1305
  • XChaCha20-IETF-Poly1305

注:如果仅仅在手机或者电脑使用(CPU含有AES的加速指令集),建议使用 AES-XXX-GCM 系列,如果是路由器使用推荐 chacha20-ietf-poly1305   xchacha20-ietf-poly1305

fast_open 如果服务器是 Linux 系统的话,待安装完毕后,参照后续的优化部分可以打开 。

vim 配置文件编辑完毕之后,按 :wq 以保存并退出。

创建系统服务并设置自启动

创建Shadowsocks-libev.service配置文件

sudo vim /etc/systemd/system/shadowsocks-libev.service

写入

[Unit]
Description=Shadowsocks-libev Server
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/ss-server -c /etc/shadowsocks-libev/config.json -u
Restart=on-abort

[Install]
WantedBy=multi-user.target

启动 Shadowsocks

sudo systemctl start shadowsocks-libev

设置开机启动

sudo systemctl enable shadowsocks-libev

至此已经安装成功!

后续

优化吞吐量

新建配置文件:

sudo vim /etc/sysctl.d/local.conf

写入:

#max open files
fs.file-max = 51200
#max read buffer
net.core.rmem_max = 67108864
#max write buffer
net.core.wmem_max = 67108864
#default read buffer
net.core.rmem_default = 65536
#default write buffer
net.core.wmem_default = 65536
#max processor input queue
net.core.netdev_max_backlog = 4096
#max backlog
net.core.somaxconn = 4096
#resist SYN flood attacks
net.ipv4.tcp_syncookies = 1
#reuse timewait sockets when safe
net.ipv4.tcp_tw_reuse = 1
#turn off fast timewait sockets recycling
net.ipv4.tcp_tw_recycle = 0
#short FIN timeout
net.ipv4.tcp_fin_timeout = 30
#short keepalive time
net.ipv4.tcp_keepalive_time = 1200
#outbound port range
net.ipv4.ip_local_port_range = 10000 65000
#max SYN backlog
net.ipv4.tcp_max_syn_backlog = 4096
#max timewait sockets held by system simultaneously
net.ipv4.tcp_max_tw_buckets = 5000
#turn on TCP Fast Open on both client and server side
net.ipv4.tcp_fastopen = 3
#TCP receive buffer
net.ipv4.tcp_rmem = 4096 87380 67108864
#TCP write buffer
net.ipv4.tcp_wmem = 4096 65536 67108864
#turn on path MTU discovery
net.ipv4.tcp_mtu_probing = 1

net.ipv4.tcp_congestion_control = bbr

运行:

sudo sysctl --system

编辑配置文件 limits.conf

sudo vim /etc/security/limits.conf

在文件结尾添加两行:

* soft nofile 51200
* hard nofile 51200

编辑 shadowsocks-libev 服务

# 服务配置文件名称视具体而定
sudo vim /etc/systemd/system/shadowsocks-libev.service

[Service] 之后加入 ExecStartPre=/bin/sh -c ‘ulimit -n 51200’ 如下所示:

[Unit]
Description=Shadowsocks-libev Server
After=network.target

[Service]
Type=simple
# 服务配置可能有所不一样,视实际而定
# 在这里加入 ExecStartPre=/bin/sh -c 'ulimit -n 51200'
ExecStartPre=/bin/sh -c 'ulimit -n 51200'
ExecStart=/usr/local/bin/ss-server -c /etc/shadowsocks-libev/config.json -u
Restart=on-abort

[Install]
WantedBy=multi-user.target

重新加载 shadowsocks-libev 服务配置

sudo systemctl daemon-reload

重启 shadowsocks-libev 服务

sudo systemctl restart shadowsocks-libev

开启TCP Fast Open

TCP Fast Open 可以降低 Shadowsocks 服务器和客户端的延迟。实际上在上一步已经开启了 TCP Fast Open,现在只需要在 Shadowsocks 配置中启用 TCP Fast Open。

1、编辑config.json:

sudo vi /etc/shadowsocks-libev/config.json

将 fast_open 的值由 false 修改为 true

{
    "server": "0.0.0.0",
    "server_port": 8848,
    "local_address": "127.0.0.1",
    "local_port": 1080,
    "password": "mypassword",
    "timeout": 300,
    "method": "chacha20-ietf-poly1305",
    /*这里设置 fast_open:true,如果没有则加入*/
    "fast_open": true,
    "workers": 1,
    "prefer_ipv6": false
}

2、重启 shadowsocks-libev 服务:

sudo systemctl restart shadowsocks-libev

开启 BBR

Google 开源了其 TCP BBR 拥塞控制算法,并提交到了 Linux 内核,从 4.9 开始,Linux 内核已经用上了该算法。根据以往的传统,Google 总是先在自家的生产环境上线运用后,才会将代码开源,此次也不例外。 根据实地测试,在部署了最新版内核并开启了 TCP BBR 的机器上,网速甚至可以提升好几个数量级。

运行 lsmod | grep bbr,如果结果中没有tcp_bbr,则先运行:

modprobe tcp_bbr
echo "tcp_bbr" >> /etc/modules-load.d/modules.conf

Ubuntu 18.04 LTS 等新版系统可以直接开启 BBR:

sudo bash -c 'echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf'
sudo bash -c 'echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf'
sudo sysctl -p

保存生效。运行:

sysctl net.ipv4.tcp_available_congestion_control
sysctl net.ipv4.tcp_congestion_control

若均有 bbr ,则恭喜 BBR 已经开启。开启 BBR 后,网速有极大提升,我的树莓派从原来的 40Mbps 左右带宽增速到了 80Mbps,效果显著。

19 Comments (18515 Views)

  1. 感谢教程,这里分享一下我遇到的一个问题
    ubuntu下可能部分版本会出现连接时服务端报错“invalid argument”,此时将config.json里的local两项去掉即可
  2. 感谢楼主的教程,我是用的楼主提供的BBR优化的教程然后用的秋水的shadowsocks-libev一键脚本,在没做BBR优化之前树莓派3B+只有可怜的20M+左右,优化之后能有40M+左右。
  3. kaki says:
    服务器能运行但是连不上。同用的BBユニット,ポート転送里面设定好了之后还要设定其他的部分么?
  4. Martin says:
    想请教一下,我现在人在国外,按照博主的做法搭好了,也确实能用,但是在国内用的人反映速度慢得吓人,我自己用热点接速度是可以看youtube的是不是说明我这个ip就是不行?这种情况是不是只能租vps?
  5. 该换shadowsocks-libev了……python版好像已经停更了吧
  6. Xavier says:
    成功安装好了,并且也连接上了,从客户端到树莓派这边完全没问题,但是不能接受到任何数据,看log里面一直显示在connecting
  7. Xavier says:
    启动服务后出现了ERROR    Decrypt failed,请问这是个什么问题呢?

Leave a Reply

Your email address will not be published. Required fields are marked *