Nginx集成ldap认证

前言

公司外面有一些外包人员需要登陆公司非常重要的后台管理系统,显然直接放开外网是不安全的,前段时间是让后台对vpn的ip开放,然后需要的人连接vpn再访问后台。只是手机端的vpn客户端不太友好,然后找到了这个集成ldap的认证方案。

环境

centos 7.6
nginx 1.20
python 2.7.5

尝鲜

认证页面PC

1627636939(1).png

认证页面手机

1627637049(1).png

nginx编译安装

依赖安装

yum install gcc  gcc-c++  make pcre-devel zlib-devel openssl-devel

nginx 源码包下载

http://nginx.org/download/nginx-1.20.1.tar.gz

编译安装

./configure --prefix=/data/service/nginx --with-http_realip_module --with-http_ssl_module --with-http_sub_module --with-http_auth_request_module --with-http_stub_status_module
make && make install

编译没啥特别的,出现错误自行解决奥
已安装nginx服务的话, 通过 nginx -V 检查是否支持编译时是否添加 --with-http_auth_request_module,因为认证需要用到ngx_http_auth_request_module,如果不支持,需要重新编译添加

登陆认证脚本

backend-sample-app.py:提供登录服务
nginx-ldap-auth-daemon.py:提供认证服务
仓库地址

https://gitee.com/fanzhi1/nginx-ldap-auth.git

脚本需要ldap模块支持: yum install python-ldap -y

接下来把两个脚本运行起来:

nohup python backend-sample-app.py > login.log 2>&1 &
nohup python nginx-ldap-auth-daemon.py --host 0.0.0.0 >auth.log 2>&1 &

脚本默认监听localhost,根据需要自行修改。

nginx 配置

nginx ldap认证 配置
在需要认证的server里加入以下:

location / {
#auth_basic "Welcome to solr";
#auth_basic_user_file /etc/nginx/conf.d/.htpasswd;
auth_request /auth-proxy;
error_page 401 403 =200 /login;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#需要认证的服务
proxy_pass http://dev-solr:8983;
}

location /login {
#登录服务
proxy_pass http://127.0.0.1:9000/login;
proxy_set_header X-Target $request_uri;
}

location = /auth-proxy {
internal;
#认证服务
proxy_pass http://127.0.0.1:8888;
proxy_cache_key "$http_authorization$cookie_nginxauth";
proxy_cache_valid 200 403 1m;

proxy_pass_request_body off;
proxy_set_header Content-Length "";
proxy_set_header X-Ldap-URL "ldap://ldap.xxxx.net:389";
proxy_set_header X-Ldap-BaseDN "DC=ldap,DC=xxxx,DC=net";
#proxy_set_header X-Ldap-Template "(|([email protected])([email protected]))";
proxy_set_header X-Ldap-BindDN "cn=Manager,dc=ldap,dc=xxxxx,dc=net";
proxy_set_header X-Ldap-BindPass "xxxxxxx";
proxy_set_header X-CookieName "nginxauth";
proxy_set_header Cookie nginxauth=$cookie_nginxauth;
}

你可能感兴趣的:(Nginx集成ldap认证)