常用配置文件:
1 2 3 4 5 6 7 8 9 10 11 | #文件1:端口文件 vim /etc/sysconfig/ss5 #文件2:路由规则文件 vim /etc/opt/ss5/ss5 .conf #文件3:用户密码文件 vim /etc/opt/ss5/ss5 . passwd #重启ss5 service ss5 restart |
socks5协议
目前三大主流的代理协议包括Socks5代理,HTTP代理,HTTPS代理,由于socks5协议工作在传输层和应用层之间,采用TCP/IP协议进行通信,对应用层的多种协议有较好的兼容性,因此应用的十分广泛。
- ss5源码:Github地址 、Docker安装包1 、Docker安装包2
- 兼容CentOS8的 ss5修改版 (国内仓库下载)
1、安装ss5
安装依赖
1 2 | yum -y install gcc gcc-c++ automake make pam-devel openldap-devel cyrus-sasl-devel yum -y install pam-devel openldap-devel cyrus-sasl-devel gcc automake make openssl openssl-devel |
创建好一个目录,进入该目录后,wget下载好ss5安装文件
1 | wget http: //jaist .dl.sourceforge.net /project/ss5/ss5/3 .8.9-8 /ss5-3 .8.9-8. tar .gz |
进入目录后进行编译。依次运行以下三个命令:
1 2 3 4 | tar -xzvf . /ss5-3 .8.9-8. tar .gz cd ss5-3.8.9 . /configure make && make install |
2、修改配置文件
先进行备份
1 | cp /etc/opt/ss5/ss5 .conf /etc/opt/ss5/ss5 .conf.bak |
修改配置
1 | vim /etc/opt/ss5/ss5 .conf |
这里需要注意:必须把配置文件/etc/opt/ss5/ss5.conf
备份后清空,否则会报错socks method unknown or bad request
清空后ss5.conf只写两行:
1 2 | auth 0.0.0.0 /0 - u permit u 0.0.0.0 /0 - 0.0.0.0 /0 - - - - - |
2.1、配置说明-auth
auth为认证配置,可以设置多行
1 2 3 | # auth配置 SHost SPort Authentication #[auth配置 来源IP 来源端口 模式] auth 0.0.0.0 /0 - - |
①SHost
设置监听ip,0.0.0.0/0
为监听所有请求
②SPort
设置监听端口,端口如果不需要设置的话,用”-“标识,表示监听所有端口
③Authentication
模式设置,取值为n或u:
- n:为不使用用户密码[不推荐,因为机器很容易就变成肉鸡了],
- u:为使用用户密码,用户密码需要在ss5.passwd里面配置 [下文讲]
2.2、配置说明-permit
permit为允许(授权)设置项,可以设置多行
1 2 | #permit设置 auth SHost SPort DHost Dport Fixup Group Band ExpDate [permit设置 认证模式 来源IP 来源端口 目的IP(域名) 目的端口 协议 用户组 带宽设置 过期时间] |
①auth
认证模式开关,开启用u
标识,如果关闭认证模式可以用-
标识
②SHost和Sport
SHost和Sport和auth一栏一样,设置来源的端口;DHost和Dport设置通过socks5代理后可以访问的ip(域名)和端口,每个permit设置一个ip(域名)或端口
如果要使用不同的端口,而ip也可以添加网段
1 2 3 | permit u - - 192.168.1.1 443 - - - - permit u - - 192.168.1.1 80 - - - - permit u - - 192.168.1.2 443 - - - - |
③Fixup
设置smtp,http等允许的协议;
④Group
设置允许的用户或用户组,需要配合ss5.passwd使用,ss5.passwd是储存用户认证的文件,(格式为用户名 用户密码,中间要有空格,然后一行设置一个用户);在v1.0r11版本中,多个用户可以使用逗号隔开,但是经过个人测试,在新版本的socks5中不允许这样填写配置,这也是设置失败的主要原因,在新版本中如果要允许多个用户就要先定义好用户组,在ss5.conf所在的目录下建立group文件夹,在文件夹下添加对应的组员信息文件,但这个组员必须存在于ss5.passwd中[group文件夹不是必须,也可以直接将组员信息文件放在ss5.conf同级目录下,不过当设置组多到一定程度时,存放位置和规范就比较重要了]
[具体的例子就是,如果某个permit需要允许user1,user2,user3访问,那么首先要在ss5.passwd中配置好3个user,然后建立文件users,分别每一行填写一个用户名;比如某个permit设置为:
permit u 0.0.0.0/0 - 0.0.0.0/0 - - group/users - -
即表示为允许group/users文件中用户直接通过代理访问网络,对应文件内容如下]
ss5.conf
1 2 | auth 0.0.0.0 /0 - u permit u 0.0.0.0 /0 - 192.168.0.0 /0 - group /users - - #设置用户只可以通过socks5代理访问内网 |
ss5.passwd
1 2 3 | user1 123 user2 123 user3 123 |
group/users
先创建 group 目录,再创建 users 文件,文件内容为:
1 2 3 | user1 user2 user3 |
⑤Band
带宽设置,以byte做单位,最低可以设置256(最高没试过,不设置就好了),设置1Mb就是10240;
⑥ExpDate
过期时间,格式为日-月-年:01-05-2017
3、添加用户密码
在/etc/opt/ss5/ss5.passwd
文件中可以添加用户名和密码:
1 | vim /etc/opt/ss5/ss5 . passwd |
每行写一个用户名和密码,用户名和密码用空格隔开,例如:
1 2 | #用户名 密码 albert WrXZq0Xn3Ysby8R3bqZp1VKMmGBdgYmR |
4、修改ss5端口
修改端口配置文件
1 | vim /etc/sysconfig/ss5 |
第2行取消注释,同时修改为自己需要的端口,默认端口为1080
1 | SS5_OPTS= " -u root -b 0.0.0.0:9988" |
5、调整ss5性能
这里依据实际需求调整,主要在修改系统资源配置,如果ss5不影响正常使用或使用人数较少可以不修改
1 2 3 | ulimit -SHn 10240 ulimit -SHs unlimited echo 100000 > /proc/sys/net/nf_conntrack_max |
6、修改ss5启动权限
修改执行权限
1 2 | chmod u+x /etc/rc .d /init .d /ss5 chmod +x /etc/init .d /ss5 |
7、开机自启
1 | chkconfig --add ss5 |
8、启动应用
1 2 | #创建进程pid所需的目录 mkdir -pv /var/run/ss5 |
常用命令
1 2 3 4 5 6 7 8 | #启动 service ss5 start #停止 service ss5 stop #重启 service ss5 restart #查看状态 service ss5 status |
9、查看ss5日志
1 | tail -f /var/log/ss5/ss5 .log |
10、查看ss5进程是否存在?
1 2 3 | ps -ef | grep ss5 #或者 查看端口 netstat -ntlp | grep 9988 |
调试:手动启动ss5 (有时候会启动失败,可通过以下命令行方式启动调试)
1 | /usr/sbin/ss5 -t $SS5_OPTS -u root -b 0.0 . 0.0 : 9988 |
11、报错
问题1:如果您看到如下所示的错误:Can't create pid file /var/run/ss5/ss5.pid
1 2 3 | [root@CentOS7-A ~] # /usr/sbin/ss5 -t $SS5_OPTS -u root -b 0.0.0.0:9988 [root@CentOS7-A ~] # Can't create pid file /var/run/ss5/ss5.pid Can't unlink pid file /var/run/ss5/ss5 .pid |
创建目录/var/run/ss5
并再次启动ss5,问题解决!
1 | mkdir -pv /var/run/ss5 |
但是:服务器重启后,目录/var/run/ss5
会被系统自动删除掉,也就是说随机启动的ss5会因为没有该目录,而启动失败!
解决方案:修改启动脚本,增加创建目录/var/run/ss5
的逻辑代码
1 | [root@CentOS7-A ~] # vim /etc/init.d/ss5 |
结合文章:【Socks5服务端】解决socket-ss5日志文件过大的问题
【最终的版本】/etc/init.d/ss5 文件内容:
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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | #!/bin/sh # # chkconfig: 345 20 80 # description: This script takes care of starting \ # and stopping ss5 # OS=` uname -s` if [ $OS = "Linux" ] || [ $OS = "SunOS" ]; then # Source function library. . /etc/rc .d /init .d /functions # Source networking configuration. . /etc/sysconfig/network # Check that networking is up. [ ${NETWORKING} = "no" ] && exit 0 [ -f /usr/sbin/ss5 ] || exit 0 fi # Test custom variables test -f /etc/sysconfig/ss5 && . /etc/sysconfig/ss5 # See how we were called. case "$1" in start) # Start daemon. echo -n "Starting ss5... " if [ $OS = "Linux" ]; then mkdir /var/run/ss5 daemon /usr/sbin/ss5 -m -t $SS5_OPTS touch /var/lock/subsys/ss5 else if [ $OS = "SunOS" ]; then mkdir /var/run/ss5 /usr/sbin/ss5 -m -t touch /var/lock/subsys/ss5 else mkdir /var/run/ss5 /usr/local/sbin/ss5 -m -t fi fi echo "done" ;; stop) # Stop daemon. echo "Shutting down ss5... " if [ $OS = "Linux" ] || [ $OS = "SunOS" ]; then killproc ss5 rm -f /var/lock/subsys/ss5 else killall ss5 fi rm -f /var/run/ss5/ss5 .pid echo "done" ;; reload) # Reload configuration if [ $OS = "Linux" ] || [ $OS = "SunOS" ]; then echo -n "Reloading ss5... " killproc ss5 -1 else pkill -HUP ss5 fi echo "done reload" ;; restart) # Restart daemon echo -n "Restarting ss5... " $0 stop $0 start ;; status) if [ $OS = "Linux" ] || [ $OS = "SunOS" ]; then status ss5 fi ;; *) echo "Usage: ss5 {start|stop|status|restart|reload}" exit 1 ;; esac exit 0 |
问题2:在CentOS8上编译安装报错
解决方案:改用优化后的源码包:
- 兼容CentOS8的 ss5修改版
附:客户端简单使用方法
1 2 | # 通过socks5访问百度,ip:port分别为socks5 部署服务器的IP以及对应的端口 curl --socks5 192.168 . 1.51 : 9988 --proxy-user albert:albert @2023 https: //www.baidu.com |
注意:有些应用软件填写的代理地址,格式为:socks://user:pass@host:port
配置socks全局使用
1 2 3 4 5 6 7 | vim ~/.bashrc 新增以下两行命令 export http_proxy=socks5: //ip :port export https_proxy=$http_proxy 退出编辑之后执行一下命令 source ~/.bashrc |
无用户认证模式
1 | vim /etc/opt/ss5/ss5 .conf |
清空后,只保留以下配置信息:
1 2 | auth 0.0.0.0 /0 - - permit - 0.0.0.0 /0 - 0.0.0.0 /0 - - - - - |
重启ss5
1 | service ss5 restart |