Table of Contents
✅ GeoIP2를 활용하면 특정 국가에서의 접근을 차단하여 불필요한 트래픽과 악성 봇을 효과적으로 차단할 수 있습니다.
이 가이드에서는 MaxMind의 GeoLite2 데이터베이스를 사용하여 Ubuntu 22.04 및 24.04 환경에서 Nginx GeoIP2 모듈을 설정하는 방법을 설명합니다.
📌 이 가이드를 따르면 다음을 수행할 수 있습니다:
- 차단 로그를 확인하여 보안 상태 모니터링
- GeoIP2 데이터베이스 설치 및 자동 업데이트 설정
- Nginx GeoIP2 모듈 컴파일 및 로드
- 특정 국가에서의 접근을 차단하는 설정 적용
STEP 1. 설치 준비
MaxMind 계정 생성 및 라이센스 키 발급
- MaxMind 공식 사이트(🔗 https://www.maxmind.com)에 접속합니다.
- 무료 계정 생성 후 로그인합니다.
- License Key 발급:
My Account → Manage License Keys
로 이동
새로운 License Key 생성 후 저장
⚠️ 주의: 한 번 생성한 라이센스 키는 다시 열람할 수 없으므로 별도로 기록하세요.
#GeoIP2 모듈을 위한 필수 패키지 설치
apt-get install build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev
#MaxMind 저장소 추가 및 필수 패키지 설치
add-apt-repository ppa:maxmind/ppa
apt update
apt install geoipupdate libmaxminddb0 libmaxminddb-dev mmdb-bin
#GeoIP 업데이트 설정 파일 수정
nano /etc/GeoIP.conf
📌 아래 내용을 추가 또는 수정합니다.
AccountID YOUR_MAXMIND_ID
LicenseKey YOUR_LICENSE_KEY
EditionIDs GeoLite2-ASN GeoLite2-City GeoLite2-Country
DatabaseDirectory /usr/share/GeoIP
#저장 후 설정 파일 권한 변경
chmod 600 /etc/GeoIP.conf
MaxMind GeoIP 데이터 업데이트 도구 설치
sudo apt update
sudo apt install -y geoipupdate
#설치확인 : geoipupdate -V
root@663bbb4a90826:/etc/nginx# geoipupdate -V
geoipupdate 7.1.0-0+maxmind1~noble (ubuntu-ppa) (linux-amd64)
STEP 2. 최신 GeoIP2 데이터 다운로드
최신 GeoIP2 데이터 다운로드
geoipupdate
#다운로드 확인
ls -lh /usr/share/GeoIP/*.mmdb
✅ 정상 출력 예시
-rw-r--r-- 1 root root 57M Feb 26 18:37 /usr/share/GeoIP/GeoLite2-City.mmdb
-rw-r--r-- 1 root root 7.5M Feb 26 18:37 /usr/share/GeoIP/GeoLite2-Country.mmdb
자동 업데이트 설정 (Crontab 등록)
crontab -e
📌 아래 내용을 추가하여 매주 월요일 오전 3시에 자동 업데이트
0 3 * * Mon /usr/bin/geoipupdate
STEP 3. Nginx GeoIP2 동적 모듈 컴파일 및 설정
GeoIP2 모듈 다운로드
cd /usr/local/src
git clone https://github.com/leev/ngx_http_geoip2_module.git
현재 사용중인 Nginx 버전 확인 및 다운로드
#버전 확인 : nginx -v
root@663bbb4a90826:/etc/nginx# nginx -v
nginx version: nginx/1.26.3
→ 최신버전 Nginx 설치방법은 이 글에서 확인하세요.
cd /usr/local/src
wget http://nginx.org/download/nginx-1.26.3.tar.gz
tar -xzvf nginx-1.26.3.tar.gz
cd nginx-1.26.3
GeoIP2 모듈 컴파일 및 설치
./configure --with-compat --add-dynamic-module=../ngx_http_geoip2_module
make modules
모듈 파일 생성 확인 및 복사
#”ngx_http_geoip2_module.so*” 모듈 파일 확인
ls -lh objs/*.so
✅ 출력 예시
-rwxr-xr-x 1 root root 87K Feb 26 18:52 objs/ngx_http_geoip2_module.so
#모듈 이동
mv objs/ngx_http_geoip2_module.so /usr/lib/nginx/modules/
STEP 4. NGINX GeoIP2 설정 추가 (국가별 차단)
#Nginx에 동적 모듈 로드 추가
nano /etc/nginx/nginx.conf
📌 http{}
블록 안에 추가
# Load module section
load_module "modules/ngx_http_geoip2_module.so";
#GeoIP 국가 차단 룰 적용
/etc/nginx/nginx.conf 파일 에서 http{} 블록내에 추가, 전체 국가에 대해 기본적으로 접근이 가능하며, 필요에 따라 차단 국가를 룰에 적용.
예시 : ✅ KR(한국)만 허용, US(미국)은 차단
## Geoip2 ##
geoip2 /usr/share/GeoIP/GeoLite2-Country.mmdb {
$geoip2_data_country_code country iso_code;
}
map $geoip2_data_country_code $allowed_country {
default yes;
KR yes;
US no;
}
#적용하려는 가상호스트에 추가
nano /etc/nginx/sites-available/example.com
📌 아래 내용 추가
if ($allowed_country = no) {
return 403 "Access Forbidden for $geoip2_data_country_code";
}
#nginx 문법 검사
nginx -t
✅ 정상 출력 예시
nginx: configuration file /etc/nginx/nginx.conf test is successful
#nginx 환경설정 다시 불러오기
nginx -s reload
STEP 5. 차단 여부 확인
#로그에서 차단된 요청 확인
tail -f /var/log/nginx/custom_geoip.access.log
✅ 출력 예시 (403 Forbidden)
156.146.59.39 - - [27/Feb/2025:04:25:55 +0900] "GET / HTTP/2.0" 403 23 "https://example.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36"
📌 브라우저에서도 직접 확인 가능!
차단된 국가에서 접속 시 403 Forbidden
페이지가 표시됨.
마치며
과거 작성한 글이 오래되어, 최신 배포판을 기준으로 재작성 되었습니다.
✅ GeoIP2를 사용하여 특정 국가에서의 접근을 효과적으로 차단 가능
✅ 정기적인 데이터 업데이트 및 자동화된 차단 관리
✅ 불필요한 트래픽 감소 및 보안 강화
🚀 이제 여러분의 서버는 악성 트래픽으로부터 더욱 안전해졌습니다!
추가 질문이 있으면 언제든지 알려주세요. 😊