GeoIP는 MaxMind에서 제공하는 오픈소스 라이브러리로, IP 주소를 기반으로 국가 정보를 확인할 수 있습니다. 이를 이용해 서버에 접근하는 IP를 국가별로 차단하거나 허용할 수 있습니다. 이 글에서는 CentOS 5.9 64bit 환경을 기준으로 Apache와 iptables에 GeoIP 모듈을 설정하는 방법을 설명합니다.
1. Apache에 GeoIP 모듈 설치하기
1-1. GeoIP C API 설치
- 필요한 파일을 다운로드하고 설치합니다:
cd /usr/local/src
wget http://geolite.maxmind.com/download/geoip/api/c/GeoIP-1.4.6.tar.gz
tar xvfz GeoIP-1.4.6.tar.gz
cd GeoIP-1.4.6
./configure --prefix=/usr/local/GeoIP
make && make install
- GeoIP의 최신 IP 목록을 다운로드하여 업데이트합니다:
# 국가 정보 다운로드
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
gzip -d GeoIP.dat.gz
cp -a GeoIP.dat /usr/local/GeoIP/share/GeoIP/
1-2. Apache에 GeoIP 모듈 설치하기
- Apache 2.x용 mod_geoip2 모듈을 다운로드하여 설치합니다:
cd /usr/local/src
wget http://geolite.maxmind.com/download/geoip/api/mod_geoip2/mod_geoip2_1.2.5.tar.gz
tar zxvf mod_geoip2_1.2.5.tar.gz
cd mod_geoip2_1.2.5
/usr/local/apache/bin/apxs -i -a -L /usr/local/GeoIP/lib -I /usr/local/GeoIP/include -l GeoIP -c mod_geoip.c
- Apache 설정 파일을 수정하여 특정 국가 IP 차단 규칙을 추가합니다:
vi /usr/local/apache/conf/httpd.conf
# 특정 국가의 접근 차단 설정 예제
GeoIPEnable On
GeoIPDBFile /usr/local/GeoIP/share/GeoIP/GeoIP.dat
SetEnvIf GEOIP_COUNTRY_CODE CN go_out
SetEnvIf GEOIP_COUNTRY_CODE RU go_out
Order allow,deny
Allow from all
Deny from env=go_out
2. iptables에 GeoIP 모듈 설치하기
iptables에 GeoIP 모듈을 적용하여 국가별로 접속을 차단할 수 있습니다. 이를 위해 patch-o-matic-ng를 사용해 GeoIP 확장 기능을 추가합니다.
2-1. patch-o-matic-ng 및 iptables 소스 설치
- patch-o-matic-ng 다운로드 및 설치:
cd /usr/src
wget http://ftp.netfilter.org/pub/patch-o-matic-ng/snapshot/patch-o-matic-ng-20080521.tar.bz2
tar xvfz patch-o-matic-ng-20080521.tar.bz2
cd patch-o-matic-ng-20080521
./runme geoip
- GeoIP 확장 모듈을 커널과 iptables에 적용합니다:
cd /usr/src/iptables
make
make install
2-2. iptables에 GeoIP 룰 적용
iptables에 GeoIP 모듈을 이용한 국가별 차단 규칙을 설정합니다.
# 모든 국가를 차단하고 한국(KR)만 허용하는 규칙
iptables -A INPUT -m geoip ! --src-cc KR -j DROP
# 특정 국가(예: CN)의 SSH 접근 차단
iptables -A INPUT -p tcp --dport 22 -m geoip --src-cc CN -j DROP
마무리
이 글을 통해 Apache와 iptables에 GeoIP 모듈을 설치하여 국가별 IP 차단 설정을 완료했습니다. 이를 통해 보안을 강화하고 서버에 접근할 수 있는 국가를 제한할 수 있습니다.
**참고**: GeoIP 데이터베이스는 정기적으로 업데이트해야 하므로, 쉘 스크립트를 작성하여 매월 갱신하는 것이 좋습니다.