Nginx 結(jié)合Python Ldap認證用于Kibana權(quán)限登陸

參考及依賴

https://github.com/nginxinc/nginx-ldap-auth
http://nginx.org/
nginx-1.14.2
http_auth_request_module
nginx-ldap-auth
python2.7
python-ldap

Nginx支持ldap

  1. 部署nginx,注意需要http_auth_request_module支持
wget http://nginx.org/download/nginx-1.14.2.tar.gz
tar zxvf nginx-1.14.2.tar.gz
cd nginx-1.14.2
./configure --with-http_auth_request_module
make
make install
/usr/local/nginx/sbin/nginx
  1. 配置nginx,注意ldap配置
    cat /usr/local/nginx/conf/nginx.conf
user                  nobody nobody;
worker_processes auto;
#worker_cpu_affinity auto;
worker_rlimit_nofile 65535;

error_log             logs/error.log;
pid                   logs/nginx.pid;

events {
    use epoll;
    #reuse_port on;   #used in tengine and linux kernel >= 3.9
    accept_mutex off;  #used in nginx
    worker_connections  65535;
}

http {
    include                     mime.types;
    default_type                application/octet-stream;
    server_tokens               off;

    log_format      main        '$remote_addr - $remote_user [$time_local] "$request" '
                                '$status $request_time $body_bytes_sent "$http_referer" '
                                '"$http_user_agent" "$http_x_forwarded_for"|body: $request_body';

    sendfile                    on;
    tcp_nopush                  on;
    tcp_nodelay                 on;
    keepalive_timeout           60;

    gzip                        on;
    gzip_vary                   on;
    gzip_comp_level             5;
    gzip_buffers                16 4k;
    gzip_min_length             1000;
    gzip_proxied                any;
    gzip_disable                "msie6";
    gzip_types                  text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript application/json;

    open_file_cache max=1000    inactive=20s;
    open_file_cache_valid       30s;
    open_file_cache_min_uses    2;
    open_file_cache_errors      on;

    client_max_body_size        50m;
    
    #緩存可以減少ldap驗證頻率酒来,不然每個頁面都需要ldap驗證一次
    #你不在乎的話,不要緩存也是沒有任何問題的 
    proxy_cache_path cache/ keys_zone=auth_cache:10m;

#kibanan
upstream kibana_server {
    server 10.2.8.44:5601;
}

server {
    listen 5601;
    server_name localhost;
    access_log logs/kibanan_access.log main;
    error_log logs/kibanan_error.log debug;

    #后端程序喳魏,也就是kubernetes-dashboard
    location / {
        auth_request /auth-proxy;

        #nginx接收到nginx-ldap-auth-daemon.py返回的401和403都會重新跳轉(zhuǎn)到登錄頁面
        error_page 401 403 =200 /login;

        proxy_pass http://kibana_server;
    }

    #登錄頁面炉媒,由backend-sample-app.py提供鳖谈,跑在同一臺機器的8082端口(默認不是8082端口)
    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;     #nginx-ldap-auth-daemon.py運行端口
        #緩存設(shè)置
        proxy_cache auth_cache;
        proxy_cache_key "$http_authorization$cookie_nginxauth";
        proxy_cache_valid 200 403 10m;
        
        proxy_pass_request_body off;
        proxy_set_header Content-Length "";

        #最最重要的ldap配置,請務(wù)必按照貴公司的ldap配置如下四項尉共,我在這一步卡了好久,就是ldap配置不對
        #這些配置都會通過http頭部傳遞給nginx-ldap-auth-daemon.py腳本
        proxy_set_header X-Ldap-URL      "ldap://192.168.88.88:389";
        proxy_set_header X-Ldap-BaseDN   "ou=People,dc=che,dc=org";
        proxy_set_header X-Ldap-BindDN   "cn=OPITUser,ou=OuterUser,dc=che,dc=org";
        proxy_set_header X-Ldap-BindPass "opit@minminmsn";
        proxy_set_header X-Ldap-Template "(uid=%(username)s)";

        proxy_set_header X-CookieName "nginxauth";
        proxy_set_header Cookie nginxauth=$cookie_nginxauth;
    }
}
}

