在Ubuntu 23上搭建简单的Shadowsocks-Libev服务器

前言

一个简单的Shadowsocks-Libev服务器搭建过程,系统为Ubuntu,因为自带了Snap应用商店等多种工具包,很方便。

当然你得提前准备一台VPS,建议用Vultr,Digital Ocean之类的,性价比高,随用随抛。配置可以丐中丐,流量和带宽一定不能差了。

如果你追求稳定,那么建议最好还是不要用Shadowsocks协议。


系统更新与软件安装

首先例行更新:

1
2
apt-get update -y
apt-get upgrade -y

然后用Snap应用商店安装Core

1
snap install core

Snap安装Shadowsocks-Libev

1
snap install shadowsocks-libev --edge

配置文件

用nano打开Shadowsocks配置文件路径,当然如果你会vim,那更好

1
nano /var/snap/shadowsocks-libev/common/etc/shadowsocks-libev/config.json

以下是一个示例的配置文件:

1
2
3
4
5
6
7
8
{
"server":["::0","0.0.0.0"],
"server_port":16384,
"method":"aes-128-gcm",
"password":"IRBa9FdVrSL147CL",
"mode":"tcp_and_udp",
"fast_open":true
}

简单介绍一下这个配置文件中可能需要修改的地方:

服务器端口号

这是Shadowsocks服务端的监听端口号,你可以随便换一个你喜欢的端口号,但是换成80, 443之类的常用端口也不能提高你的安全性

1
"server_port":16384,

对称加密算法

Shadowsocks使用多种对称加密算法,这里建议选择AEAD加密算法(性能高、抗重放攻击、兼容性好),Shadowsocks支持的AEAD加密算法包括:

  1. AES-128-GCM

  2. AES-192-GCM

  3. AES-256-GCM

  4. Chacha20-IETF-Poly1305

  5. XChacha20-IETF-Poly1305

  6. 2022-BLAKE3-AES-128-GCM

  7. 2022-BLAKE3-AES-256-GCM

  8. 2022-BLAKE3-Chacha20-IETF-Poly1305

这个选择就看你心情了,记得客户端和服务端的加密算法选择必须是一致的,否则无法成功解密

AES-GCM的话,密钥长度越大理论上安全性就越高(然而实际上128位也非常安全),同时对硬件的压力就越大,不过一般而言压力都不算很大

Chacha20-IETF-Poly1305是一种AEAD流密码,性能很高,如果你的设备CPU不太好可以选,不过一般而言AES-128-GCM也足够快

1
"method":"aes-128-gcm",

当然,如果你很叛逆,你一定要用老式流密码或者不带认证的块密码,那也是完全可以的。只要你的客户端和服务端同时支持,而且你很自信:

  1. RC4

  2. RC4-MD5

  3. AES-128-CTR

  4. xxxxxxxxxx hexo dbash

  5. AES-256-CTR

  6. AES-128-CFB

  7. AES-192-CFB

  8. AES-256-CFB

  9. AES-128-CFB8

  10. AES-192-CFB8

  11. AES-256-CFB8

  12. AES-128-OFB

  13. AES-192-OFB

  14. AES-256-OFB

  15. BF-CFB

  16. CAST5-CFB

  17. DES-CFB

  18. IDEA-CFB

  19. RC2-CFB

  20. SEED-CFB

  21. Camellia-128-CFB

  22. Camellia-192-CFB

  23. Camellia-256-CFB

  24. Camellia-128-CFB8

  25. Camellia-192-CFB8

  26. Camellia-256-CFB8

  27. Salsa20

  28. Chacha20

  29. Chacha20-IETF

  30. XChacha20

    那么举个例子,你就可以这样设置,当然很多客户端和服务端已经弃用流密码了,不保证这些加密算法都还能兼容:

    1
    "method":"rc4-md5",

    如果你用这些老加密算法设置失败了,服务端会自动把加密算法设置为Chacha20-IETF-Poly1305。

预共享密钥(PSK)

客户端与服务端之间共享的一个密钥字符串,Shadowsocks安全性的基石。客户端与服务器的PSK必须是一致的。

虽然说你输入的这个密钥并不会真的直接被加密算法使用,但是还是建议使用12字节以上的,具有一定随机性的PSK。

这并不是说AES-GCM或者Chacha20不可靠,而是Shadowsocks长期依赖一个PSK进行通信。以下是一个例子:

1
"password":"xMZpoL46GhfrJgEP"

传输层协议

使用的传输层协议,看你自己的需求来设置

TCP + UDP:

1
"mode":"tcp_and_udp",

TCP:

1
"mode":"tcp_only",

TCP Fast Open

打开没问题,因为目前Shadowsocks的密码学安全性似乎没什么问题:

1
"fast_open":true

当然你要是就是不想开,那你就把它关了:

1
"fast_open":false

至此,Shadowsocks服务端配置文件基本参数设置完毕,nano可以Ctrl+X退出,保存Y,并回车。

运行Shadowsocks服务与防火墙

运行Shadowsocks服务

使用以下命令来开启服务端的Shadowsocks-Libev服务:

1
systemctl start snap.shadowsocks-libev.ss-server-daemon.service

可以使用这个命令来查看你的Shadowsocks-Libev服务器运行状态:

1
systemctl status snap.shadowsocks-libev.ss-server-daemon.service

如果正常运行,那么你会看到绿色的提示信息。记得观察一下加密算法,如果你的加密算法设置不被兼容或者拼写出错,那么服务器会将其自动修改为Chacha20-IETF-Poly1305,客户端连接的时候别弄错了。

可以设置一下Shadowsocks的开机自启动,以免一个reboot或者IDC维护了一下就掉线了:

1
systemctl enable snap.shadowsocks-libev.ss-server-daemon.service

配置防火墙

很简单,首先,如果你是通过SSH连接的VPS,给防火墙添加这条规则,以免开了防火墙以后掉线:

1
ufw allow ssh

然后让防火墙开放Shadowsocks的监听端口,注意,把此处的端口号改成自己的端口号:

1
ufw allow 16384

最后开启防火墙,并允许开机自启动,SSH用户需要确认一下:

1
ufw enable

最后,在客户端配置相同的加密算法,预共享密钥,端口号,并填上服务器的IPv4或IPv6地址,即可完成连接,使用Shadowsocks代理服务器。

这是一个Shadowsocks-Windows的GUI客户端的下载地址:Shadowsocks-Windows(C#)

当然你也可以使用其它的代理客户端进行连接,如v2rayN,Sing-Box等,这里不一一列举。

如果你觉得文章写得还不错,可以赏作者一杯咖啡喝,或者一顿饭吃。感谢支持!THYzrcoMQf7d7wzGu1PvDraTef87abSv9V