1. MaxMind 회원가입
https://www.maxmind.com/en/geolite2/signup
* 계정 가입 후 로그인 -> 라이센스키 발급
※ 발급반은 라이센스 정보는 1회만 확인가능 별도 저장 필수
2. libmaxminddb 설치
# yum install epel-release
# yum install libmaxminddb libmaxminddb-devel
3. mod_maxminddb 설치
※ mod_maxminddb 모듈은 Apache 2.2 이상에서 사용 가능
# cd /usr/local/src
# wget https://github.com/maxmind/mod_maxminddb/releases/download/1.2.0/mod_maxminddb-1.2.0.tar.gz
# tar xvfz mod_maxminddb-1.2.0.tar.gz
# cd mod_maxminddb-1.2.0
# ./configure --with-apxs=/usr/local/httpd2/bin/apxs
# make; make install
※ 설치한 모듈 확인
# ls -lh /usr/local/httpd2/modules/
-rwxr-xr-x 1 root root 50K 2022-07-08 11:37 mod_maxminddb.so
# cat /usr/local/httpd2/conf/httpd.conf
LoadModule maxminddb_module modules/mod_maxminddb.so
4. geoipupdate 설치
# cd /usr/local/src
# wget https://github.com/maxmind/geoipupdate/releases/download/v3.1.1/geoipupdate-3.1.1.tar.gz
# tar zxvf geoipupdate-3.1.1.tar.gz
# cd geoipupdate-3.1.1
# ./configure
----------------------------------------------------------------------------------------------------------------------------------------------
※ 아래 오류 발생시 조치방법
configure: error: curl header (curl/curl.h) not found. You may need to install a curl development package.
-> curl-devel 설치
# yum install curl-devel
----------------------------------------------------------------------------------------------------------------------------------------------
# make; make install
5. geoip 설정파일 설정
1) Geoip.conf (라이센스) 파일 등록
# cd /usr/local/etc; mv GeoIP.conf GeoIP.conf_org
# vi GeoIP.conf
---------------------------------------------------------
AccountID [MaxMind Account ID]
LicenseKey [MaxMind 회원가입시 제공하는 LicenseKey]
EditionIDs GeoLite2-ASN GeoLite2-City GeoLite2-Country
---------------------------------------------------------
2) GeoIP DB 파일 업데이트 진행
# /usr/local/bin/geoipupdate
# ll /usr/local/share/GeoIP
-rw-r--r-- 1 root root 7775027 2022-07-08 11:47 GeoLite2-ASN.mmdb
-rw-r--r-- 1 root root 67837494 2022-07-08 11:47 GeoLite2-City.mmdb
-rw-r--r-- 1 root root 5503746 2022-07-08 11:47 GeoLite2-Country.mmdb
3) Geoipupdate 스케쥴 crontab 등록
※ 원하는 업데이트 시간 조정하여 등록
# cat <<EEE>> /etc/crontab
00 06 * * 3 root /usr/local/bin/geoipudate
EEE
6. 특정 국가의 접근 차단
- 적용 예시로 서버환경에 맞게 변경필요
1) 한국, 미국에서의 접근만 허용
※ httpd.conf 에서 설정
<IfModule maxminddb_module>
MaxMindDBEnable On
MaxMindDBFile COUNTRY_DB /usr/local/share/GeoIP/GeoLite2-Country.mmdb
MaxMindDBFile CITY_DB /usr/local/share/GeoIP/GeoLite2-City.mmdb
MaxMindDBFile ASN_DB /usr/local/share/GeoIP/GeoLite2-ASN.mmdb
MaxMindDBEnv MM_COUNTRY_CODE COUNTRY_DB/country/iso_code
SetEnvIf MM_COUNTRY_CODE ^(KR|US) AllowCountry
<Location />
Deny from all
Allow from env=AllowCountry
</Location>
</IfModule>
2) 중국에서의 접근 차단
※ httpd.conf 에서 설정
<IfModule maxminddb_module>
MaxMindDBEnable On
MaxMindDBFile COUNTRY_DB /usr/local/share/GeoIP/GeoLite2-Country.mmdb
MaxMindDBFile CITY_DB /usr/local/share/GeoIP/GeoLite2-City.mmdb
MaxMindDBFile ASN_DB /usr/local/share/GeoIP/GeoLite2-ASN.mmdb
MaxMindDBEnv MM_COUNTRY_CODE COUNTRY_DB/country/iso_code
SetEnvIf MM_COUNTRY_CODE ^(CN) BlockCountry
<Location />
Deny from env=BlockCountry
</Location>
</IfModule>
3) 도메인별 설정
※ httpd.conf 에서 설정
<ifmodule maxminddb_module>
MaxMindDBEnable On
MaxMindDBFile COUNTRY_DB /usr/local/share/GeoIP/GeoLite2-Country.mmdb
MaxMindDBFile CITY_DB /usr/local/share/GeoIP/GeoLite2-City.mmdb
MaxMindDBFile ASN_DB /usr/local/share/GeoIP/GeoLite2-ASN.mmdb
MaxMindDBEnv MM_COUNTRY_CODE COUNTRY_DB/country/iso_code
</IfModule>
※ vhosts.conf 에서 설정
<VirtualHost *:80>
DocumentRoot /home/test/docs
ServerName test.com
CustomLog logs/test.com-log geoip
<IfModule maxminddb_module>
SetEnvIf MM_COUNTRY_CODE ^(US) AllowCountry
<Location />
Deny From all
Allow from env=AllowCountry
</Location>
</IfModule>
</VirtualHost>
4) 로그 설정
※ httpd.conf 에서 수정
- 접근하는 IP의 국가확인이 가능
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{MM_COUNTRY_CODE}e" geoip
"GET / HTTP/1.1" 200 16157 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36" KR