发新话题
打印

用dante+pam_mysql搭建socks5代理

用dante+pam_mysql搭建socks5代理

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
Fluke's Blog
I'm a user.
发新话题