기술문서 GeoIP 를 이용한 Apache 설정 - 국가별 접속 차단
2018.06.13 03:01
GeoIP 란 MaxMind 에서 제공하는 국가별로 IP를 확인할 수 있는 오픈소스 라이브러리로 이를 이용하여 서버에 접근 하는 아이피를 국가별로 관리할 수 있습니다.
1. Apache에 GeoIP 모듈 설치하기
1-1. GeoIP C API 설치하기
# cd /usr/local/src
# wget http://geolite.maxmind.com/download/geoip/api/c/GeoIP-1.4.8.tar.gz
# tar zxvf GeoIP-1.4.8.tar.gz
# cd GeoIP-1.4.8
#./configure --prefix=/usr/local/GeoIP
# make && make install
- GeoIP의 ip목록을 최신정보로 갱신하기 위하여 GeoIP.dat 을 다운받아 설치된 위치에 복사
: 국가 정보 다운로드
# wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
: 도시 정보 다운로드
# wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
# gzip -d GeoIP.dat.gz
# gzip -d GeoLiteCity.dat.gz
- 해제된 파일을 GeoIP가 설치된 위치에 덮어쓰기
#cp -a GeoIP.dat /usr/local/GeoIP/share/GeoIP/
#cp -a GeoLiteCity.dat /usr/local/GeoIP/share/GeoIP/
1-2. GeoIP 모듈을 아파치에 설치하기
-mod_geoip 다운
아파치 2.x 용
https://github.com/maxmind/geoip-api-mod_geoip2/archive/1.2.10.tar.gz
wget https://github.com/maxmind/geoip-api-mod_geoip2/archive/1.2.10.tar.gz
# tar zxvf 1.2.10.tar.gz
-> 해제된 위치로 이동 후 c 파일을 apxs 를 이용하여 설치
# cd geoip-api-mod_geoip2-1.2.10
# [아파치 apxs경로] -i -a -L [geoip 설치 디렉토리의 lib 경로] -I [geoip 설치 디렉토리의 include 경로] -l GeoIP -c [mod_geoip.c 경로]
----> 옵션 대소문자 주의 -l GeoIP = 소문자 엘로 시작
# /usr/bin/apxs -i -a -L /usr/local/GeoIP/lib -I /usr/local/GeoIP/include -l GeoIP -c /usr/local/src/geoip-api-mod_geoip2-1.2.10/mod_geoip.c
# ls -al /usr/lib/apache2/modules/mod_geoip.so
# cat /etc/apache2/mods-enabled/mod_geoip.load
- phpinfo 페이지의 Apache Environment 정보에 GEOIP_CONTINENT_CODE, GEOIP_COUNTRY_CODE, GEOIP_COUNTRY_NAME 항목 확인
# vi /etc/apache2/mods-enabled/mod_geoip.conf
특정 국가의 접근 차단
<IfModule mod_geoip.c>
GeoIPEnable On
GeoIPDBFile /usr/local/GeoIP/share/GeoIP/GeoIP.dat
<Location /home>
SetEnvIf GEOIP_COUNTRY_CODE CN go_out
SetEnvIf GEOIP_COUNTRY_CODE RU go_out
SetEnvIf GEOIP_COUNTRY_CODE TH go_out
<Limit GET POST>
Order allow,deny
Allow from all
Deny from env=go_out
</Limit>
</Location>
</IfModule>
특정 국가에만 접근 허용
<IfModule mod_geoip.c>
GeoIPEnable On
GeoIPDBFile /usr/local/GeoIP/share/GeoIP/GeoIP.dat
<Location /home>
SetEnvIf GEOIP_COUNTRY_CODE KR go_in
<Limit GET POST>
Order Deny,Allow
Deny from all
Allow from env=go_in
</Limit>
</Location>
</IfModule>
[cloudflare 적용시]
<IfModule mod_geoip.c>
GeoIPEnable On
GeoIPDBFile /usr/local/GeoIP/share/GeoIP/GeoIP.dat
</IfModule>
<Directory /home/>
SetEnvIf GEOIP_COUNTRY_CODE KR AllowCountry
Allow from env=AllowCountry
allow from 103.21.244.0/22
allow from 103.22.200.0/22
allow from 103.31.4.0/22
allow from 104.16.0.0/12
allow from 108.162.192.0/18
allow from 131.0.72.0/22
allow from 141.101.64.0/18
allow from 162.158.0.0/15
allow from 172.64.0.0/13
allow from 173.245.48.0/20
allow from 188.114.96.0/20
allow from 190.93.240.0/20
allow from 197.234.240.0/22
allow from 198.41.128.0/17
allow from 199.27.128.0/21
Deny from all
</Directory>
[참고]
Cannot load mod_geoip.so into server: libGeoIP.so.1: cannot open shared object file: No such file or directory
에러 발생시
/etc/ld.so.conf 파일에
/usr/local/GeoIP/lib 라인 추가 후
ldconfig 실행 적용
댓글 0
번호 | 제목 | 날짜 | 조회 수 |
---|---|---|---|
126 |
주요정보통신기반시설 기술적 취약점 분석 평가 상세 가이드
![]() | 2019.03.20 | 831 |
125 | HP-UX networking - 11.31 10G NIC | 2019.03.19 | 1233 |
124 | TCP/IP Tuning parameter | 2019.03.15 | 2956 |
123 | hpux cmsnmpd daemon 중지 | 2019.02.28 | 442 |
122 | 아파치 2.2.29 버젼에서 SSLProtocol 중 TLSv1.2로 설정 | 2019.02.27 | 4555 |
121 | usage: raspistill [options] - Image parameter commands | 2018.11.16 | 1342 |
120 | [python] MySQL 사용법 예제 | 2018.10.24 | 717 |
119 | netcat | 2018.10.09 | 1303 |
118 | hpux cron job 실행 에러 처리 방안 | 2018.07.06 | 712 |
» | GeoIP 를 이용한 Apache 설정 - 국가별 접속 차단 | 2018.06.13 | 816 |
116 | 시스템 보안 과목 예상문제 풀이 | 2018.05.26 | 865 |
115 | Parameters for Web Server Plug-Ins | 2018.05.10 | 2520 |
114 | HTTP Status Code HTTP 상태 코드 | 2018.05.03 | 729 |
113 | http protocol 기본적인 이해 | 2018.04.27 | 373 |
112 | name server 보안 (bind) | 2018.04.26 | 1624 |