geoip.dat 파일은 국가별로 사용하는 IP 주소를 모아놓은 데이터로 웹서버를 운영할때 특정 국가의 접근을 막거나 허용하는등 국가단위 IP 필터링을 할때 주로 사용하는데요.

GeoIP는 maxmind.com에서 배포하며 리눅스에서는 패키지로 설치해 업데이트를 할 수 있었지만 작년부터 GeoIP2로 이름을 변경하면서 유료 패키지로 전환되고 무료 버전인 GeoLite2는 데이터베이스 형식의 mmdb(MaxMind DB)와 CSV 확장자로 배포하고 있습니다.

아파치와 NGINX의 GeoIP 모듈은 dat 파일만 지원하기 때문에 웹서버에서 사용하려면 dat 파일로 변환을 해야 하는데, 능력있는 해외 개발자들이 만들어 놓은 변환 프로그램이 있기 때문에 이를 활용해 변환하고 자동으로 업데이트 하는 간단한 스크립트를 적용해 자동화 할 수 있습니다.

튜토리얼 환경 : 우분투, nginx

필자는 /root 디렉토리를 기준으로 설정했지만 편의에 따라 디렉토리 위치를 바꾸면 되겠습니다.

준비물

apt install python-pip
apt install git
pip install pygeoip
pip install ipaddr

maxmind에서 배포하는 geoip SCV 파일을 dat 파일로 변환하기 위해서 깃허브에서 파이썬 기반의 프로그램을 다운로드 받고 사용하기 위해 위 패키지가 필요합니다.

cd /root
git clone https://github.com/sherpya/geolite2legacy

root 디렉토리로 이동한 다음 CSV 형식의 GeoIP 파일을 변환하기 위해 geolite2legacy를 깃허브에서 다운로드 받습니다.

GeoIP CSV 파일을 DAT 파일로 변환

mkdir /root/geolite2legacy/maxmind-geo
wget -P /root/geolite2legacy/maxmind-geo https://geolite.maxmind.com/download/geoip/database/GeoLite2-Country-CSV.zip

깃허브에서 다운로드 받은 위 명령어로 maxmind에서 GeoLite2 CSV 파일을 다운로드 받습니다.

/root/geolite2legacy/geolite2legacy.py -i /root/geolite2legacy/maxmind-geo/GeoLite2-Country-CSV.zip -f /root/geolite2legacy/geoname2fips.csv -o /root/geolite2legacy/maxmind-geo/GeoIP.dat

위 명령어를 실행해 깃허브에서 받은 파이썬 스크립트를 이용해 csv 파일을 dat 파일로 변환합니다.

mv /root/geolite2legacy/maxmind-geo/GeoIP.dat /etc/nginx

생성한 dat 파일을 아파치나 NGINX에서 사용할 수 있게 이동하면 끝.

GeoIP 자동 업데이트 및 변환 설정

IP는 유한한 자원이기 때문에 국가에서 사용하는 IP 대역이 유기적으로 변경될 수도 있습니다. 이로 인해 GeoIP 또한 주기적으로 업데이트 해야 하는데, 위 과정을 스크립트로 만들어 크론탭에 등록해 두면 서버가 주기적으로 자동 업데이트를 진행합니다.

#!/bin/bash

wget -P /root/geolite2legacy/maxmind-geo https://geolite.maxmind.com/download/geoip/database/GeoLite2-Country-CSV.zip 

/root/geolite2legacy/geolite2legacy.py -i /root/geolite2legacy/maxmind-geo/GeoLite2-Country-CSV.zip -f /root/geolite2legacy/geoname2fips.csv -o /root/geolite2legacy/maxmind-geo/GeoIP.dat

sleep 30s

mv /root/geolite2legacy/maxmind-geo/GeoIP.dat /etc/nginx

sleep 10s

service nginx reload

위 과정을 자동화로 하기 위해 쉘 스크립트로 저장합니다. 중간의 sleep은 파일이 변환되는 시간이 있기 때문에 잠시 스크립트를 멈추기 위함입니다.

아파치 관리자는 마지막 명령어를 service apache2 restart로 변경하면 되겠습니다.

5 7 * * 0 /root/batch/geoip_automatic_updates.sh 

스크립트를 주기적으로 실행하기 위해 crontab -e로 크론탭 편집기를 실행한 다음 만들어둔 스크립트를 등록하면 매주 일요일 7시 5분에 스크립트가 실행됩니다.

Avatar
Author

익스트림 매뉴얼 주인장입니다.
내용이 유익했다면 를 눌러주세요. 앞으로 작성할 글의 뱡향성을 결정하는데 도움이 됩니다. 🤩
pg@extrememanual.net

Write A Comment