nginx中如何接入ldap认证

2,127 阅读3分钟

本文已参与 \lceil新人创作礼\rfloor 活动,一起开启掘金创作之路

出于安全考虑,最近公司要求对pinpoint这种不带用户名密码保护的站点进行用户登录认证,接到这个任务的第一个想法是使用nginx的简单用户认证,但是维护用户是个比较麻烦的工作,所以特意研究了下能否接入ldap这种统一认证方式,今天给大家分析下。

1、部署openldap,因为我的都是linux机器所以首选openldap,而没有使用AD域控。

1)部署docker环境

不赘述,可以参考官方文档一键部署

2)启动openldap

# docker run -itd \

--name ldap-service \

--hostname ldap-service \

-p 389:389 -p 689:689 \

-v /data/openldap/database:/var/lib/ldap \

-v /data/openldap/config:/etc/ldap/slapd.d \

--env LDAP_ORGANISATION="wuqingyan.top" \

--env LDAP_DOMAIN="wuqingyan.top" \

--env LDAP_ADMIN_PASSWORD="20220423" \

--env LDAP_TLS=false \

--detach \

osixia/openldap:1.4.0

3)部署ldap管理服务phpldapAdmin

# docker run -itd \

--name phpldapadmin-service \

-p 80:80 \

--hostname phpldapadmin-service \

--link ldap-service:wuqingyan.top \

--env PHPLDAPADMIN_LDAP_HOSTS=wuqingyan.top \

--env PHPLDAPADMIN_HTTPS=false \

--detach \

osixia/phpldapadmin:0.9.0

4)配置ldap,浏览器打开http://IP

登录ldap:

图片

图片

图片

添加ou:

图片

图片

图片

图片

图片

图片

添加用户:

图片

图片用户名:zhangsan  密码:123456

图片

图片

图片

2、部署一个不带认证的测试站点,这里部署一个tomcat作为示例,实际应用中可能是kibana、pinpoint、skywalking这种系统。

# docker run -itd --name mytomcat \

-p 8080:8080 \

-v /usr/local/tomcat/webapps/ROOT:/usr/local/tomcat/webapps/ROOT \

tomcat:8

# echo "hello world" > /usr/local/tomcat/webapps/ROOT/test.html

浏览器访问测试:http://IP/test.html\

图片

3、配置nginx
1)安装nginx

# yum install epel-release -y

# yum install nginx -y

# systemctl start nginx

这里应该会失败,因为前面phpldapadmin已经占用80端口了,可以把phpldapadmin换个端口启动,再启动nginx。

# docker stop phpldapadmin-service && docker rm phpldapadmin-service

# docker run -itd \

--name phpldapadmin-service \

-p 8000:80 \

--hostname phpldapadmin-service \

--link ldap-service:wuqingyan.top \

--env PHPLDAPADMIN_LDAP_HOSTS=wuqingyan.top \

--env PHPLDAPADMIN_HTTPS=false \

--detach \

osixia/phpldapadmin:0.9.0

2)检查nginx是否已安装http_auth_request_module模块

# nginx -V 

图片

3)代理tomcat

# vim /etc/nginx/conf.d/tomcat.conf

图片

# nginx -t && nginx -s reload

浏览器访问测试:

图片

可以看到不需要任何认证就能访问到tomcat服务,接下来我们配置ldap认证

4)配置ldap认证


# yum install python-ldap git -y

# git clone https://github.com/nginxinc/nginx-ldap-auth.git

# cd nginx-ldap-auth

# nohup python ./nginx-ldap-auth-daemon.py > /tmp/auth.log 2>&1 &

# nohup python ./backend-sample-app.py > /tmp/login.log 2>&1 &

nginx-ldap-auth-daemon.py 为认证服务

backend-sample-app.py 为登录服务,在里面可以做自定义登录页面

# vim /etc/nginx/conf.d/tomcat.conf

图片

# nginx -t && nginx -s reload

浏览器访问tomact的代理页面htpp://IP/test.html测试,可以看到已经需要输入用户名密码才能访问了,这里的用户名密码就是ldap中的用户,比如之前的zhangsan/123456

图片

验证通过后就可以看到tomcat的服务页面了:

图片

可以在phpldapadmin中新增一个用户测试:

图片

图片

图片

图片

图片

图片

图片

如果大家觉得登录页面丑陋,可以自行修改backend-sample-app.py 中的这段就好:

图片

本人一直在从事devops运维相关工作,欢迎大家关注我的个人公众[运维小白成长之路],会不定期更新运维相关经验分享,希望能和大家一起成长~~