首先安装 OpenLDAP
apt-get install slapd ldap-utils
方便起见,使用 phpLDAPadmin 的 WEBUI 来管理 OpenLDAP。
wget -P /tmp http://downloads.sourceforge.net/project/phpldapadmin/phpldapadmin-php5/1.2.0.5/phpldapadmin-1.2.0.5.tgz
cd /var/www && tar xvfz /tmp/phpldapadmin-1.2.0.5.tgz
mv phpldapadmin-1.2.0.5/config/config.php.example phpldapadmin-1.2.0.5/config/config.php
由于 phpLDAPadmin 需要 PHP 支持,如果之前没有安装过 lighttpd 及 PHP,用 aptitude 安装
apt-get install lighttpd php7-cgi php7-ldap
lighttpd-enable-mod fastcgi
/etc/init.d/lighttpd force-reload
快速测试
打开浏览器,指向 http://server/phpldapadmin-1.2.0.5,使用安装 slapd 时指定的管理员用户登录。
接下来安装 FreeRADIUS
apt-get install freeradius
修改 /etc/freeradius/users 文件,增加一行
test Cleartext-Password := "test"
重启 FreeRADIUS 是测试用户生效
/etc/init.d/freeradius restart
快速测试
radtest test test localhost 0 testing123
得到结果应该类似于
rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=4, length=20
修改 /etc/freeradius/users 文件,把刚才增加的那一行删除或注释掉,重启 FreeRADIUS,重新测试
/etc/init.d/freeradius restart
radtest test test localhost 0 testing123
得到结果应该类似于
rad_recv: Access-Reject packet from host 127.0.0.1 port 1812, id=66, length=20
接下来配置 OpenLDAP 支持 FreeRADIUS 的 schema
apt-get install freeradius-ldap
cp /usr/share/doc/freeradius/examples/openldap.schema /etc/ldap/schema/radius.schema
修改 /etc/ldap/slapd.conf 以支持 FreeRADIUS 的 schema,在开头的 include 行后增加一行
include /etc/ldap/schema/radius.schema
重启 OpenLDAP 使配置生效
/etc/init.d/slapd restart
快速测试
打开浏览器,指向 http://server/phpldapadmin-1.2.0.5,使用安装 slapd 时指定的管理员用户登录。新建一个 entry,Templates 选择 default,ObjectClasses 选择 radiusObjectProfile,Password 类型选择 clear。
接下来配置 FreeRADIUS 的 LDAP 支持
编辑 /etc/freeradius/radiusd.conf,找到 modules 下的 ldap 一节,改成如下所示 (如果 OpenLDAP 与 FreeRADIUS 不是俺装在同一台服务器上,localhost 需要改成安装 OpenLDAP 服务器的域名或 IP)
ldap {
server = "localhost"
identity = "cn=admin,dc=domain,dc=com"
password = secret
basedn = "dc=domain,dc=com"
base_filter = "(objectclass=radiusObjectProfile)"
}
编辑 /etc/freeradius/sites-enabled/default,把 authorize 下的 ldap 注释去除,把 authenticate 下 Auth-Type LDAP 一节的注释去除,如下所示
authorize {
ldap
}
authenticate {
Auth-Type LDAP {
ldap
}
}
编辑 /etc/freeradius/ldap.attrmap,增加一行
checkItem Cleartext-Password userpassword
快速测试
radtest test test localhost 0 testing123
得到结果应该类似于
rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=4, length=20
接下来安装 PoPToP
apt-get install pptpd
编辑 /etc/ppp/chap-secrets,增加一行
test * test *
重启 PoPToP
/etc/init.d/pptpd restart
快速测试
在 PC 或手机上连接 PPTP 服务器,用户名是 test,密码是 test,应该连接成功。
编辑 /etc/ppp/chap-secrets,把刚才增加的那一行删除或注释掉,重启 PoPToP
/etc/init.d/pptpd restart
在 PC 或手机上连接 PPTP 服务器,用户名是 test,密码是 test,应该不能连接成功。
最后配置 PoPToP 支持 RADIUS
apt-get install lib
编辑 /etc/ppp/pptp.options,在最后增加两行
plugin radius.so
plugin radattr.so
创建 /etc/radiusclient/dictionary.microsoft 文件,内容如下
#
# Microsoft's VSA's, from RFC 2548
#
# $Id: dictionary.microsoft,v 1.1 2002/03/06 13:23:09 dfs Exp $
#VENDOR Microsoft 311 MicrosoftATTRIBUTE MS-CHAP-Response 1 string Microsoft
ATTRIBUTE MS-CHAP-Error 2 string Microsoft
ATTRIBUTE MS-CHAP-CPW-1 3 string Microsoft
ATTRIBUTE MS-CHAP-CPW-2 4 string Microsoft
ATTRIBUTE MS-CHAP-LM-Enc-PW 5 string Microsoft
ATTRIBUTE MS-CHAP-NT-Enc-PW 6 string Microsoft
ATTRIBUTE MS-MPPE-Encryption-Policy 7 string Microsoft
# This is referred to as both singular and plural in the RFC.
# Plural seems to make more sense.
ATTRIBUTE MS-MPPE-Encryption-Type 8 string Microsoft
ATTRIBUTE MS-MPPE-Encryption-Types 8 string Microsoft
ATTRIBUTE MS-RAS-Vendor 9 integer Microsoft
ATTRIBUTE MS-CHAP-Domain 10 string Microsoft
ATTRIBUTE MS-CHAP-Challenge 11 string Microsoft
ATTRIBUTE MS-CHAP-MPPE-Keys 12 string Microsoft
ATTRIBUTE MS-BAP-Usage 13 integer Microsoft
ATTRIBUTE MS-Link-Utilization-Threshold 14 integer Microsoft
ATTRIBUTE MS-Link-Drop-Time-Limit 15 integer Microsoft
ATTRIBUTE MS-MPPE-Send-Key 16 string Microsoft
ATTRIBUTE MS-MPPE-Recv-Key 17 string Microsoft
ATTRIBUTE MS-RAS-Version 18 string Microsoft
ATTRIBUTE MS-Old-ARAP-Password 19 string Microsoft
ATTRIBUTE MS-New-ARAP-Password 20 string Microsoft
ATTRIBUTE MS-ARAP-PW-Change-Reason 21 integer MicrosoftATTRIBUTE MS-Filter 22 string Microsoft
ATTRIBUTE MS-Acct-Auth-Type 23 integer Microsoft
ATTRIBUTE MS-Acct-EAP-Type 24 integer MicrosoftATTRIBUTE MS-CHAP2-Response 25 string Microsoft
ATTRIBUTE MS-CHAP2-Success 26 string Microsoft
ATTRIBUTE MS-CHAP2-CPW 27 string MicrosoftATTRIBUTE MS-Primary-DNS-Server 28 ipaddr Microsoft
ATTRIBUTE MS-Secondary-DNS-Server 29 ipaddr Microsoft
ATTRIBUTE MS-Primary-NBNS-Server 30 ipaddr Microsoft
ATTRIBUTE MS-Secondary-NBNS-Server 31 ipaddr Microsoft#ATTRIBUTE MS-ARAP-Challenge 33 string Microsoft#
# Integer Translations
## MS-BAP-Usage ValuesVALUE MS-BAP-Usage Not-Allowed 0
VALUE MS-BAP-Usage Allowed 1
VALUE MS-BAP-Usage Required 2# MS-ARAP-Password-Change-Reason ValuesVALUE MS-ARAP-PW-Change-Reason Just-Change-Password 1
VALUE MS-ARAP-PW-Change-Reason Expired-Password 2
VALUE MS-ARAP-PW-Change-Reason Admin-Requires-Password-Change 3
VALUE MS-ARAP-PW-Change-Reason Password-Too-Short 4# MS-Acct-Auth-Type ValuesVALUE MS-Acct-Auth-Type PAP 1
VALUE MS-Acct-Auth-Type CHAP 2
VALUE MS-Acct-Auth-Type MS-CHAP-1 3
VALUE MS-Acct-Auth-Type MS-CHAP-2 4
VALUE MS-Acct-Auth-Type EAP 5# MS-Acct-EAP-Type ValuesVALUE MS-Acct-EAP-Type MD5 4
VALUE MS-Acct-EAP-Type OTP 5
VALUE MS-Acct-EAP-Type Generic-Token-Card 6
VALUE MS-Acct-EAP-Type TLS 13#
# Experimental extensions, configuration only (for check-items)
# Names/numbers as per the MERIT extensions (if possible).
#
ATTRIBUTE NAS-Identifier 32 string
ATTRIBUTE Proxy-State 33 string
ATTRIBUTE Login-LAT-Service 34 string
ATTRIBUTE Login-LAT-Node 35 string
ATTRIBUTE Login-LAT-Group 36 string
ATTRIBUTE Framed-AppleTalk-Link 37 integer
ATTRIBUTE Framed-AppleTalk-Network 38 integer
ATTRIBUTE Framed-AppleTalk-Zone 39 string
ATTRIBUTE Acct-Input-Packets 47 integer
ATTRIBUTE Acct-Output-Packets 48 integer
# 8 is a MERIT extension.
VALUE Service-Type Authenticate-Only 8
编辑 /etc/radiusclient/dictionary,在最后增加两行
INCLUDE /etc/radiusclient/dictionary.microsoft
INCLUDE /etc/radiusclient/dictionary.merit
编辑 /etc/freeradius/sites-enabled/default,把 authorize 下的 mschap 注释去除,把 authenticate 下 Auth-Type MS-CHAP 一节的注释去除,如下所示
authorize {
mschap
ldap
}
authenticate {
Auth-Type MS-CHAP {
mschap
}
Auth-Type LDAP {
ldap
}
}
编辑 /etc/radiusclient/servers,增加一行 (如果 FreeRADIUS 与 PPTP 不在同一台服务器上,localhost 需要修改为 FreeRADIUS 服务器的域名或 IP)
localhost testing123
如果 FreeRADIUS 跟 PoPToP 不是安装在同一台服务器上,还需要额外修改一些配置。
编辑 /etc/radiusclient/radiusclient.conf,把 authserver 及 acctserver 修改成安装 FreeRADIUS 服务器的域名或 IP。
编辑 /etc/freeradius/clients.conf,增加 PPTP 服务器所在网络的小节,如下所示 (pptp.domain.com 改成 PoPToP 服务器的域名或 IP)。
client pptp.domain.com {
secret = testing123
shortname = pptp
}
编辑 /etc/freeradius/radiusd.conf,找到 modules 下的 mschap 一节,改成如下所示
modules {
mschap {
use_mppe = yes
require_encryption = yes
require_strong = yes
}
}
重启 PoPToP
/etc/init.d/pptpd restart
快速测试
在 PC 或手机上连接 PPTP 服务器,用户名是 test,密码是 test,应该连接成功。