常用配置文件:
#文件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
安装依赖
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安装文件
wget http://jaist.dl.sourceforge.net/project/ss5/ss5/3.8.9-8/ss5-3.8.9-8.tar.gz
进入目录后进行编译。依次运行以下三个命令:
tar -xzvf ./ss5-3.8.9-8.tar.gz cd ss5-3.8.9 ./configure make && make install
2、修改配置文件
先进行备份
cp /etc/opt/ss5/ss5.conf /etc/opt/ss5/ss5.conf.bak
修改配置
vim /etc/opt/ss5/ss5.conf
这里需要注意:必须把配置文件/etc/opt/ss5/ss5.conf
备份后清空,否则会报错socks method unknown or bad request
清空后ss5.conf只写两行:
auth 0.0.0.0/0 - u permit u 0.0.0.0/0 - 0.0.0.0/0 - - - - -
2.1、配置说明-auth
auth为认证配置,可以设置多行
# 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为允许(授权)设置项,可以设置多行
#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也可以添加网段
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
auth 0.0.0.0/0 - u permit u 0.0.0.0/0 - 192.168.0.0/0 - group/users - - #设置用户只可以通过socks5代理访问内网
ss5.passwd
user1 123 user2 123 user3 123
group/users
先创建 group 目录,再创建 users 文件,文件内容为:
user1 user2 user3
⑤Band
带宽设置,以byte做单位,最低可以设置256(最高没试过,不设置就好了),设置1Mb就是10240;
⑥ExpDate
过期时间,格式为日-月-年:01-05-2017
3、添加用户密码
在/etc/opt/ss5/ss5.passwd
文件中可以添加用户名和密码:
vim /etc/opt/ss5/ss5.passwd
每行写一个用户名和密码,用户名和密码用空格隔开,例如:
#用户名 密码 albert WrXZq0Xn3Ysby8R3bqZp1VKMmGBdgYmR
4、修改ss5端口
修改端口配置文件
vim /etc/sysconfig/ss5
第2行取消注释,同时修改为自己需要的端口,默认端口为1080
SS5_OPTS=" -u root -b 0.0.0.0:9988"
5、调整ss5性能
这里依据实际需求调整,主要在修改系统资源配置,如果ss5不影响正常使用或使用人数较少可以不修改
ulimit -SHn 10240 ulimit -SHs unlimited echo 100000 >/proc/sys/net/nf_conntrack_max
6、修改ss5启动权限
修改执行权限
chmod u+x /etc/rc.d/init.d/ss5 chmod +x /etc/init.d/ss5
7、开机自启
chkconfig --add ss5
8、启动应用
#创建进程pid所需的目录 mkdir -pv /var/run/ss5
常用命令
#启动 service ss5 start #停止 service ss5 stop #重启 service ss5 restart #查看状态 service ss5 status
9、查看ss5日志
tail -f /var/log/ss5/ss5.log
10、查看ss5进程是否存在?
ps -ef | grep ss5 #或者 查看端口 netstat -ntlp | grep 9988
调试:手动启动ss5 (有时候会启动失败,可通过以下命令行方式启动调试)
/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
[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,问题解决!
mkdir -pv /var/run/ss5
但是:服务器重启后,目录/var/run/ss5
会被系统自动删除掉,也就是说随机启动的ss5会因为没有该目录,而启动失败!
解决方案:修改启动脚本,增加创建目录/var/run/ss5
的逻辑代码
[root@CentOS7-A ~]# vim /etc/init.d/ss5
结合文章:【Socks5服务端】解决socket-ss5日志文件过大的问题
【最终的版本】/etc/init.d/ss5 文件内容:
#!/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修改版
附:客户端简单使用方法
# 通过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全局使用
vim ~/.bashrc 新增以下两行命令 export http_proxy=socks5://ip:port export https_proxy=$http_proxy 退出编辑之后执行一下命令 source ~/.bashrc
无用户认证模式
vim /etc/opt/ss5/ss5.conf
清空后,只保留以下配置信息:
auth 0.0.0.0/0 - - permit - 0.0.0.0/0 - 0.0.0.0/0 - - - - -
重启ss5
service ss5 restart