- --with-http_secure_link_module 모듈은 기본적으로 빌드되지 않으며 구성 매개변수로 활성화 필요
- nginx http secure link 참고 : http://nginx.org/en/docs/http/ngx_http_secure_link_module.html
- ngx_http_secure_link_module 모듈 사용 용도
- 요청된 링크의 진위를 확인
- 무단 액세스로부터 리소스를 보호
- 링크 수명을 제한
- 검사의 상태는 $secure_link 변수에서 사용
- 요청된 링크의 신뢰성은 요청에 전달된 체크섬 값과 요청에 대해 계산된 값을 비교하여 확인
- 링크의 수명이 제한되어 있고 시간이 만료된 경우 해당 링크는 오래된 것으로 간주
- ngx_http_secure_link_module 모듈은 두 가지 대체 작동 모드를 제공
- secure_link_secret 지시문에 의해 활성화→ 요청된 링크의 신뢰성을 확인하고 무단 액세스로부터 리소스를 보호하는 데 사용
- secure_link 및 secure_link_md5 지시문에 의해 활성화되며 링크 수명을 제한하는 데에도 사용
secure_link 지시어
- secure_link 지시어는 링크의 체크섬 값과 수명을 추출할 변수가 있는 문자열을 정의
- secure_link 지시어는 일반적으로 요청과 연결됨
- 문맥: http, server, location
- 사용 문법
# 문법 : secure_link 표현법 secure_link expression;
- 문자열에서 추출한 체크섬 값은 secure_link_md5 지시문에서 정의한 표현식의 MD5 해시 값과 비교
- 체크섬이 다른 경우 $secure_link 변수는 빈 문자열로 설정
- 체크섬이 같으면 링크 수명을 확인
- 링크의 수명이 제한되어 있고 시간이 만료된 경우에도 $secure_link 변수 설정
- 링크의 수명이 제한되어 있고 시간이 만료된 경우 $secure_link 변수는 "0"으로 설정
- 그렇지 않은 경우 $secure_link 변수는 "1"로 설정
- 요청에 전달된 MD5 해시 값은 base64url로 인코딩
- 링크의 수명이 제한된 경우 만료 시간은 Epoch(1970년 1월 1일 00:00:00 GMT) 이후 초 단위로 설정
- MD5 해시 다음에 표현식에 지정되며 쉼표로 구분
- 요청에 전달된 만료 시간은 secure_link_md5 지시문에서 사용하기 위해 $secure_link_expires 변수를 통해 사용 가능
만료 시간이 지정되지 않은 경우 링크의 수명은 무제한임
2. secure_link_md5 지시어
- MD5 해시 값이 계산되고 요청에 전달된 값과 비교되는 식을 정의
- 식에는 링크(리소스)의 보안 부분과 비밀 요소가 포함되어야함
- 문맥: http, server, location
- 사용 문법
# 문법 : secure_link_md5 표현법 secure_link_md5 expression;
- 링크의 수명이 제한된 경우 표현식에 $secure_link_expires도 포함되어야함
- 무단 액세스를 방지하기 위해 식에는 주소 및 브라우저 버전과 같은 클라이언트에 대한 일부 정보가 포함될 수 있음
location /s/ { secure_link $arg_md5,$arg_expires; secure_link_md5 "$secure_link_expires$uri$remote_addr secret"; if ($secure_link = "") { return 403; } if ($secure_link = "0") { return 410; } ... }
- "/s/link?md5=_e4Nc3iduzkWRm01TBBNYw&expires=2147483647" 링크는 IP 주소가 127.0.0.1인 클라이언트의 "/s/link"에 대한 액세스를 제한
링크의 수명은 2038년 1월 19일(GMT)까지 제한
- UNIX에서 md5요청 인수 값은 다음과 같이 얻을 수 있음
$ echo -n '2147483647/s/link127.0.0.1 secret' | openssl md5 -binary | openssl base64 | tr +/ -_ | tr -d =
3. secure_link_secret 지시어
- 요청된 링크의 진위 여부를 확인하는 데 사용되는 암호를 정의
- 문맥: location
- 사용 문법
# 문법 : secure_link_secret 표현법 secure_link_secret word;
- 요청된 링크의 전체 URI은 아래와 같음
- hash → 링크와 secret 단어의 연결을 위해 계산된 MD5 해시의 16진수 표현
- prefix → 슬래시가 없는 임의의 문자열
- link → 요청 url
# /접두사/해시/링크 /prefix/hash/link
- 요청된 링크가 진위 확인을 통과하면 $secure_link 변수가 요청 URI에서 추출된 링크로 설정
- 그렇지 않으면 $secure_link 변수가 빈 문자열로 설정됨
location /p/ { secure_link_secret secret; if ($secure_link = "") { return 403; } rewrite ^ /secure/$secure_link; } location /secure/ { internal; }
- "/p/5e814704a28d9bc1914ff19fa0c4a00a/link" 요청은 내부적으로 "/secure/link"로 리디렉션
- UNIX에서 예제의 해시 값은 아래와 같이 얻을 수 있음
$ echo -n 'linksecret' | openssl md5 -hex
'Nginx > Nginx 모듈 학습' 카테고리의 다른 글
ngx_http_mp4_module 모듈 (0) | 2023.09.24 |
---|---|
ngx_http_referer_module 모듈 (0) | 2023.09.23 |
ngx_http_realip_module 모듈 (0) | 2023.09.23 |
ngx_http_slice_module 모듈 (0) | 2023.09.22 |
ngx_http_split_clients_module 모듈 (0) | 2023.09.22 |