NetBox 接入AD LDAP域控认证系统

本文最后更新于 2024年5月14日 上午

简介

本文介绍了NetBox接入微软的AD LDAP认证的教程。

NetBox 系列文章:https://songxwn.com/categories/NetBox/

LADP 系列文章:https://songxwn.com/tags/ldap/

已在NetBox 3.5-4.0版本验证过.

安装

安装系统基础软件包

1
2
3
4
sudo yum install -y openldap-devel python3-devel
# RHEL 系列
sudo apt install -y libldap2-dev libsasl2-dev libssl-dev
# Debian 系列

安装Python 软件包

1
2
source /opt/netbox/venv/bin/activate
pip3 install django-auth-ldap

将ldap包加入本地包列表,用于之后升级安装

1
sudo sh -c "echo 'django-auth-ldap' >> /opt/netbox/local_requirements.txt"

配置

1
2
3
4
5
vim configuration.py


REMOTE_AUTH_BACKEND = 'netbox.authentication.LDAPBackend'
# 打开配置文件,增加开启LDAP认证后端的配置。

LDAP配置文件

1
2
3
vim /opt/netbox/netbox/netbox/ldap_config.py
# 创建并打开LDAP配置文件。下面是示例
# 配置完成后,执行systemctl restart netbox 生效。

配置实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import ldap

# 引入LDAP库



AUTH_LDAP_SERVER_URI = "ldap://songxwn.com"

# 修改为你的域控的主域名,如果未配置DNS为域控,可以为IP地址。

AUTH_LDAP_CONNECTION_OPTIONS = {
ldap.OPT_REFERRALS: 0
}

# 如果您要绑定到 Active Directory,则需要此配置。不需要修改



AUTH_LDAP_BIND_DN = "CN=admin,CN=Users,DC=songxwn,DC=com"
AUTH_LDAP_BIND_PASSWORD = "admin@passowrd"


# 设置 NetBox LDAP 服务帐户的 DN 和密码。 (有权限访问索引所有账号的域账号即可,调试初期建议用域管理员)。账号路径建议用ADSI工具查看。

LDAP_IGNORE_CERT_ERRORS = True


# 如果您想忽略证书错误,请包含此设置。 配置为接受自签名证书。不需要修改
# 请注意,这是 NetBox 特定的设置,它设置为: ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER)


from django_auth_ldap.config import LDAPSearch


# 此搜索将匹配 sAMAccountName 等于所提供用户名的用户。 如果用户的用户名不在他们的 DN (Active Directory) 中话。

AUTH_LDAP_USER_SEARCH = LDAPSearch("DC=songxwn,DC=com",
ldap.SCOPE_SUBTREE,
"(sAMAccountName=%(user)s)")



# 如果用户的 DN 可以从用户名中产生,我们就不需要搜索。



AUTH_LDAP_USER_ATTR_MAP = {
"first_name": "givenName",
"last_name": "sn",
"email": "mail"
}


# 您可以将用户属性映射到 Django 属性。

from django_auth_ldap.config import LDAPSearch, GroupOfNamesType
AUTH_LDAP_GROUP_SEARCH = LDAPSearch("DC=songxwn,DC=com", ldap.SCOPE_SUBTREE,
"(objectClass=group)")
AUTH_LDAP_GROUP_TYPE = GroupOfNamesType()


# 此搜索应该返回用户所属的所有组。 django_auth_ldap 使用它来确定组。注意修改DC路径。


from django_auth_ldap.config import LDAPGroupQuery
AUTH_LDAP_REQUIRE_GROUP = (
LDAPGroupQuery("CN=IT1,CN=Users,DC=songxwn,DC=com")
| LDAPGroupQuery("CN=IT2,CN=Users,DC=songxwn,DC=com")
)

# 定义允许登录的安全组。


AUTH_LDAP_MIRROR_GROUPS = True
AUTH_LDAP_USER_FLAGS_BY_GROUP = {
"is_active": ["CN=IT1,CN=Users,DC=songxwn,DC=com", "CN=IT2,CN=Users,DC=songxwn,DC=com"]
}

# 配置LDAP 安全组映射的django 权限。有is_active、is_staff、is_superuser 。 默认激活状态即可。

# 域控安全组和Django 安全组映射可以在Web界面配置。

AUTH_LDAP_CACHE_TIMEOUT = 360

# 配置LDAP缓存时间,防止频繁访问LDAP服务器。

配置实例说明

  • 域控服务器的域名为 songxwn.com

  • 增加了两个组可以登录netbox,为 IT1 和 IT2

  • 使用了admin作为netbox对接域控的接入账号

  • 安全组和组织架构,建议用ADSI查看路径。

使用

域控账号不加域控,直接用用户名登录。 账号权限和组权限由NetBox管理。

LDAP接入排错

configuration.py 增加以下配置让ldap输出日志到/opt/netbox/local/logs/django-ldap-debug.log。

PS:注意log文件权限需netbox用户可读写。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'netbox_auth_log': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'filename': '/opt/netbox/local/logs/django-ldap-debug.log',
'maxBytes': 1024 * 500,
'backupCount': 5,
},
},
'loggers': {
'django_auth_ldap': {
'handlers': ['netbox_auth_log'],
'level': 'DEBUG',
},
},
}

参考

https://docs.netbox.dev/en/stable/installation/6-ldap/

中文社区微信群

可发送微信号到邮箱➡️ me@songxwn.com


NetBox 接入AD LDAP域控认证系统
https://songxwn.com/NetBox-LDAP/
作者
Song
发布于
2024年4月27日
更新于
2024年5月14日
许可协议