■ 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 |