瑞瑞哥的博客

Ubuntu 16.04.02LTS 搭建dante-server作为socks代理服务器

Ubuntu 16.04.02LTS 搭建dante-server作为socks代理服务器

安装

根据这篇文章所说,dante-server在apt-get源里的版本是1.1.19,有个bug,会导致不能使用系统的账号密码登陆,所以我们要下载最新代码编译它。Bug存在于Ubuntu 14.04,但是我发现最新的16.04也存在。

我们来下载最新版,编译安装:

1
2
3
4
5
6
7
wget https://www.inet.no/dante/files/dante-1.4.2.tar.gz
tar -xvzf dante-1.4.2.tar.gz
cd dante-1.4.2/
apt-get install gcc make
./configure
make
sudo make install

编译完成后我们发现高版本的叫做sockd,不过这个没关系就是换个名字:

1
2
3
4
5
root@test:~/install/dante-server/dante-1.4.2# sockd -v
Dante v1.4.2. Copyright (c) 1997 - 2014 Inferno Nettverk A/S, Norway

root@test:~/install/dante-server/dante-1.4.2# which sockd
/usr/local/sbin/sockd

配置

danted-server里面有两种规则:

  • 以client开头的

    以client开头的规则会先被检查 – 检查谁被允许连接到服务器(danted-server),谁不被允许连接到服务器。

    其中,from 代表来源,to代表服务器监听的IP地址(因为服务器可能有多个IP,监听哪一个就是在这里配置的)。

  • 没有client开头

    没有client开头的规则会在后面被检查,大概什么时候呢?就是客户端把请求发给服务器的时候,用来检查客户端实际的请求。

    其中,from仍然代表请求来源,和上面的规则一样;但是to在这里表示请求的目的服务器地址。

配置文件如下,你可以把它放在编译目录内,我是把它放在/etc/danted.conf

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
# 日志输出
logoutput: /var/log/danted.log
# 表示进口IP或者网卡,如果是双网卡,那么会和出口的不一样
internal: 0.0.0.0 port = 1081
# 表示出口IP或者网卡,也就是所谓的上行链路
external: 113.20.157.159

# 用户认证
method: username
# 如果做了什么需要特权的事情,就动用下面的用户
user.privileged: root
# 如果正常使用,就使用下面这个非特权账号
user.notprivileged: socks5
# 如果编译时候有libwrap支持,执行libwrap命令时需要libwrap
user.libwrap: nobody

# 允许任何地址访问服务器的任何网卡
client pass {
from: 0.0.0.0/0 port 1-65535 to: 0.0.0.0/0
log: connect disconnect
}
# 不允许访问127开头的网段,记住127开头的都是内部的,不应该让它访问
block {
from: 0.0.0.0/0 to: 127.0.0.0/8
log: connect error
}
# 不允许访问 169.254.0.0/16
block {
from: 0.0.0.0/0 to: 169.254.0.0/16
log: connect error
}
# 不允许访问 10.0.0.0/8
block {
from: 0.0.0.0/0 to: 10.0.0.0/8
log: connect error
}
# 不允许访问 172.16.0.0/12
block {
from: 0.0.0.0/0 to: 172.16.0.0/12
log: connect error
}
# 不允许访问 192.168.0.0/16
block {
from: 0.0.0.0/0 to: 192.168.0.0/16
log: connect error
}
# 不允许访问 224.0.0.0/4
block {
from: 0.0.0.0/0 to: 224.0.0.0/4
log: connect error
}
# 不允许访问 240.0.0.0/4
block {
from: 0.0.0.0/0 to: 240.0.0.0/4
log: connect error
}
# 允许任何场景下bind 1023以上的端口?
pass {
from: 0.0.0.0/0 to: 0.0.0.0/0 port gt 1023
command: bind
log: connect disconnect
}
# 允许bind-replay
pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
command: bindreply udpreply
log: connect error
}
# 允许用tcp和udp做一切事情
pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
protocol: tcp udp
log: connect disconnect
}
# 默认阻值
block {
from: 0.0.0.0/0 to: 0.0.0.0/0
log: connect error
}

新增用户

在上面的配置文件里面,我们采用的认证方式是用户认证,说白了就是要和Linux的账号密码一样,那么我们新建一个账户用来运行sockd,顺便可以用它来作为代理的用户。

为了更好的安全性,建议对账号的权限、密码、shell等内容进行控制

1
2
sudo useradd socks5 # 这个用户名和上文配置文件里写的对应
sudo passwd socks5

运行

1
sockd -f /etc/danted.conf -D

再试试,是不是账号密码能验证通过了?

将sockd注册为服务

可以看看我的这篇关于Ubuntu如何添加服务的教程,里面的例子正好是sockd的,改都不用改。

参考:

http://blog.sina.com.cn/s/blog_704836f401019vkt.html

http://www.mikewootc.com/wiki/linux/usage/ubuntu_dante_server.html