dante是一个很好的socks代理,同时有服务器和客户端的功能,现在我只说服务器部分。
pam是linux的通用认证模块,可以ls一下/etc/pam.d/,看看内容就明白了。
pam_mysql: http://pam-mysql.sourceforge.net/Documentation/install.php?seemore=y , 用于把pam认证的信息,映射到mysql里面,方便web存取。
我主要参考了参考文章[1],这里给出我的配置。
1.需要安装的软件 dante(后面我附上一个archlinux的PKGBUILD),mysql,pam_mysql。
2. mysql的数据表:
表 logs:
+---------+--------------+------+-----+-------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+-------------------+-------+
| msg | varchar(255) | YES | | NULL | |
| user | varchar(50) | YES | | NULL | |
| pid | int(10) | YES | | NULL | |
| host | char(32) | YES | | NULL | |
| rhost | char(32) | YES | | NULL | |
| logtime | timestamp | NO | | CURRENT_TIMESTAMP | |
+---------+--------------+------+-----+-------------------+-------+
这个表,我发现应该是没有作用的,不过建立也没关系。
表 user:
+----------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| username | varchar(50) | YES | | NULL | |
| password | varchar(30) | YES | | NULL | |
| comment | varchar(255) | YES | | NULL | |
+----------+--------------+------+-----+---------+-------+
用于存放用户数据,密码的加密方式,情看后面的配置。
3. pam_mysql 的配置:
建立 /etc/pam.d/sockd 文件,内容:
auth required /lib/security/pam_mysql.so user=sockd passwd=8123196 host=localhost db=sockd table=user usercolumn=username passwdcolumn=password crypt=0 logtable=logs logmsgcolumn=msg logusercolumn=user logpidcolumn=pid loghostcolumn=host logtimecolumn=logtime
account required /lib/security/pam_mysql.so user=sockd passwd=8123196 host=localhost db=sockd table=user usercolumn=username passwdcolumn=password crypt=2 logtable=logs logmsgcolumn=msg logusercolumn=user logpidcolumn=pid loghostcolumn=host logrhostcolumn=rhost logtimecolumn=logtime
上面的内容,指定了认证的项目,pam_mysql的路径,mysql存取用户,以及最表和字段到认证字段的映射。
4. /etc/sockd.conf 的内容:
internal: eth0 port = 1080 # 内网入口
external: eth0 # 出口网卡
method: username none pam # 认证方式
user.notprivileged: nobody
logoutput: /var/log/danted.log
connecttimeout: 30
# 通过的客户端
client pass {
from: 192.168.0.0/16 to: 0.0.0.0/0
log: connect disconnect # 记录的内容
}
# 阻止其他客户端
client block {
from: 0.0.0.0/0 to: 0.0.0.0/0
log: connect error
}
# 允许的数据流
pass {
from: 0.0.0.0/0 to: 0.0.0.0/0 port gt 0
command: bind
log: connect disconnect
method: pam # 这里指定pam认证,然后/etc/pam.d/sockd指定pam认证的方式
}
pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
protocol: tcp udp
log: connect disconnect
method:pam
}
我对内网进行用户认证,如果需要ip认证,直接指定单独的client pass就行了。
5. mysql添加新用户
grant select,update,insert on sockd.* to sockd@localhost identified by "8123196"
完毕了,请提意见
参考:
[1] http://www.360doc.com/showWeb/0/0/251512.aspx
[2] man sockd
[3] man sockd.conf