Freeradius 整合 LDAP over PAP認證協定

一般在企業內部,當有一定規模的時候,會建立帳號集中管理機制,較常見的會使用Microsoft Active Directory, LDAP(OpenLDAP, Sun Directory Server…)。

Freeradius將此類定義為Datastore module,並且建議搭配使用CHAP, MS-CHAP, EAP之類的加密認證機制,以提高安全性。

此篇則採用較容易實作的PAP方式,也就是綁定使用者,並且使用User-Password這個Attribute來傳輸認證。

由於是PAP,要注意密碼洩漏的安全性問題,畢竟是明碼傳輸。

若需要使用802.1x機制,可以參考此篇 Freeradius 整合 Active Directory 認證(Multiple Domains模式)

基本環境

  • CentOS 7.9
  • Freeradius 3.0.21

mods-available/ldap

編輯ldap模組參數

1
[root@localhost ~]# vim /etc/raddb/mods-available/ldap
1
2
3
4
5
6
7
8
9
10
ldap {
server = 'srv.ldap.local'
identity = 'cn=admin,dc=ldap,dc=local'
password = '<admin password>'
base_dn = 'dc=ldap,dc=local'
user {
base_dn = "${..base_dn}"
filter = "(cn=%{%{Stripped-User-Name}:-%{User-Name}})"
}
}

mods-enabled/ldap

建立soft link將ldap module啟用

1
2
[root@localhost ~]# cd /etc/raddb/mods-enabled
[root@localhost /etc/raddb/mods-enabled]# ln -s ../mods-available/ldap ldap

policy.d/ldap

新增一個ldap檔案,將以下policy規則加入

1
2
3
4
5
6
7
ldap.authorize {
if (User-Password && !control:Auth-Type) {
update control {
Auth-Type := LDAP
}
}
}

當Access-Request於authorize階段,檢查這個session是否帶了User-Password Attribute,並且未定義Auth-Type,當條件成立,更新Auth-Type的值為LDAP

site-available/default

將authorize section裡的-ldap改成ldap,並取消註解

1
2
3
4
5
6
7
authorize {

# -ldap
ldap

...
}

將authenticate section裡的Auth-Type LDAP取消註解

1
2
3
4
5
6
7
8
9
10
11
12
authenticate {

# Auth-Type LDAP {
# ldap
# }

Auth-Type LDAP {
ldap
}

...
}

上述動作完成後就可以使用radtest來驗證。

1
[root@localhost ~]# radtest <user> <userpassword> localhost 0 testing123