科学上网服务部署-shadowsocks服务端安装

ss服务端版本也有很多,例如:Python版本、GoLang版本、Perl版本、C版本, 官方SS地址

为了使用简单,我们选择了GoLang版本,这里直接获取编译好的可执行程序即可,不必安装任何依赖包。

安装版本:go-shadowsocks2

wget -c https://github.com/shadowsocks/go-shadowsocks2/releases/download/v0.1.5/shadowsocks2-linux.gz
gzip -d shadowsocks2-linux.gz
chmod +x shadowsocks2-linux
cp shadowsocks2-linux /usr/bin/
ln -sf /usr/bin/shadowsocks2-linux /usr/bin/ssserver

就这样,我们安装完成了服务端软件命令ssserver,接下来我们要启动服务端啦.

启动服务端:配置服务端参数信息

使用直接配置参数启动即可。

服务端测试

服务端手动启动命令:


# 简单启动命令: 格式为'ss://<cipher_method>:<your_password>@:<your_port>'
# 想了解AEAD加密方法,请阅读 https://shadowsocks.org/en/wiki/AEAD-Ciphers.html
random_password=$(echo $RANDOM | md5sum| base64)
cipher="AEAD_CHACHA20_POLY1305"
server_port="12345"
ss_uri="ss://${cipher}:${random_password}@${server_ip}:${server_port}"
echo "客户端/服务端使用的SS链接: ${ss_uri}"
server_ip=$(ifconfig eth0 | awk '/inet /{ print $2 }')


# 添加自启动服务
cat <<END > /usr/lib/systemd/system/ssserver.service
[Unit]
Description=Shadowsocks2
Wants=network-online.target
After=network-online.target

[Service]
User=nobody
PermissionsStartOnly=true
ExecStart=ssserver -s "${ss_uri}" 
Nice=-10
KillMode=process
Restart=on-failure
ProtectSystem=full
ProtectHome=true
PrivateTmp=true
PrivateDevices=true
NoNewPrivileges=true

[Install]
WantedBy=multi-user.target

END

# 启动服务端进程
echo "开始启动服务端进程"
systemctl enable --now ssserver.service

systemctl status ssserver.service

echo "+========================================="
echo "| 请在客户端使用SS链接: ${ss_uri}"
echo "+========================================="

启动正常后,按照提示在客户端配置使用吧。

客户端测试

GoLang版本Shadowsocks可执行程序包含了客户端功能,因此可以在本地主机上使用它作为客户端。

服务端启动成功后,我们就可以在本地使用客户端测试了, 记得执行下面脚本前用实际的URI地址替换掉SS_URI, 脚本内容如下:

wget -c https://github.com/shadowsocks/go-shadowsocks2/releases/download/v0.1.5/shadowsocks2-linux.gz
gzip -d shadowsocks2-linux.gz
chmod +x shadowsocks2-linux
sudo cp shadowsocks2-linux /usr/bin/
sudo ln -sf /usr/bin/shadowsocks2-linux /usr/bin/ssclient

SS_URI="$1"

cat <<END | sudo tee /usr/lib/systemd/system/ssclient.service
[Unit]
Description=Shadowsocks2
Wants=network-online.target
After=network-online.target

[Service]
User=nobody
PermissionsStartOnly=true
ExecStart=ssclient -c "${SS_URI}"
Nice=-10
KillMode=process
Restart=on-failure
ProtectSystem=full
ProtectHome=true
PrivateTmp=true
PrivateDevices=true
NoNewPrivileges=true

[Install]
WantedBy=multi-user.target

END

防火墙配置:iptables规则

echo "开始添加 iptables 防火墙配置"
ss_port="12345"
maxlink="50"
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT                #允许已建立的或相关连的通行
iptables -A INPUT -p tcp -m multiport --dport 22,80,443,${ss_port} -j ACCEPT    # 端口开放
# 限制每个客户端的HTTPS服务连接数
iptables -A INPUT -p tcp --syn --dport ${ss_port} -m connlimit --connlimit-above ${maxlink} -j REJECT
iptables -A INPUT -p tcp --syn --dport ${ss_port} -m connlimit --connlimit-upto ${maxlink}  -j ACCEPT
iptables -A INPUT -j DROP   #禁止其他未允许的规则访问

iptables -A FORWARD -p TCP ! --syn -m state --state NEW -j DROP                 # 丢弃异常的TCP连接包(可以屏蔽ACK扫描)
iptables -A FORWARD -p icmp -j DROP                                             # 禁止ICMP包

开启BBR

修改拥塞控制算法为BBR:

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

最后

shadowsocks一直也在更新,加密算法也在不断的更新,这就是开源产品的魅力。

以上操作过程过程都已经封装在脚本中了,获取脚本的Github地址,希望可以帮助到你。