openldap サーバの nginx 連携

じわじわと適用範囲を広げてきたopenldapも今回のnginxで最後。もちろん、その他のツールでも使えるところは使っていきたいんだけどね。mariadbとかも最近はLDAP化できるのかな。ともあれ、webの場合は、ちょっとアクセス制御したいときによく使うBASIC認証にLDAPを使いたい。基本はIP制限等なので、あくまで例外的に穴を開けたいときにくらいにしか使わないけど。だからこそ、いちいちパスワード用意したりするのが面倒だから、いつも使っているアカウントの認証でログインできてしまいたい。

うちのnginxはepelにあるパッケージをそのまま使っちゃってるんだけど、それだとLDAP認証には対応していないようだ。必要となるモジュールを組み込むために、epelからnginxのSRPMをダウンドロードする。auth-ldapモジュールを組み入れるようにspecファイルを修正。そしてnginxパッケージをリビルドするという流れ。この辺りは他のブログを参考にさせてもらった。ビルドに成功したら、生成されたパッケージをyumでインストールする。これで準備完了となる。具体的には以下。

cd /usr/local/src
yumdownloader --enablerepo=epel --source nginx
rpm -ivh nginx-1.10.2-1.el7.src.rpm
cd ~/rpmbuild/SPECS
cp nginx.spec _nginx.spec
vi nginx.spec
diff -u _nginx.spec nginx.spec
    :
 %build
+git clone https://github.com/kvspb/nginx-auth-ldap.git
 # nginx does not utilize a standard configure script.  It has its own
 # and the standard configure options cause the nginx configure script
 # to error out.  This is is also the reason for the DESTDIR environment
@@ -207,6 +208,7 @@
     --with-file-aio \
 %endif
     --with-ipv6 \
+    --add-module=nginx-auth-ldap \
     --with-http_ssl_module \
     --with-http_v2_module \

yum-builddep --enablerepo=epel nginx
rpmbuild -ba nginx.spec
cd ../RPMS/x86_64
yum install -y *.rpm

続いて、nginxの設定ファイルを修正して、組み入れたモジュールを有効化する。まずはnginx.confにhttp{}セクションにLDAP認証のための設定を追加する。設定されている内容はldap側の設定にも依存するので、過去の記事も参照して、必要な箇所を書き直して下さい。うちの環境ではldap1とldap2のVIPを意味するldapというサーバ名で389ポートにアクセスする。このVIPを使うことで既に冗長化がなされていることになる。そして認証のためのパスワードはOSアカウント同じものを使う。

vi /etc/nginx/nginx.conf
    :
http {
    :
    ldap_server ldap-users {
        url ldap://ldap:389/dc=domain,dc=com?uid?sub?(objectClass=posixAccount);
        require valid_user;
    }
}

そして最後は、BASIC認証を組み入れたい設定ファイルのserver{}セクションにauth_ldapの設定を追加する。設定する認証方法は、内部のプライベートIPだったらそのまま通して、それ以外だったらBASIC認証をかけるというもの。どちらかの認証が満たされれば、webにアクセスすることができるようになる。自分がapacheの頃から使っている好みの設定だ。ここまで設定が終わったら、nginxを再起動して設定を反映させる。念のため文法の間違いがないか確認してから、nginxを再起動する。

vi /etc/nginx/conf.d/www.conf
    :
server {
    listen       80;
    server_name  www.domain.com;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
        satisfy any;
        allow 192.168.0.0/24;
        deny all;
        auth_ldap 'Authentication Required';
        auth_ldap_servers ldap-users;
    }
    :
nginx -t
    :
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

systemctl restart nginx

あとは適切な経路からURLを叩いて、BASIC認証が表示されるかどうか、そしてその認証がOSアカウントのパスワードで通せるかどうかを確認する。幸いにも私は1発で期待通りの設定を行うことが出来た。sambaほどはまることもなく、ほっと胸をなでおろす。全体を思い返してみても、最も面倒だったのはやはりsambaで、他は意外とあっさり設定出来たように思う。まあ、sambaが面倒なのはwindowsが絡むことに起因しているのかもしれないが。とりあえず今回でもともと設定したかった箇所へのLDAP適用は完了。mysqlもLDAP化したいなあ。

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)