NGINX Plus Dynamic IP Access Control 구성
NGINX Plus와 ngx_http_keyval_module을 사용하면 NGINX Plus 중단 없이 동적으로 Access Control 을 구성할 수 있습니다.
NGINX Plus의 API 모듈(ngx_http_api_module)은 RESTful API를 통해 NGINX Plus의 운영 상태, 설정 정보, 통계, 모니터링 데이터 등을 실시간으로 조회하고 제어할 수 있는 모듈입니다. 이 모듈은 JSON 형식의 데이터를 반환하며, 관리자나 모니터링 시스템이 NGINX Plus 상태를 빠르게 확인하고 제어할 수 있는 기능을 제공합니다.
이번 포스트에서는 ngx_http_api_module과 ngx_http_keyval_module을 사용하여 동적으로 IP-based access control을 구성하는 방법에 대해 설명합니다.
목차
1. Dynamic IP Access Control
2. NGINX Plus Dynamic IP Access Control 구성
3. IP 제어 및 관리
4. NGINX Plus IP Access Control 목록 확인
5.결론
1. Dynamic IP Access Control
Dynamic IP Access Control은 NGINX Plus에서 동적으로 IP 주소를 기반한 실시간 엑세스 제어를 할 수 있게 해줍니다. 이 기능을 사용하여 특정 IP 주소를 동적으로 허용하거나 차단하는 데 사용되며, 보안성을 높이면서도 제어 편의성을 향상시킬 수 있습니다.
주요 기능은 다음과 같습니다:
- 실시간 액세스 제어: 미리 정의한 IP 목록을 통해 액세스 제어를 적용하는 방식과 달리, NGINX Plus의 API를 통해 실시간으로 IP Access Control(허용/차단)이 가능합니다.
- REST API 기반 제어: NGINX Plus API를 사용해 접근 제어 규칙을 실시간으로 변경할 수 있어, 특정 IP 주소를 즉각 차단하거나 허용할 수 있습니다.
- 화이트리스트/블랙리스트 관리: 별도의 목록으로 관리할 수 있으며, 보안 요구 사항에 따라 필요 시 두 가지 방식으로 제어할 수 있습니다.
따라서 NGINX Plus의 RESTAPI와 keyval 모듈을 사용하여, 서비스 중단 없이 access control을 설정할 수 있습니다.
2. NGINX Plus Dynamic IP Access Control 구성
NGINX Plus를 사용한 서비스 중단 없이 동적으로 IP access control을 구성하는 방법은 어렵지 않습니다.
아래는 구성 예시입니다.
# IP Access 목록을 관리할 keyval 데이터 저장소를 정의합니다.
keyval_zone zone=ip_acl:1m state=/var/lib/nginx/state/IPbased_access_control.keyval;
# $remote_addr 변수를 키로 사용하고 $access_granted 변수에 할당된 값을 가져옵니다.
keyval $remote_addr $access_granted zone=ip_acl;
# $access_granted의 값에 따라 $access_allowed 값을 설정합니다.
map $access_granted $access_allowed {
default "0";
"T" "1";
}
server {
listen 80;
server_name example.com;
location / {
# $access_allowed 값이 0일 경우 403 Forbidden을 응답합니다.
if ($access_allowed = 0) {
return 403;
}
root /usr/share/nginx/html;
index index.html;
}
# 동적으로 IP Access Control을 하기 위해 API를 활성화합니다.
location /api/ {
# allow 127.0.0.1;
# deny all;
api write=on;
}
}
위 구성의 전체적인 흐름은 아래와 같습니다.
- 클라이언트 IP 저장:
- 클라이언트 IP가 $remote_addr 변수에 저장됩니다. (예: $remote_addr = 192.168.1.10)
- Key-Value 조회:
- $remote_addr 값이 ip_acl 데이터 저장소에서 조회되고, 결과가 $access_granted 변수에 저장됩니다. (예: $access_granted = “T”)
map지시문으로 접근 여부를 결정:- $access_granted 값에 따라 $access_allowd 변수가 설정됩니다. (예: $access_granted =”T”, $access_allowd = 1)
- 접근 허용/차단 결정:
- $access_allowed 값이 0이면 차단, 1이면 요청을 처리합니다.
IPbased_access_control.keyval 파일을 생성하기 위해 NGINX를 재시작합니다.
3. IP 제어 및 관리
현재 key-value에 저장된 값을 확인하려면 http://example.com/api/9/http/keyvals 로 접근하면 현재 IP 제어 목록을 확인할 수 있습니다.

