기술문서 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
번호 | 제목 | 날짜 | 조회 수 |
---|---|---|---|
125 | 윈도우용 wget | 2017.09.28 | 4017 |
124 | tcpdump - dump traffic on a network [1] | 2017.10.13 | 4028 |
123 | Tear Drop / Tiny Fragment / Fragment Overlap(고전적인방법) | 2017.10.17 | 9038 |
122 | Smurf Attack / Land Attack / Ping of Death | 2017.10.17 | 1293 |
121 | UDP 플러드 공격 - NTP, DNS, SSDP Amplification DDoS Attack | 2017.10.18 | 1137 |
120 | DDoS 공격도구 | 2017.10.18 | 221 |
119 | 스니핑용 promisc 모드 | 2017.10.29 | 320 |
118 | 사이버 침해사고 대응 절차 | 2017.10.29 | 236 |
117 | 전자서명의 원리 | 2017.10.30 | 183 |
116 | route access-list | 2017.10.30 | 590 |
115 | 블록체인 | 2017.10.31 | 161 |
114 | DDos 공격대응 가이드 - kisa 자료 | 2017.10.31 | 290 |
113 | 시스템보안 | 2017.11.01 | 1314 |
112 | 어플리케이션 보안 | 2017.11.01 | 133 |
111 | 개발보안 | 2017.11.01 | 563 |