아래 스크립트는 배포 url 이 변경되어 동작 되지 않아요.
새로운 업데이트 방법 관련 글 : GEOIP database 파일 업데이트
GeoIP.dat 파일을 배포하는 maxmind (https://www.maxmind.com/) 사에서 레거시 파일 형태인 GeoIP.dat 파일을 2019-01-02 일로 부터 배포를 중단하였다.
기존에 apache 혹은 nginx 그리고 iptables 등에서 사용중인 국가별 구분 및 제한을 을 지속적으로 사용 하기 위해서는
GeoIP의 지속적인 업데이트가 필요로 한다.
– 주기적으로 ip는 로테이션이 되기 때문에 dat 파일이 갱신되지 않은채 1년 정도가 지나면 신뢰도가 떨어진다.
다만 과거 형태 .dat 파일만 배포 중단이며 .mmdb 및 .csv 형태의 배포는 지속되고 있다.
때문에 배포되는 csv 파일을 이용 하여 dat 파일을 직접 생성해 주는 방향으로 진행할 수 있다.
이미 github 에서 csv를 이용한 dat 파일을 만드는 게 몇몇 올라와 있다. 이중 https://github.com/sherpya/geolite2legacy 을 이용하여 생성할 수 있는 스크립트를 작성 하였다 ‘ㅅ’a
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
#!/bin/bash ### config - DISABLE city it'll be need free memory 2GB REPLACEDATA="30" CITYDATA="N" ### avoid overlap lockfile=/var/lock/$(basename $0) if [ -f $lockfile ];then P=$(cat $lockfile) if [ -n "$(ps --no-headers -f $P)" ];then exit 1 fi fi echo $$ > $lockfile trap 'rm -f "$lockfile"' EXIT ### install dependances if [[ -z $(which git) ]];then sudo yum -y install git > /dev/null 2>&1 ;fi if [[ -z $(which pip) ]];then sudo yum -y install python2-pip > /dev/null 2>&1;fi if [[ -z $(pip list|grep pygeoip) ]];then sudo pip install pygeoip > /dev/null 2>&1 ;fi if [[ -z $(pip list|grep ipaddr) ]];then sudo pip install ipaddr > /dev/null 2>&1 ;fi ### link path GEOIPDIR="/usr/share/GeoIP" DATALINK="/usr/share/xt_geoip /var/lib/GeoIP" if [[ ! -d $GEOIPDIR ]];then mkdir -p $GEOIPDIR fi for a in $DATALINK do if [[ ! -d $a ]];then if [[ $(readlink $a) != $GEOIPDIR ]];then rm -rf $a;ln -s $GEOIPDIR $a fi;fi done ### https://github.com/sherpya/geolite2legacy cd $GEOIPDIR if [ ! -e $GEOIPDIR/geolite2legacy/geolite2legacy.py ];then cd $GEOIPDIR git clone https://github.com/sherpya/geolite2legacy.git fi ### make GeoIP.dat files if [ -d $GEOIPDIR/geolite2legacy ];then cd $GEOIPDIR/geolite2legacy COUNTRY="GeoLite2-Country-CSV.zip" CITY="GeoLite2-City-CSV.zip" if [[ -z $(find $GEOIPDIR/geolite2legacy -maxdepth 1 \( -name $COUNTRY -o -name $CITY \) -mtime +$REPLACEDATA) ]];then rm -f $COUNTRY $CITY wget "https://geolite.maxmind.com/download/geoip/database/GeoLite2-Country-CSV.zip" > /dev/null 2>&1 if [[ $CITYDATA == "Y" ]];then wget "https://geolite.maxmind.com/download/geoip/database/GeoLite2-City-CSV.zip" > /dev/null 2>&1 fi fi if [ -e $GEOIPDIR/geolite2legacy/$COUNTRY ];then python geolite2legacy.py --input-file $COUNTRY --fips-file geoname2fips.csv --output-file GeoIP.dat python geolite2legacy.py --input-file $COUNTRY -6 --fips-file geoname2fips.csv --output-file GeoIPv6.dat if [[ $CITYDATA == "Y" ]];then python geolite2legacy.py --input-file $CITY --fips-file geoname2fips.csv --output-file GeoLiteCity.dat python geolite2legacy.py --input-file $CITY -6 --fips-file geoname2fips.csv --output-file GeoLiteCityv6.dat fi fi if [ -e GeoIP.dat ];then find $GEOIPDIR -maxdepth 1 -name "*.dat" -mtime +$REPLACEDATA -exec rm -f {} \; if [[ $CITYDATA == "Y" ]];then mv -f Geo{IP,IPv6,LiteCity,LiteCityv6}.dat $GEOIPDIR/ > /dev/null 2>&1 else mv -f Geo{IP,IPv6}.dat $GEOIPDIR/ > /dev/null 2>&1 fi;fi;fi unset GEOIPDIR DATALINK CITY COUNTRY CITYDATA REPLACEDATA exit 0 |
GeoLiteCity.dat 는 최상단의 config CITYDATA 를 Y 로 지정하면 생성한다. (일반적으로 불필요 하며, 생성시 2GB 이상의 메모리를 사용 한다.)
cron 등록은 /etc/cron.daily/ 혹은 /etc/cron.weekly/ 에 파일을 만들어 두면 anacron 이 알아서 주 or 일에 돌려주겠지요..