Back to writing
미분류 2 min read HYEONG HWAN, MUN

Ubuntu GeoIP를 사용하여 외국트래픽차단하기

u1이 글에서는 Apache GeoIP 모듈을 설치하고, 외국 트래픽을 차단하는 방법에 대해 설명합니다.

웹서비스를 운영하다보면 "지역단체", "정치인", "중소형 음식점" 등과 같이 외국 트래픽이 전혀 필요 없을 때가 있다.

이 때 외국트래픽을 차단해 주면 보안이 매우 향상된다.

*GeoIP : IP 주소만으로 해당국가를 알 수 있는 모듈. IP 주소가 무작위로 할당되는 것이 아니라, 대륙별, 지역별로 계층 할당되기 때문에 IP 만으로도 대략적인 정보를 추측할 수 있다.

 

예를 들어, 서울대학교 메인 서버의 주소 및 위치 정보는 다음과 같다.

http://ipconfig.tools/ko/whois?host=147.46.10.58

 

1. Install GeoIP

> 우선 웹브라우져에서 다음의 링크를 클릭하여  링크가 깨졌는지 체크한다.
> 깨졌으면 알아서 설치하고
> 깨지지 않았으면 2번을 진행한다.
http://www.maxmind.com/download/geoip/api/c/GeoIP.tar.gz

2. 서버에 root 권한으로 로그인

#whoami

root

#cd ~
#pwd

/root

3. GeoIP 모듈 다운로드

# wget http://www.maxmind.com/download/geoip/api/c/GeoIP.tar.gz
# tar -xzvf GeoIP.tar.gz

4. GeoIP 버전체크

라엘이의 경우는 1.4.6 이었다.

# ls -l | grep GeoIP-

drwxr-xr-x 8  501 root    4096 2009-02-25 10:44 GeoIP-1.4.6

5. 설치

# cd GeoIP-1.4.6/
# ./configure
# make
# make install

6. 설치파일 제거

# cd ~
# rm -rf GeoIP-1.4.6/

7. GeoIP 모듈설정

#ls -l /usr/share/GeoIP/GeoIP.dat
 -rw-r--r-- 1 root root 1204947 2010-01-18 16:46 /usr/share/GeoIP/GeoIP.dat

7-1 Apache GeoIP 아파치 모듈설치

#apt-get install libapache2-mod-geoip

 

#vi /etc/apache2/mods-available/geoip.conf

<IfModule mod_geoip.c>
GeoIPEnable On
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat
</IfModule>

아마 빨간 부분이 주석처리되어있을 건데  주석 푸시고 경로를 잘 맞추어주세요.

 

7-2. Apache GeoIP 모듈 활성화

#a2enmod geoip

8. Apache2 재시작

/etc/init.d/apache2 restart

이 상태에서 서버는 GeoIP 를 지원합니다.
phpinfo 파일을 만드셔서  웹페이지에서 보시면

u2
다음 두가지 변수를 추가제공합니다.

위의 변수는 $_SERVER['GEOIP_COUNTRY_CODE'] 같은 PHP문법으로도 접근하실 수 있습니다.

이 상태에서

9. 기존 VirtualHost 설정파일 편집
#vi /etc/apache2/sites-available/기존설정파일

에서

<Directory /home/lael.be/www/>
Options FollowSymLinks MultiViews
AllowOverride FileInfo
Order deny,allow
SetEnvIf GEOIP_COUNTRY_CODE KR AllowCountry
Deny from all
Allow from env=AllowCountry
</Directory>

빨간 부분과 같이 추가해 준 후

#/etc/init.d/apache2 reload

하시면 됩니다.

--
빨간 부분 해석
1) deny를 먼저적용하고 allow 를 적용함
2) GEOIP_COUNTRY_CODE 가 KR이면 AllowCountry 그룹에 넣음
>> 2번째 줄을 여러개 넣으셔도 됩니다.  KR 국가코드를 다른것으로 바꾸면 됩니다.
3) 모든 요청에 대해 거부
4) AllowCountry 그룹에 있는 요청은 허용
--

즉 한국인만 접속가능한 사이트가 되며 보안에 상당한 도움이 됩니다.