SS5 Installation

安装ss5

apt-get install gcc make

下载源码包

1
2
3
wget http://120.52.73.44/jaist.dl.sourceforge.net/project/ss5/ss5/3.8.9-8/ss5-3.8.9-8.tar.gz
cd ./ss5-3.8.9-8
./configure

报错:
configure: error: *** Some of the headers weren't found ***
安装libpam0g-dev解决:
apt-get install libpam0g-dev

make报错:

1
2
3
4
5
SS5OpenLdap.c:29:18: fatal error: ldap.h: No such file or directory
#include <ldap.h>
^
compilation terminated.
make[1]: *** [SS5OpenLdap.o] Error 1

解决:
apt-get install libcurl4-openssl-dev


主要问题是官方发布的版本没有for ubuntu的, 所以下载fedora版本, 安装完成后, 再修改一些默认脚本,
使之适应 ubuntu


##ubuntu 下的 ss5 安装 (和附加包 安装):

1, tar -zxvf ss5-3.8.9-1.tar.gz
./configre
发现很多包没有安装, 所以下面挨个安装

1
2
3
sudo apt-get install dpkg-dev

./configure
1
2
3
4
5
6
7
8
9
10
11
aptitude search pam | grep dev
sudo apt-get install libpam0g-dev
./configure

aptitude search ldap | grep dev
sudo apt-get install libldap2-dev
./configure

aptitude search ssl | grep dev
sudo apt-get install libssl-dev
./configure
1
2
sudo apt-get install openssl
(源程序中用到了openssl, 源代码中 /include/SS5Radius.h 有这样一行: #include <openssl/md5.h> )

有可能要先安装apt功能:

1
2
3
sudo apt-get install apt-file
sudo apt-file update
apt-file search functions

未出现下述问题 可忽略
./configure
make 发现编译二进制.o 都通过了, 但在最终链接时候报错, 说MD5_xxx 几个函数没有定义.

vi src/Makefile 加入 -lcrypto 库链接
LIBS = -lpthread -rdynamic -ldl -lssl -lcrypto -lldap -lpam -lpam_misc

这时候vfork.h还是没有, 但没有关系,


可以编译和安装ss5了:

1
2
3
./configure
make
make install

备注: Makefile中, 相应的安装路径:

1
2
3
4
5
6
7
S["trc_path_base"]="/var/log/ss5"
539 S["log_path_base"]="/var/log/ss5"
540 S["man_path_base"]="/usr/share/man"
541 S["doc_path_base"]="/usr/share/doc"
542 S["bin_path_base"]="/usr/sbin"
543 S["conf_path_base"]="/etc/opt"
544 S["lib_path_base"]="/usr/lib"

然后要对ss5的启动脚本进行修正:
因为安装包是for fedora的, 直接安装在unbuntu中, 有两个问题, 要修改:

  1. 安装的默认启动脚本, 目录不对
  2. 启动脚本中, 用到了两个fedora平台的启动子脚本, unbuntu里没有, 所以要禁用.
  3. 对启动脚本做一些其它的小修正

首先

将安装到fedora系统默认目录下的启动脚本, copy 到 unbuntu 默认启动目录里面,
cp /etc/rc.d/init.d/ss5 /etc/init.d/ss5

然后

改动成下面脚本,
或者直接copy 或者 upload 我修改过的脚本到/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
#SS5_LOG_FILE = "/var/log/ss5log"

# Source function library.
# . /etc/rc.d/init.d/functions
# ./lib/lsb/init-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
# daemon /usr/sbin/ss5 -t $SS5_OPTS $SS5_OPTS = -u root in file: /etc/sysconfig/ss5
# /usr/sbin/ss5 -t -m -b 0.0.0.0:1080 -u root
/usr/sbin/ss5 -t -b 0.0.0.0:1080 -u root
# touch /var/lock/subsys/ss5
touch /var/run/ss5/ss5.pid
# else
# if [ $OS = "SunOS" ]; then
# /usr/sbin/ss5 -t
# touch /var/lock/subsys/ss5
else
/usr/local/sbin/ss5 -t
touch /var/run/ss5/ss5.pid
# touch /var/lock/subsys/ss5
# fi
fi
echo "done"
;;

stop)
# Stop daemon.
echo "Shutting down ss5... "
killall ss5
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

对ss5进行配置:

修改/etc/opt/ss5 目录下的两个文件: ss5.conf and ss5.passwd

修改配置文件:
/etc/opt/ss5/ss5.conf
修改:
auth 0.0.0.0/0 – -
改成:
auth 0.0.0.0/0 – u

修改:
permit – 0.0.0.0/0 – 0.0.0.0/0 – – – – -
改成:
permit u 0.0.0.0/0 – 0.0.0.0/0 – – – – -

修改配置文件 (这一步也可以省略, 我改的启动脚本中已经带这个参数):
/etc/sysconfig/ss5
打开:SS5_OPTS=” -u root”

然后在/etc/opt/ss5/ss5.passwd中, 一行一个用户+密码

1
2
cat ss5.passwd`
test 123456

最后启动ss5, 可能第一次运行时候, 需要手动建立pid目录:

可能需要修改脚本权限:
ls -la /etc/init.d/
chmod 700 /etc/init.d/ss5

然后启动, 停止下测试:

1
2
3
4
5
6
# /etc/init.d/ss5 start
# /etc/init.d/ss5 stop

# /etc/rc.d/init.d/ss5 start
# /etc/rc.d/init.d/ss5 start
doneting ss5… [ OK ]

再重启下看看:

1
2
3
4
# /etc/rc.d/init.d/ss5 restart
Restarting ss5… Shutting down ss5…
done [ OK ]
doneting ss5… [ OK ]

没问题了, 你就可以使用服务器的IP, 端口1080, 用户test, 密码123456
来测试你的socks5服务器了, 更多高级应用, 参看ss5.conf, 里面有详细的说明.