Python Ldap認證

wget https://github.com/nginxinc/nginx-ldap-auth/archive/0.0.4.tar.gz
tar zxvf 0.0.4.tar.gz
python nginx-ldap-auth-daemon.py &

后端登陸跳轉(zhuǎn)頁面

默認頁面只能測試弃锐,這里需要大概改下才能使用
vim backend-sample-app.py
python backend-sample-app.py &
backend-sample-app.py其中html=``````修改后如下

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf8"/>
<title>login</title>
</head>
<style>
*{margin:0;padding:0;}
.login{
width:400px;
height:220px;
margin:0 auto;
position:absolute;
left:35%;
top:25%;
}
.login_title{
color: #000000;
font: bold 14px/37px Arial,Helvetica,sans-serif;
height: 37px;
padding-left: 35px;
text-align: left;
}

.login_cont {
    background: none repeat scroll 0 0 #FFFFFF;
    border: 1px solid #B8B7B7;
    height: 152px;
    padding-top: 30px;
}
.form_table {
    float: left;
    margin-top: 10px;
    table-layout: fixed;
    width: 100%;
}
.form_table th {
    color: #333333;
    font-weight: bold;
    padding: 5px 8px 5px 0;
    text-align: right;
    white-space: nowrap;
}
.form_table td {
    color: #717171;
    line-height: 200%;
    padding: 6px 0 5px 10px;
    text-align: left;
}
.login_cont input.submit {
    background-position: 0 -37px;
    height: 29px;
    margin: 10px 14px 0 0;
    width: 38px;
}
</style>
<body>
    <div class="login">
        <div class="login_cont">
            <form action='/login' method='post'>
                <table class="form_table">
                    <col width="60px" />
                    <col />
                        <p align="center">  歡迎登陸kibana管理平臺</p>
                        <p align="center">  請使用郵箱賬戶密碼登陸</p>
                    <tr>
                        <th>用戶名:</th><td><input class="normal" type="text" name="username" alt="請?zhí)顚懹脩裘? /><th>@minminmsn.com</th></td>
                    </tr>
                    <tr>
                        <th>密   碼:</th><td><input class="normal" type="password" name="password" alt="請?zhí)顚懨艽a" /></td>
                    </tr>
                    <tr>
                        <th></th><td><input class="submit" type="submit" value="登錄" /><input class="submit" type="reset" value="取消" /></td>
                    </tr>
                </table>
                    <input type="hidden" name="target" value="TARGET">
            </form>
        </div>
    </div>
</body>
</html>

登陸測試

http://192.168.88.188:5601/


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末袄友,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子霹菊,更是在濱河造成了極大的恐慌剧蚣,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異鸠按,居然都是意外死亡礼搁,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門目尖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來馒吴,“玉大人,你說我怎么就攤上這事卑雁∧际椋” “怎么了?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵测蹲,是天一觀的道長莹捡。 經(jīng)常有香客問我,道長扣甲,這世上最難降的妖魔是什么篮赢? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮琉挖,結(jié)果婚禮上启泣,老公的妹妹穿的比我還像新娘。我一直安慰自己示辈,他們只是感情好寥茫,可當(dāng)我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著矾麻,像睡著了一般纱耻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上险耀,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天弄喘,我揣著相機與錄音,去河邊找鬼甩牺。 笑死蘑志,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的贬派。 我是一名探鬼主播急但,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼赠群!你這毒婦竟也來了羊始?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤查描,失蹤者是張志新(化名)和其女友劉穎突委,沒想到半個月后柏卤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡匀油,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年缘缚,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片敌蚜。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡桥滨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出弛车,到底是詐尸還是另有隱情齐媒,我是刑警寧澤,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布纷跛,位于F島的核電站喻括,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏贫奠。R本人自食惡果不足惜唬血,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望唤崭。 院中可真熱鬧拷恨,春花似錦、人聲如沸谢肾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽芦疏。三九已至兜挨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間眯分,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工柒桑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留弊决,地道東北人。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓魁淳,卻偏偏與公主長得像飘诗,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子界逛,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內(nèi)容