nginx geoip.dat 파일 업데이트 방법

2023. 1. 3. 17:24 / 서기랑

 ip정보는 수시로 변경되기 때문에 geoip.dat 파일의 정보 역시 수시로 업데이트 해줘야 한다.

 하지만 업데이트는 파일을 다운로드하여 교체하는 형식으로 해야 하며 다운로드를 위해서는 maxmind에 가입 후 라이선스 키가 있어야 다운로드가 가능하기 때문에 이를 위한 과정을 진행해야 한다.

 

nginx geoip.dat 파일 업데이트 하기

1. maxmind 가입.

 아래의 링크를 클릭하여 회원가입을 진행 하자.

 가입은 회원정보를 기입하고 발송된 이메일에서 링크를 통해 비밀번호를 설정하면 된다.

 maxmind 가입 페이지

가입 정보 입력

2. 라이선스 키 발급.

 가입을 완료했다면 로그인 후 라이선스 키를 발급 받자.

 왼쪽의 메뉴에서 Mange License Keys를 클릭.

키 발급 메뉴

 Yes를 체크하고, 첫번째 메뉴를 체크한 뒤 [Confirm[ 버튼을 클릭.

발급 신청

 라이선스 키는 처음 발급할 때만 확인이 가능하기 때문에 따로 복사하여 잘 보관하거나 [Download Config] 버튼을 클릭하여 파일로 저장해두자.

라이선스 키 확인

3. 파일 다운로드.

 라이선스 키를 발급 받았다면 이제 최신버전의 geoip.csv 파일과 csv 파일을 dat 파일로 변환해줄 파일을 다운로드 하자.

 (경로는 사용자에 맞게 변경하면 된다.)

 

 우선 아래의 명령어를 입력하여 git 패키지를 설치하고 git를 이용하여 csv를 dat 파일로 변환해줄 파일을 다운로드 하자.

sudo apt install git
git clone https://github.com/sherpya/geolite2legacy /home/ubuntu/geolite2legacy

 

 변환 파일을 다운로드 했다면 이번에는 디렉토리를 생성하고 최신버전의 geoip.csv 파일을 다운로드 하자.

 다운로드 코드의 라이선스 키 부분은 발급 받은 라이선스 키를 넣으면 된다.

mkdir /home/ubuntu/geolite2legacy/tmpwget "https://download.maxmind.com/app/geoip_download?edition_id=GeoLite2-Country-CSV license_key=라이선스키 suffix=zip" -O /home/ubuntu/geolite2legacy/tmp/GeoLite2-Country-CSV.zip

 

4. 파일 변환.

 필요한 파일을 다운로드 했다면 이제 변환을 하면 되는데 변환에는 파이썬과 파이썬의 모듈이 필요하기 때문에 먼저 이를 설치해야 한다.

 우분투에는 기본적으로 파이썬이 설치되어있으니 모듈을 설치하기 위한 pip와 필요한 파이썬 모듈을 설치하면 된다.

sudo apt install python3-pip
pip install pygeoip
pip install ipaddr

 

 모듈을 모두 설치했다면 명령어를 입력하여 dat 파일을 만들자.

/home/ubuntu/geolite2legacy/geolite2legacy.py -i /home/ubuntu/geolite2legacy/tmp/GeoLite2-Country-CSV.zip -f /home/ubuntu/geolite2legacy/geoname2fips.csv -o /home/ubuntu/geolite2legacy/tmp/GeoIP.dat

 

5. 파일 업데이트.

 기존의 파일을 새로 생성된 파일로 변경하고 nginx를 재시작하면 된다.

mv /home/ubuntu/geolite2legacy/tmp/GeoIP.dat /usr/share/GeoIP
service nginx restart

 

 

자동 업데이트 설정 하기

1. sh 파일 만들기.

 위 과정을 sh 파일로 만들고 크론 탭에 등록하면 자동 업데이트가 가능하도록 할 수 있다.

vi /home/ubuntu/geolite2legacy/geoip_update.sh

 

 위 과정을 한 번 이라도 진행했다면 필요한 패키지나 모듈은 설치되어있기 때문에 sh의 내용에는 파일 다운로드, 변환, 이동, 서버 재시작의 과정만 넣으면 되며 안전하게 실행되도록 하고자 한다면 각 단계마다 적당히 대기 시간을 주는 것도 좋다.

#!/bin/bash
wget "https://download.maxmind.com/app/geoip_download?edition_id=GeoLite2-Country-CSV&license_key=GlUDQpWfTLtYEYlE&suffix=zip" -O /home/ubuntu/geolite2legacy/tmp/GeoLite2-Country-CSV.zip

sleep 1

/home/ubuntu/geolite2legacy/geolite2legacy.py -i /home/ubuntu/geolite2legacy/tmp/GeoLite2-Country-CSV.zip -f /home/ubuntu/geolite2legacy/geoname2fips.csv -o /home/ubuntu/geolite2legacy/tmp/GeoIP.dat

sleep 1

sudo mv /home/ubuntu/geolite2legacy/tmp/GeoIP.dat /usr/share/GeoIP

sleep 1

sudo service nginx restart

sh 파일 작성

 작성한 파일은 권한을 변경하자.

sudo chmod 700 /home/ubuntu/geolite2legacy/geoip_update.sh

 

2. 크론탭 등록.

 이제 크론 탭을 실행하고 작성한 sh 파일을 등록하자.

crontab -e

 

 파일은 한달에 한번 새벽에 실행되도록 설정해두면 무난하지 않을까 한다.

0 4 7 * * /home/ubuntu/geolite2legacy/geoip_update.sh

크론탭 등록