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

+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정보 없이 콘솔접속 정보만 던져주는 경우가 많습니다. 환경에 따라 인프라 구축이나 개발 환경 설정이 달라 질수 있기 때문에 적어도 기본정보는 확인하여 전달 하는것이…

나노(Nano) 에디터 개인 환경 설정 예시

나노(Nano)는 기본적으로 단순한 인터페이스를 제공하지만, ~/.nanorc 파일을 이용해 여러 가지 개인 맞춤 설정을 할 수 있습니다. 다음은 자주 사용되는 개인 환경 설정 예제입니다. 기본 설정…
0
Share