Pptp+FreeRadius+Ldap实现×××用户认证
由于公司使用OpenLDAP统一管理员工的账号密码信息而现在需要搭建×××以方便出差员工能访问公司内部网络在对比流行的几种×××类型后,选择了PPTP方式。
Open×××/ipsec ×××虽然安全性比较高,但操作较麻烦,而公司大多数的员工对电脑都不是太懂,所以放弃。
PS: 本人只讲如何结合PPTP+Freeradius+LDAP,并不涉及PPTP及LDAP的配置
系统环境: Centos 6.4 x86_64 已经配置好PPTP及LDAP配置Radius
1.安装Radius:2.测试
编辑/etc/raddb/users
,在最后加入一行test Cleartext-Password := "123456"
启动radius测试服务器是否连通
如果看到Access-Accept就说明连接成功了。如果看到类似“Ignoring request to authentication address * port 1812 from unknownclient”的文字, 可能需要去修改
/etc/raddb/clients.conf
,将client localhost
段下的ipaddr
改为服务器的IP,而不是127.0.0.1。在测试成功之后,就可以将
/etc/raddb/users
中添加的内容删除掉了3. 下载ppp源码,需要用到其中radius的配置文件
[root@ldap ~]# wgetftp://ftp.samba.org/pub/ppp/ppp-2.4.5.tar.gz
[root@ldap ~]# tar zxvf ppp-2.4.5.tar.gz
[root@ldap ~]# cp
-R
/root/ppp-2.4.5/pppd/plugins/radius/etc/ /etc/radiusclient
4. 编辑
/etc/radiusclient/servers
,添加服务器和密钥5. 下载
dictionary.microsoft
字典文件
[root@ldap ~]# wget https://small-script.googlecode.com/files/dictionary.microsoft
[root@ldap ~]# cp dictionary.microsoft /etc/radiusclient/
-f
6. 更改
/etc/radiusclient/dictionary
文件
在文件末尾加入两行
INCLUDE /etc/radiusclient/dictionary.merit
INCLUDE /etc/radiusclient/dictionary.microsoft7. 修改 /etc/raddb/clients.conf 文件
8. 更改 /etc/raddb/radiusd.conf
[root@ldap ~]# grep
-v
'#' /etc/raddb/radiusd.conf | grep
-v
'^$'
prefix = /usr
exec_prefix = /usr
sysconfdir = /etc
localstatedir = /var
sbindir = /usr/sbin
logdir = ${localstatedir}/log/radius
raddbdir = ${sysconfdir}/raddb
radacctdir = ${logdir}/radacct
name = radiusd
confdir = ${raddbdir}
run_dir = ${localstatedir}/run/${name}
db_dir = ${raddbdir}
libdir = /usr/lib64/freeradius
pidfile = ${run_dir}/${name}.pid
user = radiusd
group = radiusd
max_request_time = 30
cleanup_delay = 5
max_requests = 1024
listen {
type = auth
ipaddr = *
port = 0
}
listen {
ipaddr = *
port = 0
type = acct
}
hostname_lookups = no
allow_core_dumps = no
regular_expressions = yes
extended_expressions = yes
log {
destination = files
file = ${logdir}/radius.log
syslog_facility = daemon
stripped_names = no
auth = no
auth_badpass = no
auth_goodpass = no
}
checkrad = ${sbindir}/checkrad
security {
max_attributes = 200
reject_delay = 1
status_server = yes
}
proxy_requests = yes
$INCLUDE proxy.conf
$INCLUDE clients.conf
thread pool {
start_servers = 5
max_servers = 32
min_spare_servers = 3
max_spare_servers = 10
max_requests_per_server = 0
}
modules {
mschap {
use_mppe = yes
require_encryption = yes
require_strong = yes
}
$INCLUDE ${confdir}/modules/
$INCLUDE eap.conf
}
instantiate {
exec
expr
expiration
logintime
}
$INCLUDE policy.conf
$INCLUDE sites-enabled/
9. 编辑 /etc/raddb/sites-available/default
authorize {
preprocess
chap
mschap
digest
suffix
eap {
ok = return
}
files
ldap
expiration
logintime
pap
}
authenticate {
Auth-Type PAP {
pap
}
Auth-Type CHAP {
chap
}
Auth-Type MS-CHAP {
mschap
}
digest
unix
Auth-Type LDAP {
ldap
}
eap
}
preacct {
preprocess
acct_unique
suffix
files
}
accounting {
detail
unix
radutmp
exec
attr_filter.accounting_response
}
session {
radutmp
}
post-auth {
exec
Post-Auth-Type REJECT {
attr_filter.access_reject
}
}
pre-proxy {
}
post-proxy {
eap
}
10. 编辑 /etc/raddb/modules/ldap
[root@ldap ~]# grep
-v
'#' /etc/raddb/modules/ldap | grep
-v
'^$'
ldap {
server = "localhost"
identity = "cn=root,dc=verystar,dc=cn"
password = 此处为LDAP root的密码
basedn = "ou=Users,dc=verystar,dc=cn"
filter = "(uid=%{%{Stripped-User-Name}:-%{User-Name}})"
password_attribute = userPassword
ldap_connections_number = 5
timeout = 4
timelimit = 3
net_timeout = 1
tls {
start_tls = no
}
dictionary_mapping = ${confdir}/ldap.attrmap
edir_account_policy_check = no
keepalive {
idle = 60
probes = 3
interval = 3
}
}
11. 编辑 /etc/raddb/proxy.conf
[root@ldap ~]# grep
-v
'#' /etc/raddb/proxy.conf | grep
-v
'^$'
proxy server {
default_fallback = no
}
home_server localhost {
type = auth
ipaddr = 127.0.0.1
port = 1812
secret = testing123
require_message_authenticator = yes
response_window = 20
zombie_period = 40
revive_interval = 120
status_check = status-server
check_interval = 30
num_answers_to_alive = 3
max_outstanding = 65536
coa {
irt = 2
mrt = 16
mrc = 5
mrd = 30
}
}
home_server_pool my_auth_failover {
type = fail-over
home_server = localhost
}
realm example.com {
auth_pool = my_auth_failover
}
realm LOCAL {
type = radius
authhost = LOCAL
accthost = LOCAL
}
realm NULL {
authhost = LOCAL
accthost = LOCAL
secret = My×××
type = radius
nostrip
}
# 更改最后两段就行了
12. 为LDAP添加radius支持
13. 修改 /etc/ppp/options.pptpd ,添加对radius的支持
在文件最后添加以下三行
plugin /usr/lib64/pppd/2.4.5/radius.so
plugin /usr/lib64/pppd/2.4.5/radattr.so
radius-config-file /etc/radiusclient/radiusclient.conf14.修改 /etc/radiusclient/radiusclient.conf ,将里面所有配置文件路径由 /usr/local/etc/xxx 改为 /etc/xxx
[root@ldap ~]# grep
-v
'#' /etc/radiusclient/radiusclient.conf | grep
-v
'^$'
auth_order radius
login_tries 4
login_timeout 60
nologin /etc/nologin
issue /etc/radiusclient/issue
authserver localhost:1812
acctserver localhost:1813
servers /etc/radiusclient/servers
dictionary /etc/radiusclient/dictionary
login_radius /usr/local/sbin/login.radius
seqfile /var/run/radius.seq
mapfile /etc/radiusclient/port-id-map
default_realm
radius_timeout 10
radius_retries 3
login_local /bin/login
15. 重启 radius / pptpd / slapd
本文固定链接: http://www.avamar.cn/?p=1471 | Nian`s blog