원치 않는 국가에서 접근을 시도하는 경우 어떻게 하면 접속을 막거나 허용할 수 있는지 고민하게 되었습니다. 이유는 몇 가지 있는데 최근 급증한 데이터 트래픽 증가가 원인 중 하나였습니다.

어쨌든 방문자의 접속을 제어하고 싶은데 어디서 제어할 것인가를 결정해야 합니다. 이 중에서 간단한 방법인 서버측 환경, nginx 설정을 사용하여 국가 별로 허용하거나 제한하는 방법을 알아봅니다.

(호스팅 업체의 보안 그룹에 허용 가능한 ip 대역을 설정하는 방법도 존재하지만 ip 대역이 너무 많고 알아보기 어려운 이유 등으로 아래 방법이 더 쉽고 간단하다고 판단했습니다.)
# nginx를 사용하여 국가별로 차단 및 허용하는 방법먼저 nginx를 사용하는 경우 geoip 설정이 가능한지 확인이 필요합니다. nginx -V를 사용하여 geoip에 대한 설정이 있는지 확인합니다. 만약 출력된 내역 중 --with-http_geoip_module라는 부분이 존재하는 경우라면 nginx에서 설정이 가능할 경우가 높습니다.


! nginx geoip 설정방법nginx.conf를 다음과 같이 수정합니다. 만약 한국만 접근 가능한 경우라면 아래처럼 KR yes를 입력합니다.
http {
  geoip_country /usr/share/GeoIP/GeoIP.dat;
  map $geoip_country_code $allowed_country {
    default no;
    KR yes;
  }

  server {
    location / {
      if ($allowed_country = no) {
        return 403;
      }
  }
}

이제 설정은 끝났습니다. 잘 동작하는지 테스트를 수행합니다. 먼저 nginx의 문법도 확인합니다.
nginx -t

이상이 없다면 nginx를 재동작하도록 합니다. 재동작 후 해외 ip를 사용하여(vpn 등등) 해당 웹사이트에 접속 후 동작 여부를 확인합니다.