Dev/Web

Nginx geoip 연동

newtype 2022. 11. 17. 11:06

Lightsail 셋팅을 하고 나니, 해킹 시도로 의심되는 해외에서 접속이 많았습니다. geoip를 사용해서 해외 접속을 막아 보겠습니다.

차단 방법

  1. maxmind 에 가입하고 License key를 발급

  2. geoipupdate 설치

    geoip 연동을 위해 geoipupdate를 설치합니다.

apt-get install build-essential 
apt-get install libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev
add-apt-repository ppa:maxmind/ppa
apt update
apt install geoipupdate libmaxminddb0 libmaxminddb-dev mmdb-bin
  1. 자동으로 update 받도록 crontab에 추가

    매주 오전 3시에 update 받습니다.

0 3 * * Mon /usr/bin/geoipupdate 2> /dev/null
  1. geoip 모듈 설치

    git에서 nginx 코드를 내려받아 직접 빌드 할 수도 있고, 설치해도 됩니다.

apt-get install nginx-plus-module-geoip2

설치 후 설정 파일에 발급받은 key를 넣여야 합니다.

vi /etc/GeoIP.conf

# are available from https://www.maxmind.com/en/my_license_key.
AccountID NNNNNNNN
LicenseKey XXXXXXXXXXXX
  1. geoip 모듈 로드

    nginx.conf 가장 위에 추가 합니다.

load_module modules/ngx_http_geoip2_module.so;
  1. 공통 설정

    /etc/nginx/conf.d/geoip2.conf 파일을 추가합니다.
    한국만 접속 되도록 설정했습니다.

    geoip2 /usr/share/GeoIP/GeoLite2-Country.mmdb {
      auto_reload 60m;
      $geoip2_metadata_country_build metadata build_epoch;
      $geoip2_data_country_code country iso_code;
      $geoip2_data_country_name country names en;
    }
    geoip2 /usr/share/GeoIP/GeoLite2-City.mmdb {
      auto_reload 60m;
      $geoip2_metadata_city_build metadata build_epoch;
      $geoip2_data_city_name city names en;
    }
    fastcgi_param COUNTRY_CODE $geoip2_data_country_code;
    fastcgi_param COUNTRY_NAME $geoip2_data_country_name;
    fastcgi_param CITY_NAME    $geoip2_data_city_name;

    map $geoip2_data_country_code $domain_allowed_country {
      default no;
      KR yes;
      RU no;
      CN no;
    }
  1. server별 설정

    server.location에 허용된 국가 아니면 444를 응답하도록 설정을 추가합니다.

server {
    listen       80;
    server_name  mydomain.com;

    location / {
        if ($domain_allowed_country = no) {
            return 444;
        }

        root   /home/bitnami/htdocs;
        index  index.html index.htm;
    }
}
  1. conf reload
sudo nginx -s reload

참고

반응형