Nginx

목차 1. IP based access control 2. referer based access control 3. User Agent based access control 4. Country/ISP based access control 5. User based access control

1. IP based access control

location / {
  allow 192.168.0.0/24;
  deny all;
}
  • 값은 IP 주소, CIDR, unix socket, all 을 사용할 수 있습니다.

2. referer based access control

ngx_http_referer module을 이용하여 제어를 합니다.

location /photo/ {
  valid_referers none blocked server_names *.example.com example.* www.example.org/galleries/ ~\.google\.;
  if ( $invalid_referer) {
    return 403;
  }
}
  • none - referer 없이 direct로 접속하는 경우

  • blocked - Referer filed가 존재하기는 하지만, 방화벽이나 proxy 서버에 의해서 지워지거나 또는 변조된 경우를 의미합니다. 예를 들어 http:// 또는 https:// 로 시작하지 않는 referer 주소를 들 수 있습니다.

  • 그 외의 referer 표현법은 ngx_http_referer_module 문서를 참조 하십시오.

3. User Agent based access control

$http_user_agent 환경 변수를 이용하여 제어를 합니다.

location / {
  # protect Bing bot and Google bot
  if ( $http_user_agent ~* (bing|google) ) {
    return 403;
  }
}

4. Country/ISP based access control

Nginx에서의 국가 또는 ISP 제어는 GeoIP와 krisp를 이용하여 가능 합니다.

둘 중, 어느 것을 사용하는냐는 사용자의 선택이지만, 국내의 IP 및 ISP 정보를 취급할 경우에는 krisp를 사용하는 것이 더 정확 합니다.

참고!

  • GeoIP 모듈은 ISP 정보를 제공하지 않습니다.

  • 안녕에서 기본 제공하는 krisp database에는 국내의 ISP 정보만 있습니다. (해외 ISP 정보는 들어 있지 않습니다. GeoISP를 이용하여 custom database를 만들 수 있습니다.)

  • krisp database는 KISA의 한국 IP database를 기반으로 하여 제작 되어 국내 환경에는 GeoIP보다 정확도가 높습니다.

4.1. GeoIP

GeoIP module을 사용하기 위한 자세한 설정은 nginx ngx_http_geoip_module 문서를 참고 하십시오.

location = /ko/ {
  if ( $geoip_country_code != KR ) {
    return 403;
  }
}

4.2. krisp

krisp module을 사용하기 위한 자세한 설정은 nginx ngx_http_krisp module 문서를 참고 하십시오.

location /ko/ {
  if ( $krisp_country_code = KR ) {
    if ( $krisp_isp_code = KORNET ) {
      return 403;
    }
  }
}

5. User based access control

5.1. password list 생성

google에서 "htpasswd web generator" 로 검색을 하면 web상에서 password list를 만들어 주는 tool들을 쉽게 찾을 수 있습니다.

또는, http://nginx.org/en/docs/http/ngx_http_auth_basic_module.html#auth_basic_user_file 문서를 참고 하십시오.

5.2. 인증 설정

localtion / {
  auth_basic "Restricted Content";
  auth_basic_user_file /etc/nginx/.htpasswd;

  if ( $remote_user !~ ^(john|smith|joe)$ ) {
    return 403;
  }
}

*

Last updated