본문 바로가기
카테고리 없음

GeoIP를 이용한 국가별 IP 차단 설정 (Apache 및 iptables)

by moagos 2024. 11. 13.

 

GeoIP는 MaxMind에서 제공하는 오픈소스 라이브러리로, IP 주소를 기반으로 국가 정보를 확인할 수 있습니다. 이를 이용해 서버에 접근하는 IP를 국가별로 차단하거나 허용할 수 있습니다. 이 글에서는 CentOS 5.9 64bit 환경을 기준으로 Apache와 iptables에 GeoIP 모듈을 설정하는 방법을 설명합니다.

1. Apache에 GeoIP 모듈 설치하기

1-1. GeoIP C API 설치

  1. 필요한 파일을 다운로드하고 설치합니다:

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
  1. 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 모듈 설치하기

  1. 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
  1. 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 소스 설치

  1. 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
  1. 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 데이터베이스는 정기적으로 업데이트해야 하므로, 쉘 스크립트를 작성하여 매월 갱신하는 것이 좋습니다.