탕구리's 블로그

nginx 인증 모듈 연동하기(with LDAP) 본문

devOps

nginx 인증 모듈 연동하기(with LDAP)

탕구리당 2020. 5. 1. 05:02
반응형

오늘은 nginx에 인증 모듈을 추가하는 작업을 진행하였고 그중에서도  ldap을 연동하는 과정에 대해서 정리를 진행합니다.

 

nginx 인증이란, nginx를 통해서 특정 페이지로 이동할 때, 로그인과 같은 인증과정을 nginx에서 처리할 수 있도록 하는 과정입니다.

인증을 위한 방법에는 여러가지가 존재하는데 그중에서도 LDAP을 통하여 인증과정을 진행하도록 하겠습니다.

 

우선, nginx를 통해서 인증을 진행하려면 nginx를 설치해야 됩니다. (당연한 소리)

 

1. 바이너리를 통해 설치하는 방법

2. 패키지 매니저를 통해 설치하는 방법

 

1. nginx 설치하기

 

저는 centoss7에서 yum 패키지를 통해 nginx를 설치하는 방법으로 진행하였습니다.

yum 저장소에는 nginx가 포함되어 있지 않기 때문에 외부 저장소를 등록해준 후 nginx를 다운로드할 수 있습니다.

 

 

(1) 저장소 등록하기

 

저장소를 추가하는 방법은 다음과 같습니다.

 

$ sudo vi /etc/yum.repos.d/nginx.repo

# 아래 내용을 작성하여 줍니다.
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

 

(2) nginx 설치하기

 

$ yum install -y nginx

 nginx를 설치하는 과정에서 다른 게시물들을 참고 하였는데, firewall 설정에 대한 부분들이 많이들 나와있던데 저는 설치하는 과정에서 firewall에 대한 문제를 겪지 못하여 따로 정리하지 않았습니다. 기본적으로 firewall은 구동시키지 않으면 작동하지 않는다고 알고 있어서 별대를 문제가 없었던 것 같습니다.

 

(3) nginx 실행하기

 

$sudo systemctl start nginx OR  $sudo service nginx start

별다른 문제가 발생하지 않았다면 nginx가 정상적으로 실행되었을 거예요.

 

한번 확인을 해봅시다.

 

$ netstat -tnlp

 

 

미사용 중이던 8080 포트가 열려있음을 확인할 수 있습니다. 저는 /etc/nginx/conf.d/default.conf에서 listen port를 8080으로 수정하여서 8080포트가 열려있습니다. 설정을 변경하지 않은 경우는 기본적으로 80 포트를 사용합니다.

 

 

2. nginx 모듈 설치 및 연동하기

 

외부 모듈을 사용해야 되기 때문에 직접 찾아보기도 했고 주변에서 추천을 받기도 하였습니다.

저는 github에서  kvspb/nginx-auth-ldap 해당 코드를 클론 받아 설치를 진행하였습니다.

 

(1) 모듈 다운로드하기

 

$ git clone https://github.com/kvspb/nginx-auth-ldap.git

 

(2) nginx 버전 및 경로 확인하기

 

앞서 yum 명령어를 통해 nginx를 설치하였기 때문에 우리가 설치한 nginx에는 해당 모듈이 설치되어 있지 않습니다. 그렇기 때문에 해당 모듈을 연결시켜 주어야 합니다. 모듈 연결 이전에 yum을 통해 설치한 nginx에 잡혀있는 각종 경로를 확인하여 봅시다.

 

$ nginx -V

# 결과
nginx version: nginx/1.18.0
built by gcc 7.3.1 20180712 (Red Hat 7.3.1-6) (GCC)
built with OpenSSL 1.0.2k-fips 26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'

yum 패키지를 통해 nginx를 설치한 경우 각종 경로들이 자동으로 설정되어 있음을 확인할 수 있습니다.

저는 nginx 1.18.0 버전을 설치하였고 각종 path는 변경하지 않았습니다. nginx에 모듈을 추가해주기 위해 nginx 바이너리 파일을 다운로드하여 해당 경로를 재활용하여 사용하도록 하겠습니다.

 

해당 사이트로 이동하여 사용하는 버전에 맞는 nginx를 다운 받아 주시면 됩니다.

 

 

(3) 바이너리 다운로드 및 nginx 재설치

 

# 바이너리 다운로드
$ wget http://nginx.org/download/nginx-1.18.0.tar.gz

# 압축 해제
$ tar -zvxf nginx-1.18.0.tar.gz
$ cd nginx-1.18.0

# 환경 설정 및 모듈 추가
$ ./configure  --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx ............    --add-module=/home/ec2-user/nginx-auth-ldap

# 컴파일
$ make & sudo make install

--add-module의 경로에는 깃에서 클론 받은 모듈의 경로를 넣어주시면 됩니다.

 

make를 통한 컴파일 시 의존성에 의하여 오류가 날 수 있으므로 make를 실행하기 위한 의존성 패키지를 설치해 주세요. 정확히 어떤 것들이 dependency 관계를 가지고 있는지는 모르겠지만 의존성에 문제가 생긴다면 아래 패키지들을 설치해주세요

$ yum update -y
$ yum install -y  gcc gcc-c++ pcre-devel zlib-devel expat-devel make

 

여기까지 별 무리 없이 진행하셨다면 nginx와 nginx-auth-ldap 모듈에 대한 연동이 완료되었을 거예요.

그렇다면 이제 nginx의 conf 파일 수정을 통해 마무리 작업을 진행해 봅시다.

 

 

(4) nginx의 conf 파일 수정하기

 

# 경로로 이동하여 conf 파일을 수정해 봅시다.
$ cd /etc/nginx
$ sudo vi /etc/nginx/nginx.conf

...
http {
  ...
  auth_ldap_cache_enabled on;
  auth_ldap_cache_expiration_time 10000;
  auth_ldap_cache_size 1000;

  ldap_server adds {
    # url "ldap://{ldap ip address}:{ldap ports}/{base_dn}?{attributes}?{scope}?(fileter)";
    url "ldap://13.125.210.49:389/ou=users,dc=example,dc=com?givenName?sub?";
    binddn "CN=admin,DC=example,DC=com"; # ladp을 인증할 수 있는 자격 증명 정보
    binddn_passwd "xxxxxxxxx"; satisfy any; # ldap 인증자의 비밀번호
    require valid_user;
  }

  server {
    location / {
      auth_ldap "Enter AD credentials e.g. 'calvin'";
      auth_ldap_servers adds;
      root /usr/share/nginx/html;
      index index.html index.htm;
    }
  }
}

 

conf 파일 수정을 완료했으면 수정 사항 반영을 위해 nginx를 재시작합니다.

 

$ sudo systemctl restart nginx

 

nginx의 재시작이 오류 없이 완료되었다면 localhost:ports 혹은 host_ip:port로 브라우저를 통해 접속합니다.

 

 

브라우저 접속 화면

 

 

위의 화면이 나타나면 모든 과정이 완료입니다. : )

 

 

혹시 url 부분 설정 내용을 어떻게 해야 할지 이해가 잘 되지 않는 분들을 위해 참고할만한 링크 첨부해드리겠습니다.

 

 

참고 : https://docs.oracle.com/cd/E19396-01/817-7616/ldurl.html 오라클 LDAP Reference

 

끝!

반응형
Comments