■ GeoIP

- MaxMind 에서 제공하는 모듈과 IP정보 DB 를 통해서 웹에 접근하는 IP의 국가별로 확인할 수 있도록 도와주는 솔루션 입니다. 해외에서의 불필요한 접근을 차단하기 위해 자주 사용합니다.

- 2022년 5월 말에 GeoIP Legacy DB (.dat 확장자) 업데이트가 중단될 예정이며, 이에 따라 MaxMind 사에서 제공하는 GeoIP2(MaxMind) Apache Module 를 설치하여 사용하는것을 권장합니다.

 

■ libmaxminddb 설치

mod_maxminddb를 설치하기 위한 라이브러리 설치.

# yum install libmaxminddb libmaxminddb-devel

 

■ mod_maxminddb 설치

mod_maxminddb 모듈은 Apahce 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 zxvf mod_maxminddb-1.2.0.tar.gz
# cd mod_maxminddb-1.2.0
# ./configure --with-apxs=/usr/local/httpd2/bin/apxs
# make; make install

# 설치한 모듈 확인

-rwxr-xr-x 1 root root 49732 2021-11-23 14:23 mod_maxminddb.so
# cat /usr/local/apache/conf/httpd.confLoadModule maxminddb_module modules/mod_maxminddb.so

 

■ geoipupdate 설치

 geoipupdate를 사용하기 위해서는 maxmind 홈페이지에서 회원가입 후, 라이센스를 발급받아야 합니다.

회원가입 및 라이센스 발급 방법은 추후 업데이트 하도록 하겠습니다.

# 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
# make ; make install


# GeoIP.conf (라이센스) 파일 등록
# cd /usr/local/etc
# cat GeoIP.conf
AccountID 
LicenseKey 
EditionIDs GeoLite2-ASN GeoLite2-City GeoLite2-Country


# GeoIP DB 파일 업데이트 진행.
# /usr/local/bin/geoupdate
# ll /usr/local/share/GeoIP
-rw-r--r-- 1 root root 7485474 2021-11-23 14:40 GeoLite2-ASN.mmdb
-rw-r--r-- 1 root root 74189738 2021-11-23 14:41 GeoLite2-City.mmdb
-rw-r--r-- 1 root root 6000017 2021-11-23 14:41 GeoLite2-Country.mmdb


# geoipupdate 스케쥴 등록
# cat <<EEE>> /etc/crontab
# GeoIP DB Update
00 06 * * 3 root /usr/local/bin/geoipupdate/geoipupdate
EEE

 

■ 특정 국가에서의 접근 설치

아래는 적용 예시입니다. 서버환경에 맞게 변경이 필요합니다.

 

1. 한국, 미국에서의 접근만 허용

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. 베트남에서의 접근 차단

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 ^(VN) 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>


<VirtualHost *:80>
DocumentRoot /home/SEKK/docs
ServerName SEKK.hktest.shop
CustomLog logs/SEKK.hktest.shop-log geoip

<IfModule maxminddb_module>
SetEnvIf MM_COUNTRY_CODE ^(US) AllowCountry

<Location />

Deny From all
Allow from env=AllowCountry
</Location>

</IfModule>

</VirtualHost>

 

4. 로그 Format 설정

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{MM_COUNTRY_CODE}e" geoip


- - [23/Nov/2021:17:50:26 +0900] "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

'Linux > Apache' 카테고리의 다른 글

Http2 Apache Module 설치  (0) 2022.03.23
Apache 2.4.52 설치  (0) 2022.03.23

+ Recent posts