Nginx GeoIP2를 이용하여 불량한 접속국가 막는 방법
설치준비
컴파일을 위해 먼저 아래 라이브러리를 설치합니다.
[설치환경 : Ubuntu 18.04, Nginx 1.16.1] ,
2020년12월 Ubuntu 20.04 & nginx 1.18.0 작동확인
apt-get install build-essential apt-get install libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev
MaxMind 저장소 추가 및 설치
add-apt-repository ppa:maxmind/ppaapt updateapt install geoipupdate libmaxminddb0 libmaxminddb-dev mmdb-bin
MaxMind 가입후 계정ID / 라이센스키 삽입
라이센스는 안내에 나와있는거처럼 25개까지 라이센스 생성이 가능하고, 한번 생성한 키는 다시 열람이 안되니 생성후 GeoIP.conf 파일을 저장해놓아야 합니다. 파일 내용은 아래와 같습니다. (/etc/GeoIP.conf)
# GeoIP.conf file for `geoipupdate` program, for versions >= 3.1.1.# Used to update GeoIP databases from https://www.maxmind.com.# For more information about this config file, visit the docs at# https://dev.maxmind.com/geoip/geoipupdate/.# `AccountID` is from your MaxMind account.AccountID yourID# `LicenseKey` is from your MaxMind accountLicenseKey YourLicensekey# `EditionIDs` is from your MaxMind account.EditionIDs GeoLite2-ASN GeoLite2-City GeoLite2-Country
GeoIP2를 최신 데이터로 업데이트 합니다.
geoipupdate
크론탭에 GeoIP2 데이터베이스 자동 업데이트 등록
crontab -e# 매주 월요일 오전3시 업데이트 실행0 3 * * Mon /usr/bin/geoipupdate
Nginx GeoIP2 모듈추가
cd /tmpgit clone https://github.com/leev/ngx_http_geoip2_module.git
아래 깃 링크에 가면 자세한 설치방법과 사용예시가 있습니다.
https://github.com/leev/ngx_http_geoip2_module
Nginx 컴파일 하기
현재 자신이 사용하는 Nginx 버전을 확인하고 다운로드 받습니다.
wget http://nginx.org/download/nginx-VERSION.tar.gztar zxvf nginx-VERSION.tar.gzcd nginx-VERSION
./configure --with-compat --add-dynamic-module=../ngx_http_geoip2_modulemake modules
Nginx GeoIP2 모듈복사
cp objs/ngx_http_geoip2_module.so /usr/lib/nginx/modules/echo "load_module modules/ngx_http_geoip2_module.so;" > /etc/nginx/modules-available/mod-http-geoip2.confln -s /etc/nginx/modules-available/mod-http-geoip2.conf /etc/nginx/modules-enabled/60-mod-http-geoip2.conf
좀더 간편하게 바로 복사해서 사용할수 있습니다.
mkdir -p /etc/nginx/modulescp -vi objs/ngx_http_geoip2_module.so /etc/nginx/modules/
Nginx 국가별 룰 환경설정 적용 및 테스트
nginx.conf파일의 http블록 안에 삽입, 기본적으로 fastcgi 파라미터가 옛날 버전으로 설정되어 있어, 필요에 따라 변수를 조정해줄 필요가 있습니다.
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;
국가차단 기본 설정, 테스트를 위해 한국 차단, 기본은 전체 접근 허용 (http 블록안에 넣기)
map $geoip2_data_country_code $domain_allowed_country { default yes; KR no;}
가상호스트에 허용국가가 아닐경우 444리턴(응답없음)
location / { if ($domain_allowed_country = no) { return 444; }}
우분투 20.04 & 워드프레스 사용시 에러가 발생할경우 로케이션빼고 넣어주면 됩니다.
if ($domain_allowed_country = no) { return 444; }
또는 원하는 도메인으로 리다이렉트
location / { if ($geoip2_data_country_code = KR) { return 301 https://domain.com$request_uri; }}
이 게시글이 문제가 될 시, 삭제처리 하겠습니다.
댓글 없음:
참고: 블로그의 회원만 댓글을 작성할 수 있습니다.