현재 key-value에 값이 없으므로 example.com으로 요청 시 403 Forbidden을 반환합니다.

Curl 명령을 사용하여 동적으로 허용할 IP를 추가하는 방법은 아래와 같습니다:
# 허용할 IP를 추가하는 방법
# curl -X POST -d '{"허용할 IP":"T"}' example.com/api/9/http/keyvals/ip_acl
$ curl -X POST -d '{"127.0.0.1":"T"}' example.com/api/9/http/keyvals/ip_acl
# 허용된 IP를 제거하는 방법
# curl -X DELETE -d '{"제거할 IP"}' example.com/api/9/http/keyvals/ip_acl
$ curl -X DELETE -d '{"127.0.0.1"}' example.com/api/9/http/keyvals/ip_acl
curl 명령어를 사용하여 허용할 IP를 추가한 뒤 NGINX 중단 없이 IP Access 가 허용되는 지 확인합니다.

위의 사진과 같이 NGINX Plus의 서비스 중단 없이 동적으로 127.0.0.1의 아이피를 허용하고 삭제(차단)이 되는 것을 확인할 수 있습니다.
4. NGINX Plus IP Access Control 목록 확인
현재 등록된 IP 목록을 확인하는 방법은 크게 두 가지 있습니다.
첫 번째는 GET 요청을 통해 확인할 수 있습니다. 아래는 curl을 사용하여 현재 IP Access Control 에 등록된 IP를 확인하는 방법입니다.

또는 웹사이트에서 해당 경로를 입력하여 확인할 수 있습니다.


두 번째 방법은 현재 아래와 같이 keyval_zone을 지정하였습니다.
keyval_zone zone=ip_acl:1m state=/var/lib/nginx/state/IPbased_access_control.keyval;
state 매개변수의 경로를 /var/lib/nginx/state/IPbased_access_control.keyval로 지정하였기 때문에 현재 등록된 IP 목록은 해당 파일에서 확인할 수 있습니다.
# cat /var/lib/nginx/state/IPbased_access_control.keyval
{"123.456.789.123":"T","127.0.0.1":"T"}
만약 state에 지정된 경로에 파일이 생성되지 않았다면, 두 가지를 확인하세요.
- keyval_zone 구성 후 NGINX Plus 재시작
- keyval_zone 지시문의 state 매개변수 경로의 디렉토리에 NGINX가 파일을 쓸 수 있는 권한이 있는지 확인하세요.
파일이 정상적으로 생성되고 기록된다면 NGINX Plus를 재시작해도 IP access control이 적용됩니다.
5.결론
이번 포스트에서는 NGINX Plus의 강력한 기능인 ngx_http_api_module과 ngx_http_keyval_module을 활용하여 동적인 IP access control 을 구성하는 방법을 살펴보았습니다. 이 두 모듈을 통해 NGINX Plus의 중단 없이 실시간으로 access control을 관리할 수 있는 유연성을 확보할 수 있습니다.
ngx_http_api_module은 IP access control 을 제외하고도 RESTful API를 통해 NGINX Plus의 운영 상태와 설정 정보를 손쉽게 조회하고 변경할 수 있는 기능을 제공하며, 이로 인해 관리자는 서버의 상태를 신속하게 모니터링하고 필요한 조치를 취할 수 있습니다.
또한, ngx_http_keyval_module을 이용해 IP 주소를 동적으로 추가하거나 제거함으로써, 변화하는 환경에 즉각적으로 대응할 수 있는 access control 전략을 구현할 수 있습니다.
결론적으로, 이러한 동적 access control 방식은 보안성을 높이고, 관리의 효율성을 극대화하며, 운영 중단 없이도 시스템을 안정적으로 유지하는 데 큰 도움이 됩니다.
NGINX Plus를 직접 사용해 보시려면 30일 무료 평가판을 신청하거나, NGINX STORE에 연락하여 논의하십시오.
댓글을 달려면 로그인해야 합니다.