Last Updated on 8월 17, 2021 by Jade(정현호)
안녕하세요
이번 포스팅에서는 GeoIP 설치 및 mod_maxminddb 설치 및 Apache 설정에 대해서 확인 해보도록 하겠습니다.
Contents
GeoIP 란
GeoIP 란 MaxMind 에서 제공하는 모듈과 IP정보 DB 를 통해서 웹에 접근하는 IP의 국가별로 확인할 수 있는 오픈 소스 솔루션 입니다.
GeoIP 라이브러리로 이를 이용하여 서버에 접근 하는 IP를 국가별로 제한,허용 할 수 있습니다.
2019년 12월 30일 부로 Database 에 대한 정책이 새롭게 변경됨에 따라 MaxMind DB Format 인 mmdb를 사용하는 GeoIP2 를 설치하는 방식으로 변경 되었으며 그에 대한 내용으로 내용을 다루도록 하겠습니다.
회원가입
아래 링크에 접속 하여 회원가입을 진행합니다.
https://www.maxmind.com/en/geolite2/signup [Link]
정보를 입력 하고 회원가입을 합니다.
가입후 도착한 Email 에서 이미지와 같이 here 를 클릭하여 패스워드를 생성 합니다.
생성 완료 한 뒤 위와 같이 로그인 창으로 이동 되며 로그인을 합니다.
로그인 후 좌측에 있는 “My License Key” 를 클릭 합니다.
Generate new license key 를 클릭 합니다.
License key description 에 간략히 내용을 기재 하고 , 3.1.1 or newer 를 선택 후 confirm 을 클릭 합니다.
new license key 가 발급되었다면 Account/User ID 와 License key를 별도로 기재(저장) 해놔야 합니다 그리고 Download Config 를 클릭하여 파일을 다운 받아 놓습니다.
다시 왼쪽 아래 메뉴에서 Download Files 를 클릭 합니다.
아래 이미지와 같이 3개의 gzip를 다운로드 받습니다.
다운로드 받았다면 서버로 업로드 후 /usr/share/GeoIP/ 위치에 압축을 해제 합니다
# ls -alrt /usr/share/GeoIP | grep mmdb
-rw-r--r--. 1 root root 3896583 Jul 22 02:22 GeoLite2-Country.mmdb
-rw-r--r--. 1 root root 63513173 Jul 22 02:26 GeoLite2-City.mmdb
-rw-r--r--. 1 root root 6813673 Aug 6 03:28 GeoLite2-ASN.mmdb
GeoIP 설치
python-ipaddr 와 maxmind 설치 합니다
# python-ipaddr yum install -y python-ipaddr # libmaxminddb 설치 https://github.com/maxmind/libmaxminddb https://github.com/maxmind/libmaxminddb/releases wget https://github.com/maxmind/libmaxminddb/releases/download/1.4.2/libmaxminddb-1.4.2.tar.gz tar zxvf libmaxminddb-1.4.2.tar.gz cd libmaxminddb-1.4.2 ./configure make ; make install echo /usr/local/lib >> /etc/ld.so.conf ldconfig
mod_maxminddb 설치
mod_maxminddb 를 설치 합니다.
https://github.com/maxmind/mod_maxminddb/releases 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 --prefix=/usr/local/mod_maxminddb-1.2.0 --with-apxs=/usr/local/apache2.4/bin/apxs make ; make install
모듈 파일이 설치가 정상적으로 되었으며 apache의 module 디렉토리에 존재 하는지를 확인 합니다
ls -al /usr/local/apache2.4/modules/mod_maxminddb.so -rwxr-xr-x. 1 root root 56440 Jul 26 15:23 /usr/local/apache2.4/modules/mod_maxminddb.so grep mod_max /usr/local/apache2.4/conf/httpd.conf LoadModule maxminddb_module modules/mod_maxminddb.so
Apache 에 GeoIP 설정
다음과 같이 Apache의 httpd.conf 파일에 아래 내용을 추가 합니다.
~]# vi /usr/local/apache2.4/conf/httpd.conf
<IfModule maxminddb_module> MaxMindDBEnable On MaxMindDBSetNotes On MaxMindDBFile COUNTRY_DB /usr/share/GeoIP/GeoLite2-Country.mmdb MaxMindDBFile CITY_DB /usr/share/GeoIP/GeoLite2-City.mmdb MaxMindDBFile ASN_DB /usr/share/GeoIP/GeoLite2-ASN.mmdb MaxMindDBEnv COUNTRY_CODE COUNTRY_DB/country/iso_code MaxMindDBEnv REGION_CODE CITY_DB/subdivisions/0/iso_code MaxMindDBEnv MM_COUNTRY_CODE CITY_DB/country/iso_code MaxMindDBEnv MM_COUNTRY_NAME CITY_DB/country/names/en MaxMindDBEnv MM_CITY_NAME CITY_DB/city/names/en MaxMindDBEnv MM_LONGITUDE CITY_DB/location/longitude MaxMindDBEnv MM_LATITUDE CITY_DB/location/latitude MaxMindDBEnv MM_ASN ASN_DB/autonomous_system_number MaxMindDBEnv MM_ASORG ASN_DB/autonomous_system_organization MaxMindDBNetworkEnv COUNTRY_DB COUNTRY_NETWORK MaxMindDBNetworkEnv CITY_DB CITY_NETWORK MaxMindDBNetworkEnv ASN_DB ASN_DB_NETWORK </IfModule> # 한줄로 입력 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{MM_COUNTRY_CODE}e" geoip # access_log 도 수정 CustomLog logs/access_log geoip
# 여기 까지 진행 후 Apache 를 재 기동 하게 되면 로그 상에 아래와 같이 로그의 맨 끝에 국가 코드가 같이 기록 되는걸 확인 할 수 있습니다
123.123.123.123 - - [11/Aug/2020:00:21:57 +0900] "HEAD / HTTP/1.1" 200 - "http://www.abc.co.kr" "Mozilla/5.0+(compatible; AABOT/2.0; http://www.AAA.com/)" US
자동 업데이트 설정
GeoIP DB의 자동 업데이트를 설정 하도록 하겠습니다.
geoipupdate 설치
geoupupdate 다운로드 및 설치를 진행 하도록 하겠습니다.
~]# wget https://github.com/maxmind/geoipupdate/releases/download/v4.3.0/geoipupdate_4.3.0_linux_amd64.tar.gz ~]# tar zxvf geoipupdate_4.3.0_linux_amd64.tar.gz ~]# mv geoipupdate_4.3.0_linux_amd64/ /usr/local ~]# cd /usr/local/geoipupdate_4.3.0_linux_amd64 ~]# ln -s /usr/local/geoipupdate_4.3.0_linux_amd64/GeoIP.conf /usr/local/etc/GeoIP.conf
GeoIP.conf 파일 수정
~]# vi /usr/local/etc/GeoIP.conf
# are available from https://www.maxmind.com/en/my_license_key.
AccountID 입력
LicenseKey 입력
# Enter the edition IDs of the databases you would like to update.
# Multiple edition IDs are separated by spaces.
EditionIDs GeoLite2-Country GeoLite2-City
# The remaining settings are OPTIONAL.
# The directory to store the database files. Defaults to /usr/local/share/GeoIP
DatabaseDirectory 경로수정 -> /usr/share/GeoIP
업데이트 실행 및 crontab 등록
업데이트 유틸리티 수행 방법
~]# cd /usr/local/geoipupdate_4.3.0_linux_amd64
~]# ./geoipupdate -v
crontab 등록
~]# crontab –e
### 매달 15일 오전 6시 00분에 수행되도록 등록
### GeoIP Update
00 06 15 * * /usr/local/geoipupdate_4.3.0_linux_amd64/geoipupdate -v
Apache 국가별 차단
Apache의 httpd.conf 파일을 수정 하며 virtualhost 를 사용하는 기준으로 작성되어 있습니다.
[root]# vi httpd.conf
<VirtualHost 123.123.123.123:80>
ServerAdmin admin@abc.co.kr
DocumentRoot "/source/abc"
ServerName abc.co.kr
ServerAlias abc.co.kr www.abc.co.kr
ErrorLog "logs/abc.co.kr-error_log"
CustomLog "logs/abc.co.kr-access_log" geoip
# 위에서 설정한 geoip 명칭
<Directory "/source/abc">
AllowOverride ALL
Options FollowSymLinks MultiViews
DirectoryIndex index.jsp index.php index.html index.htm
## Blocking by Country CN
SetEnvIf MM_COUNTRY_CODE ^(CN) BlockCountry
## <== 위의 부분이 중국 국가 차단 설정 부분
## 예를 들어 CN, EU 국가만 차단 하고자 할때는 아래처럼 기술하면 됩니다.
## SetEnvIf MM_COUNTRY_CODE ^(CN|EU) BlockCountry
## SetEnvIf 는 <Directory> 나 <Location> 절 안에서 사용할 수 있습니다.
<RequireAll>
Require all granted
Require not env BlockCountry
Require not env bad_bot
Require not env ipdeny
</RequireAll>
## Require not env 는 <RequireAll> 절 안에서 선언 해야 합니다.
</Directory>
</VirtualHost>
위와 같이 설정후 apache 재기동이나 graceful 재기동 을 하게 되면 적용이 되게 됩니다.
테스트시 SetEnvIf MM_COUNTRY_CODE ^(KR) BlockCountry 로 KR 넣고 접속 차단이 잘되는지 테스트 해보시면 됩니다.
Principal DBA(MySQL, AWS Aurora, Oracle)
핀테크 서비스인 핀다에서 데이터베이스를 운영하고 있어요(at finda.co.kr)
Previous - 당근마켓, 위메프, Oracle Korea ACS / Fedora Kor UserGroup 운영중
Database 외에도 NoSQL , Linux , Python, Cloud, Http/PHP CGI 등에도 관심이 있습니다
purityboy83@gmail.com / admin@hoing.io
안녕하세요! 저는 CentOS 7에서 yum 으로 apm을 설치하여서 apache 위치가 etc/httpd 인 상태입니다. 이럴때 mod_maxminddb 설치하면서 /usr/local/apache2.4/bin/apxs 이 위치가 없어서 에러가 발생하네요. 제 경우엔 어느 경로로 지정해야할까요?
안녕하세요
httpd-devel-....rpm 이 설치 되어 있다면 이미 설치가 되어 있으실 거에요
설치 확인
1) which apxs
2) 패키지 확인
rpm -qa | grep httpd-devel
위에서 나온 결과를 아래와 같이조회
rpm -ql httpd-devel-2.4.48-1...
만약 설치가 안되어있다면 설치를 하시면 됩니다.
yum -y install httpd-devel
감사합니다
설치되어있네요 위치가 /usr/bin/apxs 네요 감사합니다.
./configure --prefix=/usr/local/mod_maxminddb-1.2.0 --with-apxs=/usr/local/apache2.4/bin/apxs
이 부분인것 같은데요
경로를 /usr/bin/apxs 으로 하시면 될것 같아요