서버의 기술, 웹의 경험, 디자인의 창조력, 코드의 세계

+61 2 8091 3767

질문, 의견 또는 우려 사항이 있으십니까? 당사의 전담 전문가 팀은 귀하의 의견을 듣고 도움을 드릴 준비가 되어 있습니다. 소셜 미디어, 전화, 실시간 채팅을 통해 연락해 주세요.

우분투(Ubuntu 22.04/24.04)에서 Nginx GeoIP2를 활용한 국가별 접근 차단 가이드


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를 사용하여 특정 국가에서의 접근을 효과적으로 차단 가능
정기적인 데이터 업데이트자동화된 차단 관리
불필요한 트래픽 감소보안 강화

🚀 이제 여러분의 서버는 악성 트래픽으로부터 더욱 안전해졌습니다!
추가 질문이 있으면 언제든지 알려주세요. 😊

Share this article
Shareable URL
Prev Post

스테이블 디퓨전(Stable Diffusion) 모든OS, 원 클릭 설치 가이드: 초간단! Stability Matrix!

Next Post

Vultr에서 제공하는 계정패널에서 SSH 키를 추가하는 방법은?

댓글을 남겨주세요.😊

이메일 주소는 공개되지 않습니다. * 표시는 필수 입력 항목입니다.

Read next

리눅스 명령어 OS 버전 및 배포판 정보 확인

여러 프로젝트를 진행하다 보면, OS정보 없이 콘솔접속 정보만 던져주는 경우가 많습니다. 환경에 따라 인프라 구축이나 개발 환경 설정이 달라 질수 있기 때문에 적어도 기본정보는 확인하여 전달 하는것이…
0
Share